From 017b54f9a8ff159eb425e2a6af8c4a89f9ab8957 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 12 Jan 2015 14:48:31 +0100 Subject: [PATCH 01/25] Sharedialog: Allow modifications of permission for users --- src/gui/sharedialog.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ src/gui/sharedialog.h | 4 +++ src/gui/sharedialog.ui | 13 +++++-- 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 73cb504206..1235948207 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -8,7 +8,15 @@ #include namespace { + int SHARETYPE_USER = 0; + int SHARETYPE_GROUP = 1; int SHARETYPE_PUBLIC = 3; + + int PERM_READ = 1; + int PERM_UPDATE = 2; + int PERM_CREATE = 4; + int PERM_DELTEE = 8; + int PERM_SHARE = 16; } namespace OCC { @@ -47,6 +55,17 @@ ShareDialog::ShareDialog(QWidget *parent) : _ui->lineEdit_shareGroup->setPlaceholderText(tr("Share with group...")); _ui->lineEdit_shareUser->setPlaceholderText(tr("Share with user...")); _ui->lineEdit_password->setPlaceholderText(tr("Choose a password for the public link")); + + QStringList header; + header << "share_id"; + header << tr("User name"); + header << tr("User"); + header << tr("Edit"); + header << tr("Share"); + _ui->treeWidget_shareUser->setHeaderLabels(header); + _ui->treeWidget_shareUser->setColumnCount(5); + _ui->treeWidget_shareUser->hideColumn(0); + connect(_ui->treeWidget_shareUser, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotUserShareWidgetClicked(QTreeWidgetItem *, int))); } void ShareDialog::setExpireDate(const QString &date) @@ -141,6 +160,35 @@ void ShareDialog::slotSharesFetched(const QString &reply) { QVariantMap data = ShareDialog::_shares[i].toMap(); + if (data.value("share_type").toInt() == SHARETYPE_USER) + { + QStringList columns; + + columns << data.value("id").toString(); + columns << data.value("share_with").toString(); + columns << data.value("share_with_displayname").toString(); + columns << ""; + columns << ""; + + QTreeWidgetItem *item = new QTreeWidgetItem(columns); + + int perm = data.value("permissions").toInt(); + + if (perm & PERM_UPDATE) { + item->setCheckState(3, Qt::Checked); + } else { + item->setCheckState(3, Qt::Unchecked); + } + + if (perm & PERM_SHARE) { + item->setCheckState(4, Qt::Checked); + } else { + item->setCheckState(4, Qt::Unchecked); + } + + _ui->treeWidget_shareUser->insertTopLevelItem(0, item); + } + if (data.value("share_type").toInt() == SHARETYPE_PUBLIC) { _public_share_id = data.value("id").toULongLong(); @@ -260,6 +308,38 @@ void ShareDialog::slotCheckBoxExpireClicked() } } +void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, int column) +{ + + int id = item->data(0, Qt::DisplayRole).toInt(); + + int perm = 1; + if (item->checkState(3) == Qt::Checked) { + perm += PERM_UPDATE; + } + if (item->checkState(4) == Qt::Checked) { + perm += PERM_SHARE; + } + + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(id))); + QUrl postData; + QList > getParams; + QList > postParams; + getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); + postParams.append(qMakePair(QString::fromLatin1("permissions"), QString::number(perm))); + url.setQueryItems(getParams); + postData.setQueryItems(postParams); + OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateUserShare(QString))); + job->start(); +} + +void ShareDialog::slotUpdateUserShare(const QString &reply) +{ + +} + + OcsShareJob::OcsShareJob(const QByteArray &verb, const QUrl &url, const QUrl &postData, AccountPtr account, QObject* parent) : AbstractNetworkJob(account, "", parent), _verb(verb), diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index f7a30c705f..4d86c89bd1 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -16,6 +16,7 @@ #include "networkjobs.h" #include +#include namespace OCC { @@ -65,6 +66,9 @@ private slots: void slotCheckBoxPasswordClicked(); void slotCheckBoxExpireClicked(); void slotPasswordReturnPressed(); + + void slotUserShareWidgetClicked(QTreeWidgetItem *item, int column); + void slotUpdateUserShare(const QString &); private: Ui::ShareDialog *_ui; QString _path; diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index 43239fcc26..3fbe0035e1 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -35,16 +35,25 @@ - + - + Group + + + + + 1 + + + + From 9a35b5670e09b8ca14597df0b8c1061f40b2a51a Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 12 Jan 2015 21:18:57 +0100 Subject: [PATCH 02/25] ShareDialog: Allow sharing with users This commit needs a lot of cleaning up. And a lot of error checking needs to be added. However it is now possible to change and add new shares with users. Sharing with groups should be just copy paste. Also the UI needs some love. --- src/gui/sharedialog.cpp | 67 +++++++++++++++++++++++++++++++++++++++-- src/gui/sharedialog.h | 4 +++ src/gui/sharedialog.ui | 51 ++++++++++++++++++++++++++----- 3 files changed, 112 insertions(+), 10 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 1235948207..0c3262d166 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -15,7 +15,7 @@ namespace { int PERM_READ = 1; int PERM_UPDATE = 2; int PERM_CREATE = 4; - int PERM_DELTEE = 8; + int PERM_DELETE = 8; int PERM_SHARE = 16; } @@ -66,6 +66,10 @@ ShareDialog::ShareDialog(QWidget *parent) : _ui->treeWidget_shareUser->setColumnCount(5); _ui->treeWidget_shareUser->hideColumn(0); connect(_ui->treeWidget_shareUser, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotUserShareWidgetClicked(QTreeWidgetItem *, int))); + + connect(_ui->pushButton_shareUser, SIGNAL(clicked()), SLOT(slotAddUserShareClicked())); + connect(_ui->lineEdit_shareUser, SIGNAL(returnPressed()), SLOT(slotAddUserShareClicked())); + connect(_ui->pushButton_user_deleteShare, SIGNAL(clicked()), SLOT(slotDeleteUserShareClicked())); } void ShareDialog::setExpireDate(const QString &date) @@ -153,6 +157,8 @@ void ShareDialog::getShares() void ShareDialog::slotSharesFetched(const QString &reply) { + _ui->treeWidget_shareUser->clear(); + bool success = false; QVariantMap json = QtJson::parse(reply, success).toMap(); ShareDialog::_shares = json.value("ocs").toMap().values("data")[0].toList(); @@ -264,7 +270,6 @@ void ShareDialog::slotCheckBoxShareLinkClicked() void ShareDialog::slotCreateShareFetched(const QString &reply) { - qDebug() << Q_FUNC_INFO << reply; _ui->labelShareSpinner->hide(); bool success; QVariantMap json = QtJson::parse(reply, success).toMap(); @@ -336,9 +341,67 @@ void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, int column) void ShareDialog::slotUpdateUserShare(const QString &reply) { +} + +void ShareDialog::slotAddUserShareClicked() +{ + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); + QUrl postData; + QList > getParams; + QList > postParams; + getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); + postParams.append(qMakePair(QString::fromLatin1("path"), _path)); + postParams.append(qMakePair(QString::fromLatin1("shareType"), QString::number(SHARETYPE_USER))); + postParams.append(qMakePair(QString::fromLatin1("shareWith"), _ui->lineEdit_shareUser->text())); + + int perm = 1; + if (_ui->checkBox_user_edit->checkState() == Qt::Checked) { + perm += PERM_UPDATE; + } + if (_ui->checkBox_user_reshare->checkState() == Qt::Checked) { + perm += PERM_SHARE; + } + + postParams.append(qMakePair(QString("permissions"), QString::number(perm))); + url.setQueryItems(getParams); + postData.setQueryItems(postParams); + OcsShareJob *job = new OcsShareJob("POST", url, postData, AccountManager::instance()->account(), this); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddUserShareReply(QString))); + job->start(); +} + +void ShareDialog::slotAddUserShareReply(const QString &reply) +{ + getShares(); +} + +void ShareDialog::slotDeleteUserShareClicked() +{ + auto items = _ui->treeWidget_shareUser->selectedItems(); + if (items.empty()) { + return; + } + + auto item = items.at(0); + int id = item->data(0, Qt::DisplayRole).toInt(); + + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(id)); + QUrl postData; + QList > getParams; + QList > postParams; + getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); + url.setQueryItems(getParams); + postData.setQueryItems(postParams); + OcsShareJob *job = new OcsShareJob("DELETE", url, postData, AccountManager::instance()->account(), this); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteUserShareReply(QString))); + job->start(); } +void ShareDialog::slotDeleteUserShareReply(const QString &reply) +{ + getShares(); +} OcsShareJob::OcsShareJob(const QByteArray &verb, const QUrl &url, const QUrl &postData, AccountPtr account, QObject* parent) : AbstractNetworkJob(account, "", parent), diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 4d86c89bd1..f579dcee17 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -69,6 +69,10 @@ private slots: void slotUserShareWidgetClicked(QTreeWidgetItem *item, int column); void slotUpdateUserShare(const QString &); + void slotAddUserShareClicked(); + void slotAddUserShareReply(const QString &reply); + void slotDeleteUserShareClicked(); + void slotDeleteUserShareReply(const QString &reply); private: Ui::ShareDialog *_ui; QString _path; diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index 3fbe0035e1..d633d43665 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -7,7 +7,7 @@ 0 0 500 - 535 + 540 @@ -36,9 +36,18 @@ + + + + 1 + + + + + - + Group @@ -46,12 +55,38 @@ - - - - 1 - - + + + + + Edit + + + + + + + Reshare + + + + + + + Share + + + false + + + + + + + + + Delete + From a22a03e501c25f4c3ea8d574911af6e9d5fae59c Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Tue, 13 Jan 2015 16:33:57 +0100 Subject: [PATCH 03/25] ShareDialog: Group sharing is now also possible Basically the same functionality as for user sharing. Maybe it would be wise to merge the two functionalities. Should be rather straight forward if we also merge the UI parts. --- src/gui/sharedialog.cpp | 185 ++++++++++++++++++++++++++++++++++++++-- src/gui/sharedialog.h | 9 +- src/gui/sharedialog.ui | 64 ++++++++++++++ 3 files changed, 248 insertions(+), 10 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 0c3262d166..b68e6e2b93 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -56,20 +56,36 @@ ShareDialog::ShareDialog(QWidget *parent) : _ui->lineEdit_shareUser->setPlaceholderText(tr("Share with user...")); _ui->lineEdit_password->setPlaceholderText(tr("Choose a password for the public link")); - QStringList header; - header << "share_id"; - header << tr("User name"); - header << tr("User"); - header << tr("Edit"); - header << tr("Share"); - _ui->treeWidget_shareUser->setHeaderLabels(header); + QStringList headerUser; + headerUser << "share_id"; + headerUser << tr("User name"); + headerUser << tr("User"); + headerUser << tr("Edit"); + headerUser << tr("Share"); + _ui->treeWidget_shareUser->setHeaderLabels(headerUser); _ui->treeWidget_shareUser->setColumnCount(5); _ui->treeWidget_shareUser->hideColumn(0); connect(_ui->treeWidget_shareUser, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotUserShareWidgetClicked(QTreeWidgetItem *, int))); - connect(_ui->pushButton_shareUser, SIGNAL(clicked()), SLOT(slotAddUserShareClicked())); connect(_ui->lineEdit_shareUser, SIGNAL(returnPressed()), SLOT(slotAddUserShareClicked())); connect(_ui->pushButton_user_deleteShare, SIGNAL(clicked()), SLOT(slotDeleteUserShareClicked())); + + QStringList headerGroup; + headerGroup << "share_id"; + headerGroup << tr("Group"); + headerGroup << tr("Edit"); + headerGroup << tr("Create"); + headerGroup << tr("Delete"); + headerGroup << tr("Share"); + _ui->treeWidget_shareGroup->setHeaderLabels(headerGroup); + _ui->treeWidget_shareGroup->setColumnCount(6); + _ui->treeWidget_shareGroup->hideColumn(0); + connect(_ui->treeWidget_shareGroup, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotGroupShareWidgetClicked(QTreeWidgetItem *, int))); + connect(_ui->pushButton_shareGroup, SIGNAL(clicked()), SLOT(slotAddGroupShareClicked())); + connect(_ui->lineEdit_shareGroup, SIGNAL(returnPressed()), SLOT(slotAddGroupShareClicked())); + connect(_ui->pushButton_group_deleteShare, SIGNAL(clicked()), SLOT(slotDeleteGroupShareClicked())); + + } void ShareDialog::setExpireDate(const QString &date) @@ -158,6 +174,7 @@ void ShareDialog::getShares() void ShareDialog::slotSharesFetched(const QString &reply) { _ui->treeWidget_shareUser->clear(); + _ui->treeWidget_shareGroup->clear(); bool success = false; QVariantMap json = QtJson::parse(reply, success).toMap(); @@ -195,6 +212,49 @@ void ShareDialog::slotSharesFetched(const QString &reply) _ui->treeWidget_shareUser->insertTopLevelItem(0, item); } + if (data.value("share_type").toInt() == SHARETYPE_GROUP) + { + QStringList columns; + + columns << data.value("id").toString(); + columns << data.value("share_with").toString(); + columns << ""; + columns << ""; + columns << ""; + columns << ""; + + QTreeWidgetItem *item = new QTreeWidgetItem(columns); + + int perm = data.value("permissions").toInt(); + + if (perm & PERM_UPDATE) { + item->setCheckState(2, Qt::Checked); + } else { + item->setCheckState(2, Qt::Unchecked); + } + + if (perm & PERM_CREATE) { + item->setCheckState(3, Qt::Checked); + } else { + item->setCheckState(3, Qt::Unchecked); + } + + if (perm & PERM_DELETE) { + item->setCheckState(4, Qt::Checked); + } else { + item->setCheckState(4, Qt::Unchecked); + } + + if (perm & PERM_SHARE) { + item->setCheckState(5, Qt::Checked); + } else { + item->setCheckState(5, Qt::Unchecked); + } + + _ui->treeWidget_shareGroup->insertTopLevelItem(0, item); + + } + if (data.value("share_type").toInt() == SHARETYPE_PUBLIC) { _public_share_id = data.value("id").toULongLong(); @@ -313,7 +373,7 @@ void ShareDialog::slotCheckBoxExpireClicked() } } -void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, int column) +void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int column) { int id = item->data(0, Qt::DisplayRole).toInt(); @@ -403,6 +463,113 @@ void ShareDialog::slotDeleteUserShareReply(const QString &reply) getShares(); } + +void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int column) +{ + + int id = item->data(0, Qt::DisplayRole).toInt(); + + int perm = 1; + if (item->checkState(2) == Qt::Checked) { + perm += PERM_UPDATE; + } + if (item->checkState(3) == Qt::Checked) { + perm += PERM_CREATE; + } + if (item->checkState(4) == Qt::Checked) { + perm += PERM_DELETE; + } + if (item->checkState(5) == Qt::Checked) { + perm += PERM_SHARE; + } + + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(id))); + QUrl postData; + QList > getParams; + QList > postParams; + getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); + postParams.append(qMakePair(QString::fromLatin1("permissions"), QString::number(perm))); + url.setQueryItems(getParams); + postData.setQueryItems(postParams); + OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateGroupShare(QString))); + job->start(); +} + +void ShareDialog::slotUpdateGroupShare(const QString &reply) +{ +} + +void ShareDialog::slotAddGroupShareClicked() +{ + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); + QUrl postData; + QList > getParams; + QList > postParams; + getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); + postParams.append(qMakePair(QString::fromLatin1("path"), _path)); + postParams.append(qMakePair(QString::fromLatin1("shareType"), QString::number(SHARETYPE_GROUP))); + postParams.append(qMakePair(QString::fromLatin1("shareWith"), _ui->lineEdit_shareGroup->text())); + + int perm = 1; + if (_ui->checkBox_group_edit->checkState() == Qt::Checked) { + perm += PERM_UPDATE; + } + if (_ui->checkBox_group_create->checkState() == Qt::Checked) { + perm += PERM_CREATE; + } + if (_ui->checkBox_group_delete->checkState() == Qt::Checked) { + perm += PERM_DELETE; + } + if (_ui->checkBox_group_reshare->checkState() == Qt::Checked) { + perm += PERM_SHARE; + } + + postParams.append(qMakePair(QString("permissions"), QString::number(perm))); + url.setQueryItems(getParams); + postData.setQueryItems(postParams); + OcsShareJob *job = new OcsShareJob("POST", url, postData, AccountManager::instance()->account(), this); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddGroupShareReply(QString))); + job->start(); +} + +void ShareDialog::slotAddGroupShareReply(const QString &reply) +{ + qDebug() << Q_FUNC_INFO << reply; + getShares(); +} + +void ShareDialog::slotDeleteGroupShareClicked() +{ + auto items = _ui->treeWidget_shareGroup->selectedItems(); + if (items.empty()) { + return; + } + + auto item = items.at(0); + int id = item->data(0, Qt::DisplayRole).toInt(); + + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(id)); + QUrl postData; + QList > getParams; + QList > postParams; + getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); + url.setQueryItems(getParams); + postData.setQueryItems(postParams); + OcsShareJob *job = new OcsShareJob("DELETE", url, postData, AccountManager::instance()->account(), this); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteGroupShareReply(QString))); + job->start(); + +} + +void ShareDialog::slotDeleteGroupShareReply(const QString &reply) +{ + getShares(); +} + + + + OcsShareJob::OcsShareJob(const QByteArray &verb, const QUrl &url, const QUrl &postData, AccountPtr account, QObject* parent) : AbstractNetworkJob(account, "", parent), _verb(verb), diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index f579dcee17..ef8cad3fa1 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -67,12 +67,19 @@ private slots: void slotCheckBoxExpireClicked(); void slotPasswordReturnPressed(); - void slotUserShareWidgetClicked(QTreeWidgetItem *item, int column); + void slotUserShareWidgetClicked(QTreeWidgetItem *item, const int column); void slotUpdateUserShare(const QString &); void slotAddUserShareClicked(); void slotAddUserShareReply(const QString &reply); void slotDeleteUserShareClicked(); void slotDeleteUserShareReply(const QString &reply); + + void slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int column); + void slotUpdateGroupShare(const QString &); + void slotAddGroupShareClicked(); + void slotAddGroupShareReply(const QString &reply); + void slotDeleteGroupShareClicked(); + void slotDeleteGroupShareReply(const QString &reply); private: Ui::ShareDialog *_ui; QString _path; diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index d633d43665..b9f868ef61 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -25,6 +25,15 @@ Share with + + + + + 1 + + + + @@ -87,6 +96,61 @@ Delete + + false + + + + + + + + + Edit + + + + + + + Create + + + + + + + Delete + + + + + + + Share + + + + + + + Share + + + false + + + + + + + + + Delete + + + false + From cb18dfaaefd0c94571072d9d348f2e6f9d6abdfd Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Tue, 13 Jan 2015 19:14:49 +0100 Subject: [PATCH 04/25] Sharedialog: Of course users can also have create and delete privileges --- src/gui/sharedialog.cpp | 38 +++++++++++++++++++++++++++++--------- src/gui/sharedialog.ui | 14 ++++++++++++++ 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index b68e6e2b93..0e1a3f4eef 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -61,9 +61,11 @@ ShareDialog::ShareDialog(QWidget *parent) : headerUser << tr("User name"); headerUser << tr("User"); headerUser << tr("Edit"); + headerUser << tr("Create"); + headerUser << tr("Delete"); headerUser << tr("Share"); _ui->treeWidget_shareUser->setHeaderLabels(headerUser); - _ui->treeWidget_shareUser->setColumnCount(5); + _ui->treeWidget_shareUser->setColumnCount(7); _ui->treeWidget_shareUser->hideColumn(0); connect(_ui->treeWidget_shareUser, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotUserShareWidgetClicked(QTreeWidgetItem *, int))); connect(_ui->pushButton_shareUser, SIGNAL(clicked()), SLOT(slotAddUserShareClicked())); @@ -192,6 +194,8 @@ void ShareDialog::slotSharesFetched(const QString &reply) columns << data.value("share_with_displayname").toString(); columns << ""; columns << ""; + columns << ""; + columns << ""; QTreeWidgetItem *item = new QTreeWidgetItem(columns); @@ -202,12 +206,21 @@ void ShareDialog::slotSharesFetched(const QString &reply) } else { item->setCheckState(3, Qt::Unchecked); } - - if (perm & PERM_SHARE) { + if (perm & PERM_CREATE) { item->setCheckState(4, Qt::Checked); } else { item->setCheckState(4, Qt::Unchecked); } + if (perm & PERM_DELETE) { + item->setCheckState(5, Qt::Checked); + } else { + item->setCheckState(5, Qt::Unchecked); + } + if (perm & PERM_SHARE) { + item->setCheckState(6, Qt::Checked); + } else { + item->setCheckState(6, Qt::Unchecked); + } _ui->treeWidget_shareUser->insertTopLevelItem(0, item); } @@ -232,27 +245,22 @@ void ShareDialog::slotSharesFetched(const QString &reply) } else { item->setCheckState(2, Qt::Unchecked); } - if (perm & PERM_CREATE) { item->setCheckState(3, Qt::Checked); } else { item->setCheckState(3, Qt::Unchecked); } - if (perm & PERM_DELETE) { item->setCheckState(4, Qt::Checked); } else { item->setCheckState(4, Qt::Unchecked); } - if (perm & PERM_SHARE) { item->setCheckState(5, Qt::Checked); } else { item->setCheckState(5, Qt::Unchecked); } - _ui->treeWidget_shareGroup->insertTopLevelItem(0, item); - } if (data.value("share_type").toInt() == SHARETYPE_PUBLIC) @@ -383,6 +391,12 @@ void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int co perm += PERM_UPDATE; } if (item->checkState(4) == Qt::Checked) { + perm += PERM_CREATE; + } + if (item->checkState(5) == Qt::Checked) { + perm += PERM_DELETE; + } + if (item->checkState(6) == Qt::Checked) { perm += PERM_SHARE; } @@ -417,7 +431,13 @@ void ShareDialog::slotAddUserShareClicked() int perm = 1; if (_ui->checkBox_user_edit->checkState() == Qt::Checked) { perm += PERM_UPDATE; - } + } + if (_ui->checkBox_user_create->checkState() == Qt::Checked) { + perm += PERM_CREATE; + } + if (_ui->checkBox_user_delete->checkState() == Qt::Checked) { + perm += PERM_DELETE; + } if (_ui->checkBox_user_reshare->checkState() == Qt::Checked) { perm += PERM_SHARE; } diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index b9f868ef61..d2b5314dab 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -72,6 +72,20 @@ + + + + Create + + + + + + + Delete + + + From d1d8a40acfc69bf1ff76a405a2e8166f49e3c378 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Tue, 13 Jan 2015 19:24:23 +0100 Subject: [PATCH 05/25] Sharedialog: fix unused var compiler warnings --- src/gui/sharedialog.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 0e1a3f4eef..23e0ebbed4 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -12,7 +12,7 @@ namespace { int SHARETYPE_GROUP = 1; int SHARETYPE_PUBLIC = 3; - int PERM_READ = 1; + //int PERM_READ = 1; sharing always allows reading int PERM_UPDATE = 2; int PERM_CREATE = 4; int PERM_DELETE = 8; @@ -381,7 +381,7 @@ void ShareDialog::slotCheckBoxExpireClicked() } } -void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int column) +void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int /* column */) { int id = item->data(0, Qt::DisplayRole).toInt(); @@ -413,7 +413,7 @@ void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int co job->start(); } -void ShareDialog::slotUpdateUserShare(const QString &reply) +void ShareDialog::slotUpdateUserShare(const QString & /*reply*/) { } @@ -450,7 +450,7 @@ void ShareDialog::slotAddUserShareClicked() job->start(); } -void ShareDialog::slotAddUserShareReply(const QString &reply) +void ShareDialog::slotAddUserShareReply(const QString &/*reply*/) { getShares(); } @@ -478,13 +478,13 @@ void ShareDialog::slotDeleteUserShareClicked() } -void ShareDialog::slotDeleteUserShareReply(const QString &reply) +void ShareDialog::slotDeleteUserShareReply(const QString &/*reply*/) { getShares(); } -void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int column) +void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int /*column*/) { int id = item->data(0, Qt::DisplayRole).toInt(); @@ -516,8 +516,9 @@ void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int c job->start(); } -void ShareDialog::slotUpdateGroupShare(const QString &reply) +void ShareDialog::slotUpdateGroupShare(const QString &/*reply*/) { + getShares(); } void ShareDialog::slotAddGroupShareClicked() @@ -582,7 +583,7 @@ void ShareDialog::slotDeleteGroupShareClicked() } -void ShareDialog::slotDeleteGroupShareReply(const QString &reply) +void ShareDialog::slotDeleteGroupShareReply(const QString &/*reply*/) { getShares(); } From f6a83d5de2b587bcb20a5f2be80a01b7da8cdf66 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 10:35:09 +0100 Subject: [PATCH 06/25] ShareDialog: UI is different for files/dirs Bunch of if statements to make sure that we do not display delete/create on files. --- src/gui/sharedialog.cpp | 113 +++++++++++++++++++++------------------- src/gui/sharedialog.h | 5 +- src/gui/socketapi.cpp | 4 +- src/gui/socketapi.h | 2 +- 4 files changed, 66 insertions(+), 58 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 23e0ebbed4..8bed91ee25 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -21,9 +21,11 @@ namespace { namespace OCC { -ShareDialog::ShareDialog(QWidget *parent) : - QDialog(parent), - _ui(new Ui::ShareDialog) +ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent) : + QDialog(parent), + _ui(new Ui::ShareDialog), + _path(path), + _isDir(isDir) { setAttribute(Qt::WA_DeleteOnClose); _ui->setupUi(this); @@ -61,11 +63,17 @@ ShareDialog::ShareDialog(QWidget *parent) : headerUser << tr("User name"); headerUser << tr("User"); headerUser << tr("Edit"); - headerUser << tr("Create"); - headerUser << tr("Delete"); + if (_isDir) { + headerUser << tr("Create"); + headerUser << tr("Delete"); + } headerUser << tr("Share"); _ui->treeWidget_shareUser->setHeaderLabels(headerUser); - _ui->treeWidget_shareUser->setColumnCount(7); + if (_isDir) { + _ui->treeWidget_shareUser->setColumnCount(7); + } else { + _ui->treeWidget_shareUser->setColumnCount(5); + } _ui->treeWidget_shareUser->hideColumn(0); connect(_ui->treeWidget_shareUser, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotUserShareWidgetClicked(QTreeWidgetItem *, int))); connect(_ui->pushButton_shareUser, SIGNAL(clicked()), SLOT(slotAddUserShareClicked())); @@ -76,18 +84,29 @@ ShareDialog::ShareDialog(QWidget *parent) : headerGroup << "share_id"; headerGroup << tr("Group"); headerGroup << tr("Edit"); - headerGroup << tr("Create"); - headerGroup << tr("Delete"); + if (_isDir) { + headerGroup << tr("Create"); + headerGroup << tr("Delete"); + } headerGroup << tr("Share"); _ui->treeWidget_shareGroup->setHeaderLabels(headerGroup); - _ui->treeWidget_shareGroup->setColumnCount(6); + if (_isDir) { + _ui->treeWidget_shareGroup->setColumnCount(6); + } else { + _ui->treeWidget_shareGroup->setColumnCount(4); + } _ui->treeWidget_shareGroup->hideColumn(0); connect(_ui->treeWidget_shareGroup, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotGroupShareWidgetClicked(QTreeWidgetItem *, int))); connect(_ui->pushButton_shareGroup, SIGNAL(clicked()), SLOT(slotAddGroupShareClicked())); connect(_ui->lineEdit_shareGroup, SIGNAL(returnPressed()), SLOT(slotAddGroupShareClicked())); connect(_ui->pushButton_group_deleteShare, SIGNAL(clicked()), SLOT(slotDeleteGroupShareClicked())); - + if (!_isDir) { + _ui->checkBox_user_create->hide(); + _ui->checkBox_user_delete->hide(); + _ui->checkBox_group_create->hide(); + _ui->checkBox_group_delete->hide(); + } } void ShareDialog::setExpireDate(const QString &date) @@ -121,9 +140,10 @@ QString ShareDialog::getPath() return _path; } -void ShareDialog::setPath(const QString &path) +void ShareDialog::setPath(const QString &path, const bool &isDir) { _path = path; + _isDir = isDir; ShareDialog::getShares(); } @@ -194,33 +214,25 @@ void ShareDialog::slotSharesFetched(const QString &reply) columns << data.value("share_with_displayname").toString(); columns << ""; columns << ""; - columns << ""; - columns << ""; + if (_isDir) { + columns << ""; + columns << ""; + } QTreeWidgetItem *item = new QTreeWidgetItem(columns); int perm = data.value("permissions").toInt(); - if (perm & PERM_UPDATE) { - item->setCheckState(3, Qt::Checked); - } else { - item->setCheckState(3, Qt::Unchecked); - } - if (perm & PERM_CREATE) { - item->setCheckState(4, Qt::Checked); - } else { - item->setCheckState(4, Qt::Unchecked); - } - if (perm & PERM_DELETE) { - item->setCheckState(5, Qt::Checked); - } else { - item->setCheckState(5, Qt::Unchecked); - } - if (perm & PERM_SHARE) { - item->setCheckState(6, Qt::Checked); - } else { - item->setCheckState(6, Qt::Unchecked); + int col = 3; + item->setCheckState(col, perm & PERM_UPDATE ? Qt::Checked : Qt::Unchecked); + col++; + if (_isDir) { + item->setCheckState(col, perm & PERM_CREATE ? Qt::Checked : Qt::Unchecked); + col++; + item->setCheckState(col, perm & PERM_DELETE ? Qt::Checked : Qt::Unchecked); + col++; } + item->setCheckState(col, perm & PERM_SHARE ? Qt::Checked : Qt::Unchecked); _ui->treeWidget_shareUser->insertTopLevelItem(0, item); } @@ -233,33 +245,26 @@ void ShareDialog::slotSharesFetched(const QString &reply) columns << data.value("share_with").toString(); columns << ""; columns << ""; - columns << ""; - columns << ""; + if (_isDir) { + columns << ""; + columns << ""; + } QTreeWidgetItem *item = new QTreeWidgetItem(columns); int perm = data.value("permissions").toInt(); + + int col = 2; + item->setCheckState(col, perm & PERM_UPDATE ? Qt::Checked : Qt::Unchecked); + col++; + if (_isDir) { + item->setCheckState(col, perm & PERM_CREATE ? Qt::Checked : Qt::Unchecked); + col++; + item->setCheckState(col, perm & PERM_DELETE ? Qt::Checked : Qt::Unchecked); + col++; + } + item->setCheckState(col, perm & PERM_SHARE ? Qt::Checked : Qt::Unchecked); - if (perm & PERM_UPDATE) { - item->setCheckState(2, Qt::Checked); - } else { - item->setCheckState(2, Qt::Unchecked); - } - if (perm & PERM_CREATE) { - item->setCheckState(3, Qt::Checked); - } else { - item->setCheckState(3, Qt::Unchecked); - } - if (perm & PERM_DELETE) { - item->setCheckState(4, Qt::Checked); - } else { - item->setCheckState(4, Qt::Unchecked); - } - if (perm & PERM_SHARE) { - item->setCheckState(5, Qt::Checked); - } else { - item->setCheckState(5, Qt::Unchecked); - } _ui->treeWidget_shareGroup->insertTopLevelItem(0, item); } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index ef8cad3fa1..160bbc0d65 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -50,10 +50,10 @@ class ShareDialog : public QDialog Q_OBJECT public: - explicit ShareDialog(QWidget *parent = 0); + explicit ShareDialog(const QString &path, const bool &isDir, QWidget *parent = 0); ~ShareDialog(); void getShares(); - void setPath(const QString &path); + void setPath(const QString &path, const bool &isDir); QString getPath(); private slots: void slotSharesFetched(const QString &reply); @@ -83,6 +83,7 @@ private slots: private: Ui::ShareDialog *_ui; QString _path; + bool _isDir; QList _shares; qulonglong _public_share_id; void setPassword(QString password); diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 4149c56725..d0778d4e7a 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -414,9 +414,11 @@ void SocketApi::command_SHARE(const QString& argument, SocketType* socket) } else { const QString message = QLatin1String("SHARE:OK:")+QDir::toNativeSeparators(argument); sendMessage(socket, message); + + QFileInfo info(argument); const QString folderForPath = shareFolder->path(); const QString path = shareFolder->remotePath() + argument.right(argument.count()-folderForPath.count()+1); - emit shareCommandReceived(path); + emit shareCommandReceived(path, info.isDir()); } } diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index ac6000ae27..f486e7586a 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -58,7 +58,7 @@ public slots: void slotClearExcludesList(); signals: - void shareCommandReceived(const QString &path); + void shareCommandReceived(const QString &path, const bool &isDir); private slots: void slotNewConnection(); From a7e69a5dc5861d788e94bd38f03b4e377fd52205 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 13:21:53 +0100 Subject: [PATCH 07/25] Sharedialog: Started parsing server replies --- src/gui/sharedialog.cpp | 37 +++++++++++++++++++++++++++++++++++-- src/gui/sharedialog.h | 1 + 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 8bed91ee25..8eb7aa0a0b 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -6,6 +6,7 @@ #include "folderman.h" #include #include +#include namespace { int SHARETYPE_USER = 0; @@ -561,8 +562,27 @@ void ShareDialog::slotAddGroupShareClicked() void ShareDialog::slotAddGroupShareReply(const QString &reply) { - qDebug() << Q_FUNC_INFO << reply; - getShares(); + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + + if (code == 100) { + getShares(); + } else if (code == 400) { + QMessageBox msgBox; + msgBox.setText("Unknown share type"); + msgBox.exec(); + } else if (code == 403) { + QMessageBox msgBox; + msgBox.setText("Public upload was disabled by the admin"); + msgBox.exec(); + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("File could not be shared"); + msgBox.exec(); + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + } } void ShareDialog::slotDeleteGroupShareClicked() @@ -593,7 +613,20 @@ void ShareDialog::slotDeleteGroupShareReply(const QString &/*reply*/) getShares(); } +int ShareDialog::checkJsonReturnCode(const QString &reply) +{ + bool success; + QVariantMap json = QtJson::parse(reply, success).toMap(); + if (!success) { + qDebug() << Q_FUNC_INFO << "Failed to parse reply"; + } + + //TODO proper checking + int code = json.value("ocs").toMap().value("meta").toMap().value("statuscode").toInt(); + + return code; +} OcsShareJob::OcsShareJob(const QByteArray &verb, const QUrl &url, const QUrl &postData, AccountPtr account, QObject* parent) diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 160bbc0d65..2be8b8dee2 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -88,6 +88,7 @@ private: qulonglong _public_share_id; void setPassword(QString password); void setExpireDate(const QString &date); + int checkJsonReturnCode(const QString &reply); }; } From 9addd56f9b0ef4d017976ec892d620505b839876 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 13:26:19 +0100 Subject: [PATCH 08/25] Sharedialog: follow correct behavior for files when editing permissions --- src/gui/sharedialog.cpp | 44 ++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 8eb7aa0a0b..c027e7fee3 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -396,14 +396,20 @@ void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int /* if (item->checkState(3) == Qt::Checked) { perm += PERM_UPDATE; } - if (item->checkState(4) == Qt::Checked) { - perm += PERM_CREATE; - } - if (item->checkState(5) == Qt::Checked) { - perm += PERM_DELETE; - } - if (item->checkState(6) == Qt::Checked) { - perm += PERM_SHARE; + if (_isDir) { + if (item->checkState(4) == Qt::Checked) { + perm += PERM_CREATE; + } + if (item->checkState(5) == Qt::Checked) { + perm += PERM_DELETE; + } + if (item->checkState(6) == Qt::Checked) { + perm += PERM_SHARE; + } + } else { + if (item->checkState(4) == Qt::Checked) { + perm += PERM_SHARE; + } } QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(id))); @@ -499,14 +505,20 @@ void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int / if (item->checkState(2) == Qt::Checked) { perm += PERM_UPDATE; } - if (item->checkState(3) == Qt::Checked) { - perm += PERM_CREATE; - } - if (item->checkState(4) == Qt::Checked) { - perm += PERM_DELETE; - } - if (item->checkState(5) == Qt::Checked) { - perm += PERM_SHARE; + if (_isDir) { + if (item->checkState(3) == Qt::Checked) { + perm += PERM_CREATE; + } + if (item->checkState(4) == Qt::Checked) { + perm += PERM_DELETE; + } + if (item->checkState(5) == Qt::Checked) { + perm += PERM_SHARE; + } + } else { + if (item->checkState(3) == Qt::Checked) { + perm += PERM_SHARE; + } } QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(id))); From e420a689dcde602fe93d5efecdd2349a3a74e29b Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 13:37:58 +0100 Subject: [PATCH 09/25] Sharedialog: More reply checking and removing some duplicated code --- src/gui/sharedialog.cpp | 37 +++++++++++++++++++------------------ src/gui/sharedialog.h | 7 +++---- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index c027e7fee3..3437a0c676 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -458,15 +458,10 @@ void ShareDialog::slotAddUserShareClicked() url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("POST", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddUserShareReply(QString))); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddShareReply(QString))); job->start(); } -void ShareDialog::slotAddUserShareReply(const QString &/*reply*/) -{ - getShares(); -} - void ShareDialog::slotDeleteUserShareClicked() { auto items = _ui->treeWidget_shareUser->selectedItems(); @@ -485,17 +480,11 @@ void ShareDialog::slotDeleteUserShareClicked() url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("DELETE", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteUserShareReply(QString))); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteShareReply(QString))); job->start(); } -void ShareDialog::slotDeleteUserShareReply(const QString &/*reply*/) -{ - getShares(); -} - - void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int /*column*/) { @@ -568,11 +557,11 @@ void ShareDialog::slotAddGroupShareClicked() url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("POST", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddGroupShareReply(QString))); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddShareReply(QString))); job->start(); } -void ShareDialog::slotAddGroupShareReply(const QString &reply) +void ShareDialog::slotAddShareReply(const QString &reply) { int code = checkJsonReturnCode(reply); @@ -615,14 +604,26 @@ void ShareDialog::slotDeleteGroupShareClicked() url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("DELETE", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteGroupShareReply(QString))); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteShareReply(QString))); job->start(); } -void ShareDialog::slotDeleteGroupShareReply(const QString &/*reply*/) +void ShareDialog::slotDeleteShareReply(const QString &reply) { - getShares(); + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + + if (code == 100) { + getShares(); + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("File could not be deleted"); + msgBox.exec(); + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + } } int ShareDialog::checkJsonReturnCode(const QString &reply) diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 2be8b8dee2..a45191f953 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -70,16 +70,15 @@ private slots: void slotUserShareWidgetClicked(QTreeWidgetItem *item, const int column); void slotUpdateUserShare(const QString &); void slotAddUserShareClicked(); - void slotAddUserShareReply(const QString &reply); + + void slotAddShareReply(const QString &reply); void slotDeleteUserShareClicked(); - void slotDeleteUserShareReply(const QString &reply); + void slotDeleteShareReply(const QString &reply); void slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int column); void slotUpdateGroupShare(const QString &); void slotAddGroupShareClicked(); - void slotAddGroupShareReply(const QString &reply); void slotDeleteGroupShareClicked(); - void slotDeleteGroupShareReply(const QString &reply); private: Ui::ShareDialog *_ui; QString _path; From 0bd6eb17925409730982026365006fc401c7e0f5 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 13:51:02 +0100 Subject: [PATCH 10/25] Sharedialog: fix changes due to rebase --- src/gui/application.cpp | 4 ++-- src/gui/owncloudgui.cpp | 6 +++--- src/gui/owncloudgui.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 8e6a98324a..67fe0019e8 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -147,8 +147,8 @@ Application::Application(int &argc, char **argv) : slotAccountStateAdded(ai); } - connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString)), - _gui, SLOT(slotShowShareDialog(QString))); + connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, bool)), + _gui, SLOT(slotShowShareDialog(QString, bool))); // startup procedure. connect(&_checkConnectionTimer, SIGNAL(timeout()), this, SLOT(slotCheckConnection())); diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 50b4804a54..53f6c65409 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -636,12 +636,12 @@ void ownCloudGui::raiseDialog( QWidget *raiseWidget ) } -void ownCloudGui::slotShowShareDialog(const QString &path) +void ownCloudGui::slotShowShareDialog(const QString &path, const bool &isDir) { qDebug() << Q_FUNC_INFO << "Opening share dialog"; - ShareDialog *w = new ShareDialog; + ShareDialog *w = new ShareDialog(path, isDir); + w->getShares(); w->setAttribute( Qt::WA_DeleteOnClose, true ); - w->setPath(path); w->show(); } diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h index f3f0c84683..ec6878e039 100644 --- a/src/gui/owncloudgui.h +++ b/src/gui/owncloudgui.h @@ -70,7 +70,7 @@ public slots: void slotHelp(); void slotOpenPath(const QString& path); void slotAccountStateChanged(); - void slotShowShareDialog(const QString &path); + void slotShowShareDialog(const QString &path, const bool &isDir); private slots: void slotDisplayIdle(); From 3e81839af53b574192299b592826e93f5d75cb1e Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 14:21:18 +0100 Subject: [PATCH 11/25] Sharedialog: Removed duplicted code Handling of updated shares is identical from users and groups --- src/gui/sharedialog.cpp | 33 +++++++++++++++++++++++++-------- src/gui/sharedialog.h | 5 +---- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 3437a0c676..99bd9187b6 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -421,12 +421,34 @@ void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int /* url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateUserShare(QString))); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateShareReply(QString))); job->start(); } -void ShareDialog::slotUpdateUserShare(const QString & /*reply*/) +void ShareDialog::slotUpdateShareReply(const QString &reply) { + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + + if (code == 100) { + getShares(); + } else if (code == 400) { + QMessageBox msgBox; + msgBox.setText("Wrong or no update parameter given"); + msgBox.exec(); + } else if (code == 403) { + QMessageBox msgBox; + msgBox.setText("Public upload was disabled by the admin"); + msgBox.exec(); + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("Couldn’t update share"); + msgBox.exec(); + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + } + } void ShareDialog::slotAddUserShareClicked() @@ -519,15 +541,10 @@ void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int / url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateGroupShare(QString))); + connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateShareReply(QString))); job->start(); } -void ShareDialog::slotUpdateGroupShare(const QString &/*reply*/) -{ - getShares(); -} - void ShareDialog::slotAddGroupShareClicked() { QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index a45191f953..2a79d95076 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -68,15 +68,12 @@ private slots: void slotPasswordReturnPressed(); void slotUserShareWidgetClicked(QTreeWidgetItem *item, const int column); - void slotUpdateUserShare(const QString &); + void slotUpdateShareReply(const QString &reply); void slotAddUserShareClicked(); - void slotAddShareReply(const QString &reply); void slotDeleteUserShareClicked(); void slotDeleteShareReply(const QString &reply); - void slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int column); - void slotUpdateGroupShare(const QString &); void slotAddGroupShareClicked(); void slotDeleteGroupShareClicked(); private: From 7b1cfd69d7817ecf45643e5dae9436b378b875d4 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 18:42:56 +0100 Subject: [PATCH 12/25] Sharedialog: use QProgressIndicator This is a merge from the movie in the original commit (which was local) to the QProgressIndicator. However, on all connections I tested it, it did not add much since the API is in gernal pretty quick. So maybe we can just remove this. --- src/gui/sharedialog.cpp | 34 ++++++++++++++++------------------ src/gui/sharedialog.h | 5 +++++ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 99bd9187b6..f0497b683d 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -4,6 +4,7 @@ #include "account.h" #include "json.h" #include "folderman.h" +#include "QProgressIndicator.h" #include #include #include @@ -32,23 +33,20 @@ ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent _ui->setupUi(this); _ui->pushButton_copy->setIcon(QIcon::fromTheme("edit-copy")); layout()->setSizeConstraint(QLayout::SetFixedSize); - QMovie *movie = new QMovie("/home/azelphur/ownCloud-share-tools/loading-icon.gif"); - movie->start(); - _ui->labelShareSpinner->setMovie(movie); - _ui->labelShareSpinner->hide(); - _ui->labelPasswordSpinner->setMovie(movie); - _ui->labelPasswordSpinner->hide(); + _pi_link = new QProgressIndicator(); + _pi_password = new QProgressIndicator(); + _pi_date = new QProgressIndicator(); + _ui->horizontalLayout_4->addWidget(_pi_link); + _ui->horizontalLayout_5->addWidget(_pi_password); + _ui->horizontalLayout_3->addWidget(_pi_date); - _ui->labelCalendarSpinner->setMovie(movie); - _ui->labelCalendarSpinner->hide(); connect(_ui->checkBox_shareLink, SIGNAL(clicked()), this, SLOT(slotCheckBoxShareLinkClicked())); connect(_ui->checkBox_password, SIGNAL(clicked()), this, SLOT(slotCheckBoxPasswordClicked())); connect(_ui->lineEdit_password, SIGNAL(returnPressed()), this, SLOT(slotPasswordReturnPressed())); connect(_ui->checkBox_expire, SIGNAL(clicked()), this, SLOT(slotCheckBoxExpireClicked())); connect(_ui->calendar, SIGNAL(clicked(QDate)), SLOT(slotCalendarClicked(QDate))); - _ui->labelShareSpinner->hide(); _ui->lineEdit_shareLink->hide(); _ui->pushButton_copy->hide(); _ui->lineEdit_password->hide(); @@ -112,7 +110,7 @@ ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent void ShareDialog::setExpireDate(const QString &date) { - _ui->labelCalendarSpinner->show(); + _pi_date->startAnimation(); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); QUrl postData; QList > getParams; @@ -128,7 +126,7 @@ void ShareDialog::setExpireDate(const QString &date) void ShareDialog::slotExpireSet(const QString & /* reply */) { - _ui->labelCalendarSpinner->hide(); + _pi_date->stopAnimation(); } void ShareDialog::slotCalendarClicked(const QDate &date) @@ -162,7 +160,7 @@ void ShareDialog::slotPasswordReturnPressed() void ShareDialog::setPassword(QString password) { - _ui->labelPasswordSpinner->show(); + _pi_password->startAnimation(); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); QUrl postData; QList > getParams; @@ -178,7 +176,7 @@ void ShareDialog::setPassword(QString password) void ShareDialog::slotPasswordSet(const QString & /* reply */) { - _ui->labelPasswordSpinner->hide(); + _pi_password->stopAnimation(); } void ShareDialog::getShares() @@ -302,7 +300,7 @@ void ShareDialog::slotSharesFetched(const QString &reply) void ShareDialog::slotDeleteShareFetched(const QString & /* reply */) { - _ui->labelShareSpinner->hide(); + _pi_link->stopAnimation(); _ui->lineEdit_shareLink->hide(); _ui->pushButton_copy->hide(); _ui->lineEdit_password->hide(); @@ -315,7 +313,7 @@ void ShareDialog::slotCheckBoxShareLinkClicked() { if (_ui->checkBox_shareLink->checkState() == Qt::Checked) { - _ui->labelShareSpinner->show(); + _pi_link->startAnimation(); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); QUrl postData; QList > getParams; @@ -331,7 +329,7 @@ void ShareDialog::slotCheckBoxShareLinkClicked() } else { - _ui->labelShareSpinner->show(); + _pi_link->startAnimation(); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); QList > getParams; getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); @@ -344,7 +342,7 @@ void ShareDialog::slotCheckBoxShareLinkClicked() void ShareDialog::slotCreateShareFetched(const QString &reply) { - _ui->labelShareSpinner->hide(); + _pi_link->stopAnimation(); bool success; QVariantMap json = QtJson::parse(reply, success).toMap(); _public_share_id = json.value("ocs").toMap().values("data")[0].toMap().value("id").toULongLong(); @@ -366,7 +364,7 @@ void ShareDialog::slotCheckBoxPasswordClicked() else { ShareDialog::setPassword(QString()); - _ui->labelPasswordSpinner->show(); + _pi_password->startAnimation(); _ui->lineEdit_password->hide(); } } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 2a79d95076..827e7c5942 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -15,6 +15,7 @@ #define SHAREDIALOG_H #include "networkjobs.h" +#include "QProgressIndicator.h" #include #include @@ -85,6 +86,10 @@ private: void setPassword(QString password); void setExpireDate(const QString &date); int checkJsonReturnCode(const QString &reply); + + QProgressIndicator *_pi_link; + QProgressIndicator *_pi_password; + QProgressIndicator *_pi_date; }; } From 879d41bf2d414a44b7dad685158026e17c7ed8e0 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 19:08:04 +0100 Subject: [PATCH 13/25] Sharedialog: Fix spinners and passwordfield The password field now show correct info when a password is entered etc. Maybe we should have an extra info part where we state that the user needs to press enter to submit the password --- src/gui/sharedialog.cpp | 14 ++++++++++++-- src/gui/sharedialog.ui | 21 --------------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index f0497b683d..1a8841eb9d 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -37,6 +37,8 @@ ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent _pi_link = new QProgressIndicator(); _pi_password = new QProgressIndicator(); _pi_date = new QProgressIndicator(); + _pi_password->hide(); + _pi_date->hide(); _ui->horizontalLayout_4->addWidget(_pi_link); _ui->horizontalLayout_5->addWidget(_pi_password); _ui->horizontalLayout_3->addWidget(_pi_date); @@ -154,8 +156,9 @@ ShareDialog::~ShareDialog() void ShareDialog::slotPasswordReturnPressed() { ShareDialog::setPassword(_ui->lineEdit_password->text()); - _ui->lineEdit_password->setPlaceholderText(tr("Password Protected")); _ui->lineEdit_password->setText(QString()); + _ui->lineEdit_password->setPlaceholderText(tr("Password Protected")); + _ui->lineEdit_password->clearFocus(); } void ShareDialog::setPassword(QString password) @@ -281,7 +284,7 @@ void ShareDialog::slotSharesFetched(const QString &reply) if (data.value("share_with").isValid()) { _ui->checkBox_password->setChecked(true); - _ui->lineEdit_password->setText("********"); + _ui->lineEdit_password->setPlaceholderText("********"); _ui->lineEdit_password->show(); } @@ -300,6 +303,9 @@ void ShareDialog::slotSharesFetched(const QString &reply) void ShareDialog::slotDeleteShareFetched(const QString & /* reply */) { + _pi_password->hide(); + _pi_date->hide(); + _pi_link->stopAnimation(); _ui->lineEdit_shareLink->hide(); _ui->pushButton_copy->hide(); @@ -343,6 +349,8 @@ void ShareDialog::slotCheckBoxShareLinkClicked() void ShareDialog::slotCreateShareFetched(const QString &reply) { _pi_link->stopAnimation(); + _pi_password->show(); + _pi_date->show(); bool success; QVariantMap json = QtJson::parse(reply, success).toMap(); _public_share_id = json.value("ocs").toMap().values("data")[0].toMap().value("id").toULongLong(); @@ -360,10 +368,12 @@ void ShareDialog::slotCheckBoxPasswordClicked() if (_ui->checkBox_password->checkState() == Qt::Checked) { _ui->lineEdit_password->show(); + _ui->lineEdit_password->setPlaceholderText(tr("Choose a password for the public link")); } else { ShareDialog::setPassword(QString()); + _ui->lineEdit_password->setPlaceholderText(QString()); _pi_password->startAnimation(); _ui->lineEdit_password->hide(); } diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index d2b5314dab..598459f6a5 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -215,13 +215,6 @@ - - - - - - - @@ -254,13 +247,6 @@ - - - - - - - @@ -283,13 +269,6 @@ - - - - - - - From b80bbe65870aa0c1dec916e6642c394e777b8de3 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 19:36:42 +0100 Subject: [PATCH 14/25] Sharedialog: more const --- src/gui/sharedialog.cpp | 2 +- src/gui/sharedialog.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 1a8841eb9d..0fb3ba0fcd 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -161,7 +161,7 @@ void ShareDialog::slotPasswordReturnPressed() _ui->lineEdit_password->clearFocus(); } -void ShareDialog::setPassword(QString password) +void ShareDialog::setPassword(const QString &password) { _pi_password->startAnimation(); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 827e7c5942..230a004410 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -83,7 +83,7 @@ private: bool _isDir; QList _shares; qulonglong _public_share_id; - void setPassword(QString password); + void setPassword(const QString &password); void setExpireDate(const QString &date); int checkJsonReturnCode(const QString &reply); From cd0c9b2ddbabdad8cc9ba66b315eb308be25f108 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 14 Jan 2015 19:47:25 +0100 Subject: [PATCH 15/25] Sharedialog: More error checking --- src/gui/sharedialog.cpp | 88 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 0fb3ba0fcd..431cc87473 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -126,8 +126,27 @@ void ShareDialog::setExpireDate(const QString &date) job->start(); } -void ShareDialog::slotExpireSet(const QString & /* reply */) +void ShareDialog::slotExpireSet(const QString &reply) { + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + if (code == 100) { + } else if (code == 400) { + QMessageBox msgBox; + msgBox.setText("Wrong or no update parameter given"); + msgBox.exec(); + } else if (code == 403) { + QMessageBox msgBox; + msgBox.setText("Public upload disabled by the admin"); + msgBox.exec(); + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("Couldn’t update share"); + msgBox.exec(); + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + } _pi_date->stopAnimation(); } @@ -177,8 +196,28 @@ void ShareDialog::setPassword(const QString &password) job->start(); } -void ShareDialog::slotPasswordSet(const QString & /* reply */) +void ShareDialog::slotPasswordSet(const QString &reply) { + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + if (code == 100) { + } else if (code == 400) { + QMessageBox msgBox; + msgBox.setText("Wrong or no update parameter given"); + msgBox.exec(); + } else if (code == 403) { + QMessageBox msgBox; + msgBox.setText("Public upload disabled by the admin"); + msgBox.exec(); + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("Couldn’t update share"); + msgBox.exec(); + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + } + _pi_password->stopAnimation(); } @@ -197,6 +236,25 @@ void ShareDialog::getShares() void ShareDialog::slotSharesFetched(const QString &reply) { + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + if (code == 100) { + } else if (code == 400) { + QMessageBox msgBox; + msgBox.setText("Not a directory (if the ‘subfile’ argument was used)"); + msgBox.exec(); + return; + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("File doesn’t exist"); + msgBox.exec(); + return; + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + return; + } + _ui->treeWidget_shareUser->clear(); _ui->treeWidget_shareGroup->clear(); @@ -348,6 +406,32 @@ void ShareDialog::slotCheckBoxShareLinkClicked() void ShareDialog::slotCreateShareFetched(const QString &reply) { + int code = checkJsonReturnCode(reply); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + if (code == 100) { + } else if (code == 400) { + QMessageBox msgBox; + msgBox.setText("Unknown share type"); + msgBox.exec(); + return; + } else if (code == 403) { + QMessageBox msgBox; + msgBox.setText("Public upload was disabled by the admin"); + msgBox.exec(); + return; + } else if (code == 404) { + QMessageBox msgBox; + msgBox.setText("File couldn’t be shared"); + msgBox.exec(); + return; + } else { + qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; + return; + } + + + _pi_link->stopAnimation(); _pi_password->show(); _pi_date->show(); From 0fba4eee985a946ecba6c3821285e7da4d14dfb9 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Fri, 16 Jan 2015 12:52:56 +0100 Subject: [PATCH 16/25] Sharedialog: Removed user/group sharing --- src/gui/sharedialog.cpp | 383 ---------------------------------------- src/gui/sharedialog.h | 10 -- src/gui/sharedialog.ui | 191 +------------------- 3 files changed, 2 insertions(+), 582 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 431cc87473..00e8389aea 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -10,15 +10,7 @@ #include namespace { - int SHARETYPE_USER = 0; - int SHARETYPE_GROUP = 1; int SHARETYPE_PUBLIC = 3; - - //int PERM_READ = 1; sharing always allows reading - int PERM_UPDATE = 2; - int PERM_CREATE = 4; - int PERM_DELETE = 8; - int PERM_SHARE = 16; } namespace OCC { @@ -55,59 +47,6 @@ ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent _ui->checkBox_password->hide(); _ui->checkBox_expire->hide(); _ui->calendar->hide(); - _ui->lineEdit_shareGroup->setPlaceholderText(tr("Share with group...")); - _ui->lineEdit_shareUser->setPlaceholderText(tr("Share with user...")); - _ui->lineEdit_password->setPlaceholderText(tr("Choose a password for the public link")); - - QStringList headerUser; - headerUser << "share_id"; - headerUser << tr("User name"); - headerUser << tr("User"); - headerUser << tr("Edit"); - if (_isDir) { - headerUser << tr("Create"); - headerUser << tr("Delete"); - } - headerUser << tr("Share"); - _ui->treeWidget_shareUser->setHeaderLabels(headerUser); - if (_isDir) { - _ui->treeWidget_shareUser->setColumnCount(7); - } else { - _ui->treeWidget_shareUser->setColumnCount(5); - } - _ui->treeWidget_shareUser->hideColumn(0); - connect(_ui->treeWidget_shareUser, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotUserShareWidgetClicked(QTreeWidgetItem *, int))); - connect(_ui->pushButton_shareUser, SIGNAL(clicked()), SLOT(slotAddUserShareClicked())); - connect(_ui->lineEdit_shareUser, SIGNAL(returnPressed()), SLOT(slotAddUserShareClicked())); - connect(_ui->pushButton_user_deleteShare, SIGNAL(clicked()), SLOT(slotDeleteUserShareClicked())); - - QStringList headerGroup; - headerGroup << "share_id"; - headerGroup << tr("Group"); - headerGroup << tr("Edit"); - if (_isDir) { - headerGroup << tr("Create"); - headerGroup << tr("Delete"); - } - headerGroup << tr("Share"); - _ui->treeWidget_shareGroup->setHeaderLabels(headerGroup); - if (_isDir) { - _ui->treeWidget_shareGroup->setColumnCount(6); - } else { - _ui->treeWidget_shareGroup->setColumnCount(4); - } - _ui->treeWidget_shareGroup->hideColumn(0); - connect(_ui->treeWidget_shareGroup, SIGNAL(itemChanged(QTreeWidgetItem *, int)), SLOT(slotGroupShareWidgetClicked(QTreeWidgetItem *, int))); - connect(_ui->pushButton_shareGroup, SIGNAL(clicked()), SLOT(slotAddGroupShareClicked())); - connect(_ui->lineEdit_shareGroup, SIGNAL(returnPressed()), SLOT(slotAddGroupShareClicked())); - connect(_ui->pushButton_group_deleteShare, SIGNAL(clicked()), SLOT(slotDeleteGroupShareClicked())); - - if (!_isDir) { - _ui->checkBox_user_create->hide(); - _ui->checkBox_user_delete->hide(); - _ui->checkBox_group_create->hide(); - _ui->checkBox_group_delete->hide(); - } } void ShareDialog::setExpireDate(const QString &date) @@ -255,9 +194,6 @@ void ShareDialog::slotSharesFetched(const QString &reply) return; } - _ui->treeWidget_shareUser->clear(); - _ui->treeWidget_shareGroup->clear(); - bool success = false; QVariantMap json = QtJson::parse(reply, success).toMap(); ShareDialog::_shares = json.value("ocs").toMap().values("data")[0].toList(); @@ -265,69 +201,6 @@ void ShareDialog::slotSharesFetched(const QString &reply) { QVariantMap data = ShareDialog::_shares[i].toMap(); - if (data.value("share_type").toInt() == SHARETYPE_USER) - { - QStringList columns; - - columns << data.value("id").toString(); - columns << data.value("share_with").toString(); - columns << data.value("share_with_displayname").toString(); - columns << ""; - columns << ""; - if (_isDir) { - columns << ""; - columns << ""; - } - - QTreeWidgetItem *item = new QTreeWidgetItem(columns); - - int perm = data.value("permissions").toInt(); - - int col = 3; - item->setCheckState(col, perm & PERM_UPDATE ? Qt::Checked : Qt::Unchecked); - col++; - if (_isDir) { - item->setCheckState(col, perm & PERM_CREATE ? Qt::Checked : Qt::Unchecked); - col++; - item->setCheckState(col, perm & PERM_DELETE ? Qt::Checked : Qt::Unchecked); - col++; - } - item->setCheckState(col, perm & PERM_SHARE ? Qt::Checked : Qt::Unchecked); - - _ui->treeWidget_shareUser->insertTopLevelItem(0, item); - } - - if (data.value("share_type").toInt() == SHARETYPE_GROUP) - { - QStringList columns; - - columns << data.value("id").toString(); - columns << data.value("share_with").toString(); - columns << ""; - columns << ""; - if (_isDir) { - columns << ""; - columns << ""; - } - - QTreeWidgetItem *item = new QTreeWidgetItem(columns); - - int perm = data.value("permissions").toInt(); - - int col = 2; - item->setCheckState(col, perm & PERM_UPDATE ? Qt::Checked : Qt::Unchecked); - col++; - if (_isDir) { - item->setCheckState(col, perm & PERM_CREATE ? Qt::Checked : Qt::Unchecked); - col++; - item->setCheckState(col, perm & PERM_DELETE ? Qt::Checked : Qt::Unchecked); - col++; - } - item->setCheckState(col, perm & PERM_SHARE ? Qt::Checked : Qt::Unchecked); - - _ui->treeWidget_shareGroup->insertTopLevelItem(0, item); - } - if (data.value("share_type").toInt() == SHARETYPE_PUBLIC) { _public_share_id = data.value("id").toULongLong(); @@ -479,262 +352,6 @@ void ShareDialog::slotCheckBoxExpireClicked() } } -void ShareDialog::slotUserShareWidgetClicked(QTreeWidgetItem *item, const int /* column */) -{ - - int id = item->data(0, Qt::DisplayRole).toInt(); - - int perm = 1; - if (item->checkState(3) == Qt::Checked) { - perm += PERM_UPDATE; - } - if (_isDir) { - if (item->checkState(4) == Qt::Checked) { - perm += PERM_CREATE; - } - if (item->checkState(5) == Qt::Checked) { - perm += PERM_DELETE; - } - if (item->checkState(6) == Qt::Checked) { - perm += PERM_SHARE; - } - } else { - if (item->checkState(4) == Qt::Checked) { - perm += PERM_SHARE; - } - } - - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(id))); - QUrl postData; - QList > getParams; - QList > postParams; - getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - postParams.append(qMakePair(QString::fromLatin1("permissions"), QString::number(perm))); - url.setQueryItems(getParams); - postData.setQueryItems(postParams); - OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateShareReply(QString))); - job->start(); -} - -void ShareDialog::slotUpdateShareReply(const QString &reply) -{ - int code = checkJsonReturnCode(reply); - - qDebug() << Q_FUNC_INFO << "Status code: " << code; - - if (code == 100) { - getShares(); - } else if (code == 400) { - QMessageBox msgBox; - msgBox.setText("Wrong or no update parameter given"); - msgBox.exec(); - } else if (code == 403) { - QMessageBox msgBox; - msgBox.setText("Public upload was disabled by the admin"); - msgBox.exec(); - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("Couldn’t update share"); - msgBox.exec(); - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; - } - -} - -void ShareDialog::slotAddUserShareClicked() -{ - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); - QUrl postData; - QList > getParams; - QList > postParams; - getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - postParams.append(qMakePair(QString::fromLatin1("path"), _path)); - postParams.append(qMakePair(QString::fromLatin1("shareType"), QString::number(SHARETYPE_USER))); - postParams.append(qMakePair(QString::fromLatin1("shareWith"), _ui->lineEdit_shareUser->text())); - - int perm = 1; - if (_ui->checkBox_user_edit->checkState() == Qt::Checked) { - perm += PERM_UPDATE; - } - if (_ui->checkBox_user_create->checkState() == Qt::Checked) { - perm += PERM_CREATE; - } - if (_ui->checkBox_user_delete->checkState() == Qt::Checked) { - perm += PERM_DELETE; - } - if (_ui->checkBox_user_reshare->checkState() == Qt::Checked) { - perm += PERM_SHARE; - } - - postParams.append(qMakePair(QString("permissions"), QString::number(perm))); - url.setQueryItems(getParams); - postData.setQueryItems(postParams); - OcsShareJob *job = new OcsShareJob("POST", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddShareReply(QString))); - job->start(); -} - -void ShareDialog::slotDeleteUserShareClicked() -{ - auto items = _ui->treeWidget_shareUser->selectedItems(); - if (items.empty()) { - return; - } - - auto item = items.at(0); - int id = item->data(0, Qt::DisplayRole).toInt(); - - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(id)); - QUrl postData; - QList > getParams; - QList > postParams; - getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - url.setQueryItems(getParams); - postData.setQueryItems(postParams); - OcsShareJob *job = new OcsShareJob("DELETE", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteShareReply(QString))); - job->start(); - -} - -void ShareDialog::slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int /*column*/) -{ - - int id = item->data(0, Qt::DisplayRole).toInt(); - - int perm = 1; - if (item->checkState(2) == Qt::Checked) { - perm += PERM_UPDATE; - } - if (_isDir) { - if (item->checkState(3) == Qt::Checked) { - perm += PERM_CREATE; - } - if (item->checkState(4) == Qt::Checked) { - perm += PERM_DELETE; - } - if (item->checkState(5) == Qt::Checked) { - perm += PERM_SHARE; - } - } else { - if (item->checkState(3) == Qt::Checked) { - perm += PERM_SHARE; - } - } - - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(id))); - QUrl postData; - QList > getParams; - QList > postParams; - getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - postParams.append(qMakePair(QString::fromLatin1("permissions"), QString::number(perm))); - url.setQueryItems(getParams); - postData.setQueryItems(postParams); - OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotUpdateShareReply(QString))); - job->start(); -} - -void ShareDialog::slotAddGroupShareClicked() -{ - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); - QUrl postData; - QList > getParams; - QList > postParams; - getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - postParams.append(qMakePair(QString::fromLatin1("path"), _path)); - postParams.append(qMakePair(QString::fromLatin1("shareType"), QString::number(SHARETYPE_GROUP))); - postParams.append(qMakePair(QString::fromLatin1("shareWith"), _ui->lineEdit_shareGroup->text())); - - int perm = 1; - if (_ui->checkBox_group_edit->checkState() == Qt::Checked) { - perm += PERM_UPDATE; - } - if (_ui->checkBox_group_create->checkState() == Qt::Checked) { - perm += PERM_CREATE; - } - if (_ui->checkBox_group_delete->checkState() == Qt::Checked) { - perm += PERM_DELETE; - } - if (_ui->checkBox_group_reshare->checkState() == Qt::Checked) { - perm += PERM_SHARE; - } - - postParams.append(qMakePair(QString("permissions"), QString::number(perm))); - url.setQueryItems(getParams); - postData.setQueryItems(postParams); - OcsShareJob *job = new OcsShareJob("POST", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotAddShareReply(QString))); - job->start(); -} - -void ShareDialog::slotAddShareReply(const QString &reply) -{ - int code = checkJsonReturnCode(reply); - - qDebug() << Q_FUNC_INFO << "Status code: " << code; - - if (code == 100) { - getShares(); - } else if (code == 400) { - QMessageBox msgBox; - msgBox.setText("Unknown share type"); - msgBox.exec(); - } else if (code == 403) { - QMessageBox msgBox; - msgBox.setText("Public upload was disabled by the admin"); - msgBox.exec(); - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("File could not be shared"); - msgBox.exec(); - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; - } -} - -void ShareDialog::slotDeleteGroupShareClicked() -{ - auto items = _ui->treeWidget_shareGroup->selectedItems(); - if (items.empty()) { - return; - } - - auto item = items.at(0); - int id = item->data(0, Qt::DisplayRole).toInt(); - - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(id)); - QUrl postData; - QList > getParams; - QList > postParams; - getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - url.setQueryItems(getParams); - postData.setQueryItems(postParams); - OcsShareJob *job = new OcsShareJob("DELETE", url, postData, AccountManager::instance()->account(), this); - connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotDeleteShareReply(QString))); - job->start(); - -} - -void ShareDialog::slotDeleteShareReply(const QString &reply) -{ - int code = checkJsonReturnCode(reply); - - qDebug() << Q_FUNC_INFO << "Status code: " << code; - - if (code == 100) { - getShares(); - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("File could not be deleted"); - msgBox.exec(); - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; - } -} - int ShareDialog::checkJsonReturnCode(const QString &reply) { bool success; diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 230a004410..fb645f0956 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -67,16 +67,6 @@ private slots: void slotCheckBoxPasswordClicked(); void slotCheckBoxExpireClicked(); void slotPasswordReturnPressed(); - - void slotUserShareWidgetClicked(QTreeWidgetItem *item, const int column); - void slotUpdateShareReply(const QString &reply); - void slotAddUserShareClicked(); - void slotAddShareReply(const QString &reply); - void slotDeleteUserShareClicked(); - void slotDeleteShareReply(const QString &reply); - void slotGroupShareWidgetClicked(QTreeWidgetItem *item, const int column); - void slotAddGroupShareClicked(); - void slotDeleteGroupShareClicked(); private: Ui::ShareDialog *_ui; QString _path; diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index 598459f6a5..dd77b88cff 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -6,8 +6,8 @@ 0 0 - 500 - 540 + 441 + 418 @@ -19,193 +19,6 @@ QLayout::SetFixedSize - - - - Share with - - - - - - - 1 - - - - - - - - - - - User: - - - - - - - - 1 - - - - - - - - - - - Group - - - - - - - - - Edit - - - - - - - Create - - - - - - - Delete - - - - - - - Reshare - - - - - - - Share - - - false - - - - - - - - - Delete - - - false - - - - - - - - - Edit - - - - - - - Create - - - - - - - Delete - - - - - - - Share - - - - - - - Share - - - false - - - - - - - - - Delete - - - false - - - - - - - - - - Qt::Horizontal - - - - 40 - 5 - - - - - - - - 1 - - - Qt::Horizontal - - - - - - - Qt::Horizontal - - - - 40 - 5 - - - - From 71560ace71820f827be23e94b7d0d49847e784f9 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Fri, 16 Jan 2015 14:48:56 +0100 Subject: [PATCH 17/25] Sharedialog: Show general info about a share A start with some general share info in the share dialog. --- src/gui/application.cpp | 4 +- src/gui/owncloudgui.cpp | 4 +- src/gui/owncloudgui.h | 2 +- src/gui/sharedialog.cpp | 39 +++++++------- src/gui/sharedialog.h | 8 ++- src/gui/sharedialog.ui | 117 +++++++++++++++++++++++++++++++++++++++- src/gui/socketapi.cpp | 3 +- src/gui/socketapi.h | 2 +- 8 files changed, 146 insertions(+), 33 deletions(-) diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 67fe0019e8..72f7df876d 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -147,8 +147,8 @@ Application::Application(int &argc, char **argv) : slotAccountStateAdded(ai); } - connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, bool)), - _gui, SLOT(slotShowShareDialog(QString, bool))); + connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, QString)), + _gui, SLOT(slotShowShareDialog(QString, QString))); // startup procedure. connect(&_checkConnectionTimer, SIGNAL(timeout()), this, SLOT(slotCheckConnection())); diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 53f6c65409..be283b2d94 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -636,10 +636,10 @@ void ownCloudGui::raiseDialog( QWidget *raiseWidget ) } -void ownCloudGui::slotShowShareDialog(const QString &path, const bool &isDir) +void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &localPath) { qDebug() << Q_FUNC_INFO << "Opening share dialog"; - ShareDialog *w = new ShareDialog(path, isDir); + ShareDialog *w = new ShareDialog(sharePath, localPath); w->getShares(); w->setAttribute( Qt::WA_DeleteOnClose, true ); w->show(); diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h index ec6878e039..18dccae871 100644 --- a/src/gui/owncloudgui.h +++ b/src/gui/owncloudgui.h @@ -70,7 +70,7 @@ public slots: void slotHelp(); void slotOpenPath(const QString& path); void slotAccountStateChanged(); - void slotShowShareDialog(const QString &path, const bool &isDir); + void slotShowShareDialog(const QString &sharePath, const QString &localPath); private slots: void slotDisplayIdle(); diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 00e8389aea..ccd422224d 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace { int SHARETYPE_PUBLIC = 3; @@ -15,11 +16,11 @@ namespace { namespace OCC { -ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent) : +ShareDialog::ShareDialog(const QString &sharePath, const QString &localPath, QWidget *parent) : QDialog(parent), _ui(new Ui::ShareDialog), - _path(path), - _isDir(isDir) + _sharePath(sharePath), + _localPath(localPath) { setAttribute(Qt::WA_DeleteOnClose); _ui->setupUi(this); @@ -47,6 +48,20 @@ ShareDialog::ShareDialog(const QString &path, const bool &isDir, QWidget *parent _ui->checkBox_password->hide(); _ui->checkBox_expire->hide(); _ui->calendar->hide(); + + QFileInfo f_info(_localPath); + QFileIconProvider icon_provider; + QIcon icon = icon_provider.icon(f_info); + _ui->label_icon->setPixmap(icon.pixmap(40,40)); + if (f_info.isDir()) { + _ui->lineEdit_name->setText(f_info.dir().dirName()); + _ui->lineEdit_type->setText("Directory"); + } else { + _ui->lineEdit_name->setText(f_info.fileName()); + _ui->lineEdit_type->setText("File"); + } + _ui->lineEdit_localPath->setText(_localPath); + _ui->lineEdit_sharePath->setText(_sharePath); } void ShareDialog::setExpireDate(const QString &date) @@ -94,18 +109,6 @@ void ShareDialog::slotCalendarClicked(const QDate &date) ShareDialog::setExpireDate(date.toString("yyyy-MM-dd")); } -QString ShareDialog::getPath() -{ - return _path; -} - -void ShareDialog::setPath(const QString &path, const bool &isDir) -{ - _path = path; - _isDir = isDir; - ShareDialog::getShares(); -} - ShareDialog::~ShareDialog() { delete _ui; @@ -162,11 +165,11 @@ void ShareDialog::slotPasswordSet(const QString &reply) void ShareDialog::getShares() { - this->setWindowTitle(tr("Sharing %1").arg(_path)); + this->setWindowTitle(tr("Sharing %1").arg(_sharePath)); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QLatin1String("ocs/v1.php/apps/files_sharing/api/v1/shares")); QList > params; params.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - params.append(qMakePair(QString::fromLatin1("path"), _path)); + params.append(qMakePair(QString::fromLatin1("path"), _sharePath)); url.setQueryItems(params); OcsShareJob *job = new OcsShareJob("GET", url, QUrl(), AccountManager::instance()->account(), this); connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotSharesFetched(QString))); @@ -256,7 +259,7 @@ void ShareDialog::slotCheckBoxShareLinkClicked() QList > getParams; QList > postParams; getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - postParams.append(qMakePair(QString::fromLatin1("path"), _path)); + postParams.append(qMakePair(QString::fromLatin1("path"), _sharePath)); postParams.append(qMakePair(QString::fromLatin1("shareType"), QString::number(SHARETYPE_PUBLIC))); url.setQueryItems(getParams); postData.setQueryItems(postParams); diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index fb645f0956..540d837ff3 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -51,11 +51,9 @@ class ShareDialog : public QDialog Q_OBJECT public: - explicit ShareDialog(const QString &path, const bool &isDir, QWidget *parent = 0); + explicit ShareDialog(const QString &sharePath, const QString &localPath, QWidget *parent = 0); ~ShareDialog(); void getShares(); - void setPath(const QString &path, const bool &isDir); - QString getPath(); private slots: void slotSharesFetched(const QString &reply); void slotCreateShareFetched(const QString &reply); @@ -69,8 +67,8 @@ private slots: void slotPasswordReturnPressed(); private: Ui::ShareDialog *_ui; - QString _path; - bool _isDir; + QString _sharePath; + QString _localPath; QList _shares; qulonglong _public_share_id; void setPassword(const QString &password); diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index dd77b88cff..804270885e 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -6,8 +6,8 @@ 0 0 - 441 - 418 + 454 + 532 @@ -19,6 +19,119 @@ QLayout::SetFixedSize + + + + Share Info + + + + + + + + TextLabel + + + + + + + + + + 75 + true + + + + Name: + + + + + + + true + + + true + + + + + + + + 75 + true + + + + Type: + + + + + + + true + + + + + + + + 75 + true + + + + Local path: + + + + + + + true + + + true + + + + + + + + 75 + true + + + + OwnCloud Path: + + + + + + + true + + + true + + + + + + + + + + diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index d0778d4e7a..752e8c20af 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -415,10 +415,9 @@ void SocketApi::command_SHARE(const QString& argument, SocketType* socket) const QString message = QLatin1String("SHARE:OK:")+QDir::toNativeSeparators(argument); sendMessage(socket, message); - QFileInfo info(argument); const QString folderForPath = shareFolder->path(); const QString path = shareFolder->remotePath() + argument.right(argument.count()-folderForPath.count()+1); - emit shareCommandReceived(path, info.isDir()); + emit shareCommandReceived(path, argument); } } diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index f486e7586a..e313c9c6a0 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -58,7 +58,7 @@ public slots: void slotClearExcludesList(); signals: - void shareCommandReceived(const QString &path, const bool &isDir); + void shareCommandReceived(const QString &sharePath, const QString &localPath); private slots: void slotNewConnection(); From c233baab5b2ffd66b64e16537c02b74a3fb6b0ec Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 08:10:18 +0100 Subject: [PATCH 18/25] Sharedialog: grouped sharelink stuff in one widget A bit of grouping in the UI requiring less ->hide() and ->show() calls --- src/gui/sharedialog.cpp | 33 +++-------- src/gui/sharedialog.ui | 123 +++++++++++++++++++++------------------- 2 files changed, 74 insertions(+), 82 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index ccd422224d..a0145ed8f9 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -30,11 +30,9 @@ ShareDialog::ShareDialog(const QString &sharePath, const QString &localPath, QWi _pi_link = new QProgressIndicator(); _pi_password = new QProgressIndicator(); _pi_date = new QProgressIndicator(); - _pi_password->hide(); - _pi_date->hide(); - _ui->horizontalLayout_4->addWidget(_pi_link); - _ui->horizontalLayout_5->addWidget(_pi_password); - _ui->horizontalLayout_3->addWidget(_pi_date); + _ui->horizontalLayout_shareLink->addWidget(_pi_link); + _ui->horizontalLayout_password->addWidget(_pi_password); + _ui->horizontalLayout_expire->addWidget(_pi_date); connect(_ui->checkBox_shareLink, SIGNAL(clicked()), this, SLOT(slotCheckBoxShareLinkClicked())); connect(_ui->checkBox_password, SIGNAL(clicked()), this, SLOT(slotCheckBoxPasswordClicked())); @@ -42,11 +40,8 @@ ShareDialog::ShareDialog(const QString &sharePath, const QString &localPath, QWi connect(_ui->checkBox_expire, SIGNAL(clicked()), this, SLOT(slotCheckBoxExpireClicked())); connect(_ui->calendar, SIGNAL(clicked(QDate)), SLOT(slotCalendarClicked(QDate))); - _ui->lineEdit_shareLink->hide(); - _ui->pushButton_copy->hide(); + _ui->widget_shareLink->hide(); _ui->lineEdit_password->hide(); - _ui->checkBox_password->hide(); - _ui->checkBox_expire->hide(); _ui->calendar->hide(); QFileInfo f_info(_localPath); @@ -208,11 +203,7 @@ void ShareDialog::slotSharesFetched(const QString &reply) { _public_share_id = data.value("id").toULongLong(); - _ui->lineEdit_shareLink->show(); - _ui->pushButton_copy->show(); - _ui->checkBox_password->show(); - _ui->checkBox_expire->show(); - _ui->pushButton_copy->show(); + _ui->widget_shareLink->show(); _ui->checkBox_shareLink->setChecked(true); if (data.value("share_with").isValid()) @@ -241,11 +232,8 @@ void ShareDialog::slotDeleteShareFetched(const QString & /* reply */) _pi_date->hide(); _pi_link->stopAnimation(); - _ui->lineEdit_shareLink->hide(); - _ui->pushButton_copy->hide(); + _ui->widget_shareLink->hide(); _ui->lineEdit_password->hide(); - _ui->checkBox_password->hide(); - _ui->checkBox_expire->hide(); _ui->calendar->hide(); } @@ -309,18 +297,13 @@ void ShareDialog::slotCreateShareFetched(const QString &reply) _pi_link->stopAnimation(); - _pi_password->show(); - _pi_date->show(); bool success; QVariantMap json = QtJson::parse(reply, success).toMap(); _public_share_id = json.value("ocs").toMap().values("data")[0].toMap().value("id").toULongLong(); QString url = json.value("ocs").toMap().values("data")[0].toMap().value("url").toString(); _ui->lineEdit_shareLink->setText(url); - _ui->lineEdit_shareLink->show(); - _ui->pushButton_copy->show(); - _ui->checkBox_password->show(); - _ui->checkBox_expire->show(); - _ui->pushButton_copy->show(); + + _ui->widget_shareLink->show(); } void ShareDialog::slotCheckBoxPasswordClicked() diff --git a/src/gui/sharedialog.ui b/src/gui/sharedialog.ui index 804270885e..ef1628212b 100644 --- a/src/gui/sharedialog.ui +++ b/src/gui/sharedialog.ui @@ -7,7 +7,7 @@ 0 0 454 - 532 + 558 @@ -133,7 +133,7 @@ - + @@ -144,61 +144,70 @@ - - - QLayout::SetDefaultConstraint - - - - - true - - - - - - - - - - - - - - - - - - Set password - - - - - - - - - - - QLineEdit::Password - - - - - - - - - - - Set expiry date - - - - - - - + + + + 0 + + + + + QLayout::SetDefaultConstraint + + + + + true + + + + + + + + + + + + + + + + + + Set password + + + + + + + + + + + QLineEdit::Password + + + + + + + + + + + Set expiry date + + + + + + + + + + From 6c3a5b1d69f5c7211b98a6445a4d7ad294bbef6d Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 08:29:20 +0100 Subject: [PATCH 19/25] Sharedialog: Do not hard code error reply messages The server provides error messages in the json return code. Use those error messages. --- src/gui/sharedialog.cpp | 87 ++++++++++++----------------------------- src/gui/sharedialog.h | 2 +- 2 files changed, 25 insertions(+), 64 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index a0145ed8f9..b0226b2ca5 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -77,25 +77,17 @@ void ShareDialog::setExpireDate(const QString &date) void ShareDialog::slotExpireSet(const QString &reply) { - int code = checkJsonReturnCode(reply); + QString message; + int code = checkJsonReturnCode(reply, message); qDebug() << Q_FUNC_INFO << "Status code: " << code; - if (code == 100) { - } else if (code == 400) { + if (code != 100) { QMessageBox msgBox; - msgBox.setText("Wrong or no update parameter given"); + msgBox.setText(message); + msgBox.setWindowTitle(QString("Server replied with code %1").arg(code)); msgBox.exec(); - } else if (code == 403) { - QMessageBox msgBox; - msgBox.setText("Public upload disabled by the admin"); - msgBox.exec(); - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("Couldn’t update share"); - msgBox.exec(); - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; - } + } + _pi_date->stopAnimation(); } @@ -135,24 +127,15 @@ void ShareDialog::setPassword(const QString &password) void ShareDialog::slotPasswordSet(const QString &reply) { - int code = checkJsonReturnCode(reply); + QString message; + int code = checkJsonReturnCode(reply, message); qDebug() << Q_FUNC_INFO << "Status code: " << code; - if (code == 100) { - } else if (code == 400) { + if (code != 100) { QMessageBox msgBox; - msgBox.setText("Wrong or no update parameter given"); + msgBox.setText(message); + msgBox.setWindowTitle(QString("Server replied with code %1").arg(code)); msgBox.exec(); - } else if (code == 403) { - QMessageBox msgBox; - msgBox.setText("Public upload disabled by the admin"); - msgBox.exec(); - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("Couldn’t update share"); - msgBox.exec(); - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; } _pi_password->stopAnimation(); @@ -173,23 +156,15 @@ void ShareDialog::getShares() void ShareDialog::slotSharesFetched(const QString &reply) { - int code = checkJsonReturnCode(reply); + QString message; + int code = checkJsonReturnCode(reply, message); qDebug() << Q_FUNC_INFO << "Status code: " << code; - if (code == 100) { - } else if (code == 400) { + if (code != 100) { QMessageBox msgBox; - msgBox.setText("Not a directory (if the ‘subfile’ argument was used)"); + msgBox.setText(message); + msgBox.setWindowTitle(QString("Server replied with code %1").arg(code)); msgBox.exec(); - return; - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("File doesn’t exist"); - msgBox.exec(); - return; - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; - return; } bool success = false; @@ -270,32 +245,17 @@ void ShareDialog::slotCheckBoxShareLinkClicked() void ShareDialog::slotCreateShareFetched(const QString &reply) { - int code = checkJsonReturnCode(reply); + QString message; + int code = checkJsonReturnCode(reply, message); - qDebug() << Q_FUNC_INFO << "Status code: " << code; - if (code == 100) { - } else if (code == 400) { + if (code != 100) { QMessageBox msgBox; - msgBox.setText("Unknown share type"); + msgBox.setText(message); + msgBox.setWindowTitle(QString("Server replied with code %1").arg(code)); msgBox.exec(); return; - } else if (code == 403) { - QMessageBox msgBox; - msgBox.setText("Public upload was disabled by the admin"); - msgBox.exec(); - return; - } else if (code == 404) { - QMessageBox msgBox; - msgBox.setText("File couldn’t be shared"); - msgBox.exec(); - return; - } else { - qDebug() << Q_FUNC_INFO << "Unkown status code: " << code; - return; } - - _pi_link->stopAnimation(); bool success; QVariantMap json = QtJson::parse(reply, success).toMap(); @@ -338,7 +298,7 @@ void ShareDialog::slotCheckBoxExpireClicked() } } -int ShareDialog::checkJsonReturnCode(const QString &reply) +int ShareDialog::checkJsonReturnCode(const QString &reply, QString &message) { bool success; QVariantMap json = QtJson::parse(reply, success).toMap(); @@ -349,6 +309,7 @@ int ShareDialog::checkJsonReturnCode(const QString &reply) //TODO proper checking int code = json.value("ocs").toMap().value("meta").toMap().value("statuscode").toInt(); + message = json.value("ocs").toMap().value("meta").toMap().value("message").toString(); return code; } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 540d837ff3..88f7ed17fe 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -73,7 +73,7 @@ private: qulonglong _public_share_id; void setPassword(const QString &password); void setExpireDate(const QString &date); - int checkJsonReturnCode(const QString &reply); + int checkJsonReturnCode(const QString &reply, QString &message); QProgressIndicator *_pi_link; QProgressIndicator *_pi_password; From bd1db30eea94d490f6e5fa20640697553dfc4b27 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 08:50:28 +0100 Subject: [PATCH 20/25] Sharedialog: Minor fixes The server generates a new share when a password is set/deleted so we need to refetch the shares once that is done. It is not possible to set an expiration date in the past for a share. So do not allow the user to select a date in the past. --- src/gui/sharedialog.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index b0226b2ca5..8fcaebaf2f 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -131,11 +131,19 @@ void ShareDialog::slotPasswordSet(const QString &reply) int code = checkJsonReturnCode(reply, message); qDebug() << Q_FUNC_INFO << "Status code: " << code; + if (code != 100) { QMessageBox msgBox; msgBox.setText(message); msgBox.setWindowTitle(QString("Server replied with code %1").arg(code)); msgBox.exec(); + } else { + /* + * When setting/deleting a password from a share the old share is + * deleted and a new one is created. So we need to refetch the shares + * at this point. + */ + getShares(); } _pi_password->stopAnimation(); @@ -190,7 +198,9 @@ void ShareDialog::slotSharesFetched(const QString &reply) if (data.value("expiration").isValid()) { - _ui->calendar->setSelectedDate(QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00")); + const QDate date = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); + _ui->calendar->setSelectedDate(date); + _ui->calendar->setMinimumDate(date); _ui->calendar->show(); _ui->checkBox_expire->setChecked(true); } From 9ac35d5869020021412895bca1be5c9e885718f2 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 09:01:24 +0100 Subject: [PATCH 21/25] Sharedialog: Use arg instead of append --- src/gui/sharedialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 8fcaebaf2f..06b2c32eb2 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -62,7 +62,7 @@ ShareDialog::ShareDialog(const QString &sharePath, const QString &localPath, QWi void ShareDialog::setExpireDate(const QString &date) { _pi_date->startAnimation(); - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(_public_share_id)); QUrl postData; QList > getParams; QList > postParams; @@ -112,7 +112,7 @@ void ShareDialog::slotPasswordReturnPressed() void ShareDialog::setPassword(const QString &password) { _pi_password->startAnimation(); - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(_public_share_id)); QUrl postData; QList > getParams; QList > postParams; @@ -243,7 +243,7 @@ void ShareDialog::slotCheckBoxShareLinkClicked() else { _pi_link->startAnimation(); - QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/").append(QString::number(_public_share_id))); + QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(_public_share_id)); QList > getParams; getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); url.setQueryItems(getParams); From 00cb6f71daeeaa7d182fce244a7c6d909db89dba Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 09:10:42 +0100 Subject: [PATCH 22/25] Sharedialog: Set correct minimum date The minimum date should always be the current date + 1 day. --- src/gui/sharedialog.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 06b2c32eb2..26845196ba 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -198,9 +198,8 @@ void ShareDialog::slotSharesFetched(const QString &reply) if (data.value("expiration").isValid()) { - const QDate date = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); - _ui->calendar->setSelectedDate(date); - _ui->calendar->setMinimumDate(date); + _ui->calendar->setSelectedDate(QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00")); + _ui->calendar->setMinimumDate(QDate::currentDate().addDays(1)); _ui->calendar->show(); _ui->checkBox_expire->setChecked(true); } @@ -296,9 +295,10 @@ void ShareDialog::slotCheckBoxExpireClicked() { if (_ui->checkBox_expire->checkState() == Qt::Checked) { - QDate date = QDate::currentDate().addDays(1); + const QDate date = QDate::currentDate().addDays(1); ShareDialog::setExpireDate(date.toString("dd-MM-yyyy")); _ui->calendar->setSelectedDate(date); + _ui->calendar->setMinimumDate(date); _ui->calendar->show(); } else From d5bddca01dbf1202c2de2cdcccce6c14220ce7d6 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 09:29:13 +0100 Subject: [PATCH 23/25] Sharedialog: More Q_FOREACH --- src/gui/sharedialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 26845196ba..fbac72622c 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -178,9 +178,9 @@ void ShareDialog::slotSharesFetched(const QString &reply) bool success = false; QVariantMap json = QtJson::parse(reply, success).toMap(); ShareDialog::_shares = json.value("ocs").toMap().values("data")[0].toList(); - for(int i = 0; i < ShareDialog::_shares.count(); i++) + Q_FOREACH(auto share, ShareDialog::_shares) { - QVariantMap data = ShareDialog::_shares[i].toMap(); + QVariantMap data = share.toMap(); if (data.value("share_type").toInt() == SHARETYPE_PUBLIC) { From 233f0423fa6c1e00b625d403220a9409a933840f Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 09:48:18 +0100 Subject: [PATCH 24/25] Sharedialog: Also reply on delete should be checked --- src/gui/sharedialog.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index fbac72622c..62a39710ac 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -210,10 +210,18 @@ void ShareDialog::slotSharesFetched(const QString &reply) } } -void ShareDialog::slotDeleteShareFetched(const QString & /* reply */) +void ShareDialog::slotDeleteShareFetched(const QString &reply) { - _pi_password->hide(); - _pi_date->hide(); + QString message; + int code = checkJsonReturnCode(reply, message); + + qDebug() << Q_FUNC_INFO << "Status code: " << code; + if (code != 100) { + QMessageBox msgBox; + msgBox.setText(message); + msgBox.setWindowTitle(QString("Server replied with code %1").arg(code)); + msgBox.exec(); + } _pi_link->stopAnimation(); _ui->widget_shareLink->hide(); From 63f18a7ebb9bcd4b01181cdfd7220ae863c9cdda Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 17 Jan 2015 09:57:17 +0100 Subject: [PATCH 25/25] Sharedialog: Pass QDate around instead of QString Now pass a QDate object around so we only do the conversion in one place in case the API changes. --- src/gui/sharedialog.cpp | 16 +++++++++++----- src/gui/sharedialog.h | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 62a39710ac..49e86f8e71 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -59,7 +59,7 @@ ShareDialog::ShareDialog(const QString &sharePath, const QString &localPath, QWi _ui->lineEdit_sharePath->setText(_sharePath); } -void ShareDialog::setExpireDate(const QString &date) +void ShareDialog::setExpireDate(const QDate &date) { _pi_date->startAnimation(); QUrl url = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("ocs/v1.php/apps/files_sharing/api/v1/shares/%1").arg(_public_share_id)); @@ -67,7 +67,13 @@ void ShareDialog::setExpireDate(const QString &date) QList > getParams; QList > postParams; getParams.append(qMakePair(QString::fromLatin1("format"), QString::fromLatin1("json"))); - postParams.append(qMakePair(QString::fromLatin1("expireDate"), date)); + + if (date.isValid()) { + postParams.append(qMakePair(QString::fromLatin1("expireDate"), date.toString("yyyy-MM-dd"))); + } else { + postParams.append(qMakePair(QString::fromLatin1("expireDate"), QString())); + } + url.setQueryItems(getParams); postData.setQueryItems(postParams); OcsShareJob *job = new OcsShareJob("PUT", url, postData, AccountManager::instance()->account(), this); @@ -93,7 +99,7 @@ void ShareDialog::slotExpireSet(const QString &reply) void ShareDialog::slotCalendarClicked(const QDate &date) { - ShareDialog::setExpireDate(date.toString("yyyy-MM-dd")); + ShareDialog::setExpireDate(date); } ShareDialog::~ShareDialog() @@ -304,14 +310,14 @@ void ShareDialog::slotCheckBoxExpireClicked() if (_ui->checkBox_expire->checkState() == Qt::Checked) { const QDate date = QDate::currentDate().addDays(1); - ShareDialog::setExpireDate(date.toString("dd-MM-yyyy")); + ShareDialog::setExpireDate(date); _ui->calendar->setSelectedDate(date); _ui->calendar->setMinimumDate(date); _ui->calendar->show(); } else { - ShareDialog::setExpireDate(QString()); + ShareDialog::setExpireDate(QDate()); _ui->calendar->hide(); } } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 88f7ed17fe..c0a8d45a3f 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -72,7 +72,7 @@ private: QList _shares; qulonglong _public_share_id; void setPassword(const QString &password); - void setExpireDate(const QString &date); + void setExpireDate(const QDate &date); int checkJsonReturnCode(const QString &reply, QString &message); QProgressIndicator *_pi_link;