From: Christian Kamm Date: Wed, 12 Apr 2017 09:09:20 +0000 (+0200) Subject: ShareDialog: Review fixes X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~767^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3c1a2cde335426b5d1df6b6fd6d2ae33778ce5c2;p=nextcloud-desktop.git ShareDialog: Review fixes * Allow creating nameless shares * Display token as name for nameless shares (both to be consistent with server) * Allow changing a share's name by editing it in the table * Minor adjustments --- diff --git a/src/gui/ocssharejob.cpp b/src/gui/ocssharejob.cpp index 7c13df43e..5fcba7d8c 100644 --- a/src/gui/ocssharejob.cpp +++ b/src/gui/ocssharejob.cpp @@ -84,6 +84,16 @@ void OcsShareJob::setPublicUpload(const QString &shareId, bool publicUpload) start(); } +void OcsShareJob::setName(const QString &shareId, const QString &name) +{ + appendPath(shareId); + setVerb("PUT"); + addParam(QString::fromLatin1("name"), name); + _value = name; + + start(); +} + void OcsShareJob::setPermissions(const QString &shareId, const Share::Permissions permissions) { diff --git a/src/gui/ocssharejob.h b/src/gui/ocssharejob.h index 675c64592..1066becc7 100644 --- a/src/gui/ocssharejob.h +++ b/src/gui/ocssharejob.h @@ -68,12 +68,17 @@ public: void setPassword(const QString &shareId, const QString& password); /** - * Void set the share to be public upload + * Set the share to be public upload * * @param publicUpload Set or remove public upload */ void setPublicUpload(const QString &shareId, bool publicUpload); + /** + * Change the name of a share + */ + void setName(const QString &shareId, const QString &name); + /** * Set the permissions * diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index 63fd0b576..ddd3e3fe1 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -55,7 +55,9 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, _ui->linkShares->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents); //Is this a file or folder? - _isFile = QFileInfo(localPath).isFile(); + QFileInfo fi(localPath); + _isFile = fi.isFile(); + _ui->nameLineEdit->setText(tr("%1 link").arg(fi.fileName())); // the following progress indicator widgets are added to layouts which makes them // automatically deleted once the dialog dies. @@ -71,6 +73,7 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, connect(_ui->nameLineEdit, SIGNAL(returnPressed()), SLOT(slotShareNameEntered())); connect(_ui->createShareButton, SIGNAL(clicked(bool)), SLOT(slotShareNameEntered())); connect(_ui->linkShares, SIGNAL(itemSelectionChanged()), SLOT(slotShareSelectionChanged())); + connect(_ui->linkShares, SIGNAL(itemChanged(QTableWidgetItem*)), SLOT(slotNameEdited(QTableWidgetItem*))); connect(_ui->checkBox_password, SIGNAL(clicked()), this, SLOT(slotCheckBoxPasswordClicked())); connect(_ui->lineEdit_password, SIGNAL(returnPressed()), this, SLOT(slotPasswordReturnPressed())); connect(_ui->lineEdit_password, SIGNAL(textChanged(QString)), this, SLOT(slotPasswordChanged(QString))); @@ -193,7 +196,6 @@ void ShareLinkWidget::slotSharesFetched(const QList> &shar table->clearContents(); table->setRowCount(0); - auto shareIcon = QIcon::fromTheme(QLatin1String("mail-send")); auto deleteIcon = QIcon::fromTheme(QLatin1String("user-trash"), QIcon(QLatin1String(":/client/resources/delete.png"))); @@ -215,16 +217,22 @@ void ShareLinkWidget::slotSharesFetched(const QList> &shar auto row = table->rowCount(); table->insertRow(row); + auto nameItem = new QTableWidgetItem; QString name = linkShare->getName(); if (name.isEmpty()) { - name = tr("Public link"); + if (!_namesSupported) { + name = tr("Public link"); + nameItem->setFlags(nameItem->flags() & ~Qt::ItemIsEditable); + } else { + name = linkShare->getToken(); + } } - auto nameItem = new QTableWidgetItem(name); + nameItem->setText(name); nameItem->setData(Qt::UserRole, QVariant::fromValue(linkShare)); table->setItem(row, 0, nameItem); auto shareButton = new QToolButton; - shareButton->setIcon(shareIcon); + shareButton->setText("..."); shareButton->setProperty(propertyShareC, QVariant::fromValue(linkShare)); shareButton->setMenu(_shareLinkMenu); shareButton->setPopupMode(QToolButton::InstantPopup); @@ -339,10 +347,6 @@ void ShareLinkWidget::slotPasswordReturnPressed() { if (!selectedShare()) { // If share creation requires a password, we'll be in this case - if (_namesSupported && _ui->nameLineEdit->text().isEmpty()) { - _ui->nameLineEdit->setFocus(); - return; - } if (_ui->lineEdit_password->text().isEmpty()) { _ui->lineEdit_password->setFocus(); return; @@ -362,6 +366,19 @@ void ShareLinkWidget::slotPasswordChanged(const QString& newText) _ui->pushButton_setPassword->setEnabled( newText.length() > 0 ); } +void ShareLinkWidget::slotNameEdited(QTableWidgetItem* item) +{ + if (!_namesSupported) { + return; + } + + QString newName = item->text(); + auto share = item->data(Qt::UserRole).value>(); + if (share && newName != share->getName() && newName != share->getToken()) { + share->setName(newName); + } +} + void ShareLinkWidget::setPassword(const QString &password) { if (auto current = selectedShare()) { @@ -391,10 +408,8 @@ void ShareLinkWidget::slotPasswordSet() void ShareLinkWidget::slotShareNameEntered() { - if (!_ui->nameLineEdit->text().isEmpty() || !_namesSupported) { - _pi_create->startAnimation(); - _manager->createLinkShare(_sharePath, _ui->nameLineEdit->text(), QString()); - } + _pi_create->startAnimation(); + _manager->createLinkShare(_sharePath, _ui->nameLineEdit->text(), QString()); } void ShareLinkWidget::slotDeleteShareFetched() diff --git a/src/gui/sharelinkwidget.h b/src/gui/sharelinkwidget.h index c12e121c1..898b79a49 100644 --- a/src/gui/sharelinkwidget.h +++ b/src/gui/sharelinkwidget.h @@ -25,6 +25,7 @@ #include class QMenu; +class QTableWidgetItem; namespace OCC { @@ -68,6 +69,7 @@ private slots: void slotCheckBoxEditingClicked(); void slotExpireDateChanged(const QDate &date); void slotPasswordChanged(const QString& newText); + void slotNameEdited(QTableWidgetItem* item); void slotShareLinkButtonTriggered(QAction* action); diff --git a/src/gui/sharelinkwidget.ui b/src/gui/sharelinkwidget.ui index 25d8ba417..9749a6990 100644 --- a/src/gui/sharelinkwidget.ui +++ b/src/gui/sharelinkwidget.ui @@ -26,7 +26,7 @@ - &Create + &Create new @@ -81,7 +81,7 @@ 0 - + 0 @@ -102,45 +102,7 @@ - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Allow editing - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - + 20 @@ -167,7 +129,7 @@ - + @@ -197,6 +159,51 @@ + + + + Link properties: + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Allow editing + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + diff --git a/src/gui/sharemanager.cpp b/src/gui/sharemanager.cpp index 4f25fa477..5d50fcea5 100644 --- a/src/gui/sharemanager.cpp +++ b/src/gui/sharemanager.cpp @@ -122,13 +122,15 @@ bool LinkShare::isPasswordSet() const LinkShare::LinkShare(AccountPtr account, const QString& id, const QString& path, - const QString &name, + const QString& name, + const QString& token, Permissions permissions, bool passwordSet, const QUrl& url, const QDate& expireDate) : Share(account, id, path, Share::TypeLink, permissions), _name(name), + _token(token), _passwordSet(passwordSet), _expireDate(expireDate), _url(url) @@ -155,6 +157,19 @@ QString LinkShare::getName() const return _name; } +void LinkShare::setName(const QString& name) +{ + OcsShareJob *job = new OcsShareJob(_account); + connect(job, SIGNAL(shareJobFinished(QVariantMap,QVariant)), SLOT(slotNameSet(QVariantMap,QVariant))); + connect(job, SIGNAL(ocsError(int,QString)), SLOT(slotOcsError(int,QString))); + job->setName(getId(), name); +} + +QString LinkShare::getToken() const +{ + return _token; +} + void LinkShare::slotPublicUploadSet(const QVariantMap&, const QVariant &value) { if (value.toBool()) { @@ -209,6 +224,12 @@ void LinkShare::slotSetPasswordError(int statusCode, const QString &message) emit passwordSetError(statusCode, message); } +void LinkShare::slotNameSet(const QVariantMap &, const QVariant &value) +{ + _name = value.toString(); + emit nameSet(); +} + ShareManager::ShareManager(AccountPtr account, QObject *parent) : QObject(parent), _account(account) @@ -345,7 +366,8 @@ void ShareManager::slotSharesFetched(const QVariantMap &reply) emit sharesFetched(shares); } -QSharedPointer ShareManager::parseLinkShare(const QVariantMap &data) { +QSharedPointer ShareManager::parseLinkShare(const QVariantMap &data) +{ QUrl url; // From ownCloud server 8.2 the url field is always set for public shares @@ -366,12 +388,11 @@ QSharedPointer ShareManager::parseLinkShare(const QVariantMap &data) expireDate = QDate::fromString(data.value("expiration").toString(), "yyyy-MM-dd 00:00:00"); } - QString name = data.value("name").toString(); - return QSharedPointer(new LinkShare(_account, data.value("id").toString(), data.value("path").toString(), - name, + data.value("name").toString(), + data.value("token").toString(), (Share::Permissions)data.value("permissions").toInt(), data.value("share_with").isValid(), url, diff --git a/src/gui/sharemanager.h b/src/gui/sharemanager.h index 742170dff..da97b4f37 100644 --- a/src/gui/sharemanager.h +++ b/src/gui/sharemanager.h @@ -133,6 +133,7 @@ public: const QString& id, const QString& path, const QString& name, + const QString& token, const Permissions permissions, bool passwordSet, const QUrl& url, @@ -158,10 +159,22 @@ public: void setPublicUpload(bool publicUpload); /* - * Returns the name of the link share. + * Returns the name of the link share. Can be empty. */ QString getName() const; + /* + * Set the name of the link share. + * + * Emits either nameSet() or serverError(). + */ + void setName(const QString& name); + + /* + * Returns the token of the link share. + */ + QString getToken() const; + /* * Set the password * @@ -193,15 +206,18 @@ signals: void publicUploadSet(); void passwordSet(); void passwordSetError(int statusCode, const QString &message); + void nameSet(); private slots: void slotPasswordSet(const QVariantMap&, const QVariant &value); void slotPublicUploadSet(const QVariantMap&, const QVariant &value); void slotExpireDateSet(const QVariantMap& reply, const QVariant &value); void slotSetPasswordError(int statusCode, const QString &message); + void slotNameSet(const QVariantMap&, const QVariant &value); private: QString _name; + QString _token; bool _passwordSet; QDate _expireDate; QUrl _url; diff --git a/src/gui/shareusergroupwidget.ui b/src/gui/shareusergroupwidget.ui index 90572bd9a..615c5b2f1 100644 --- a/src/gui/shareusergroupwidget.ui +++ b/src/gui/shareusergroupwidget.ui @@ -14,18 +14,6 @@ Share NewDocument.odt - - 0 - - - 0 - - - 0 - - - 0 -