From: Camila Date: Tue, 14 Sep 2021 12:10:44 +0000 (+0200) Subject: Add option to create label for share link. X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~18^2~216^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ba8ec56e651f054cf5ae6c1bf64f34213f1a1c94;p=nextcloud-desktop.git Add option to create label for share link. Signed-off-by: Camila --- diff --git a/src/gui/ocssharejob.cpp b/src/gui/ocssharejob.cpp index fcbfafe77..900074dbc 100644 --- a/src/gui/ocssharejob.cpp +++ b/src/gui/ocssharejob.cpp @@ -118,6 +118,17 @@ void OcsShareJob::setPermissions(const QString &shareId, start(); } +void OcsShareJob::setLabel(const QString &shareId, const QString &label) +{ + appendPath(shareId); + setVerb("PUT"); + + addParam(QStringLiteral("label"), label); + _value = label; + + start(); +} + void OcsShareJob::createLinkShare(const QString &path, const QString &name, const QString &password) diff --git a/src/gui/ocssharejob.h b/src/gui/ocssharejob.h index 074fa0762..064706b5c 100644 --- a/src/gui/ocssharejob.h +++ b/src/gui/ocssharejob.h @@ -96,6 +96,11 @@ public: */ void setPermissions(const QString &shareId, const Share::Permissions permissions); + + /** + * Set share link label + */ + void setLabel(const QString &shareId, const QString &label); /** * Create a new link share diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index 7a50639bf..d0c422409 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -20,6 +20,7 @@ #include "guiutility.h" #include "sharemanager.h" #include "theme.h" +#include "elidedlabel.h" #include "QProgressIndicator.h" #include @@ -168,6 +169,7 @@ void ShareLinkWidget::setupUiOptions() connect(_linkShare.data(), &LinkShare::noteSet, this, &ShareLinkWidget::slotNoteSet); connect(_linkShare.data(), &LinkShare::passwordSet, this, &ShareLinkWidget::slotPasswordSet); connect(_linkShare.data(), &LinkShare::passwordSetError, this, &ShareLinkWidget::slotPasswordSetError); + connect(_linkShare.data(), &LinkShare::labelSet, this, &ShareLinkWidget::slotLabelSet); // Prepare permissions check and create group action const QDate expireDate = _linkShare.data()->getExpireDate().isValid() ? _linkShare.data()->getExpireDate() : QDate(); @@ -189,7 +191,7 @@ void ShareLinkWidget::setupUiOptions() } else { checked = (perm == SharePermissionRead); - _readOnlyLinkAction = permissionsGroup->addAction(tr("Read only")); + _readOnlyLinkAction = permissionsGroup->addAction(tr("View only")); _readOnlyLinkAction->setCheckable(true); _readOnlyLinkAction->setChecked(checked); @@ -204,6 +206,40 @@ void ShareLinkWidget::setupUiOptions() _allowUploadLinkAction->setCheckable(true); _allowUploadLinkAction->setChecked(checked); } + + _shareLinkElidedLabel = new OCC::ElidedLabel(this); + _shareLinkElidedLabel->setElideMode(Qt::ElideRight); + displayShareLinkLabel(); + _ui->horizontalLayout->insertWidget(2, _shareLinkElidedLabel); + + _shareLinkLayout = new QHBoxLayout(this); + + _shareLinkLabel = new QLabel(this); + _shareLinkLabel->setPixmap(QString(":/client/theme/black/edit.svg")); + _shareLinkLayout->addWidget(_shareLinkLabel); + + _shareLinkEdit = new QLineEdit(this); + connect(_shareLinkEdit, &QLineEdit::returnPressed, this, &ShareLinkWidget::slotCreateLabel); + _shareLinkEdit->setPlaceholderText(tr("Link name")); + _shareLinkEdit->setText(_linkShare.data()->getLabel()); + _shareLinkLayout->addWidget(_shareLinkEdit); + + _shareLinkButton = new QToolButton(this); + connect(_shareLinkButton, &QToolButton::clicked, this, &ShareLinkWidget::slotCreateLabel); + _shareLinkButton->setIcon(QIcon(":/client/theme/confirm.svg")); + _shareLinkButton->setToolButtonStyle(Qt::ToolButtonIconOnly); + _shareLinkLayout->addWidget(_shareLinkButton); + + _shareLinkProgressIndicator = new QProgressIndicator(this); + _shareLinkProgressIndicator->setVisible(false); + _shareLinkLayout->addWidget(_shareLinkProgressIndicator); + + _shareLinkDefaultWidget = new QWidget(this); + _shareLinkDefaultWidget->setLayout(_shareLinkLayout); + + _shareLinkWidgetAction = new QWidgetAction(this); + _shareLinkWidgetAction->setDefaultWidget(_shareLinkDefaultWidget); + _linkContextMenu->addAction(_shareLinkWidgetAction); // Adds permissions actions (radio button style) if (_isFile) { @@ -263,7 +299,7 @@ void ShareLinkWidget::setupUiOptions() // Adds action to unshare widget (check box) _unshareLinkAction = _linkContextMenu->addAction(QIcon(":/client/theme/delete.svg"), - tr("Delete share link")); + tr("Delete link")); _linkContextMenu->addSeparator(); @@ -300,7 +336,7 @@ void ShareLinkWidget::setNote(const QString ¬e) } } -void ShareLinkWidget::slotCreateNote() +void ShareLinkWidget::slotCreateNote() { setNote(_ui->textEdit_note->toPlainText()); } @@ -435,6 +471,21 @@ void ShareLinkWidget::slotAnimationFinished() deleteLater(); } +void ShareLinkWidget::slotCreateLabel() +{ + if (_linkShare) { + slotToggleButtonAnimation(_shareLinkButton, _shareLinkProgressIndicator, true, true); + _ui->errorLabel->hide(); + _linkShare->setLabel(_shareLinkEdit->text()); + } +} + +void ShareLinkWidget::slotLabelSet() +{ + slotToggleButtonAnimation(_shareLinkButton, _shareLinkProgressIndicator, true, false); + displayShareLinkLabel(); +} + void ShareLinkWidget::slotDeleteAnimationFinished() { // There is a painting bug where a small line of this widget isn't @@ -615,4 +666,12 @@ void ShareLinkWidget::customizeStyle() _ui->passwordProgressIndicator->setColor(QGuiApplication::palette().color(QPalette::Text)); } +void ShareLinkWidget::displayShareLinkLabel() +{ + _shareLinkElidedLabel->clear(); + if(!_linkShare->getLabel().isEmpty()) { + _shareLinkElidedLabel->setText(QString("(%1)").arg(_linkShare->getLabel())); + } +} + } diff --git a/src/gui/sharelinkwidget.h b/src/gui/sharelinkwidget.h index 08071218f..a6818fcad 100644 --- a/src/gui/sharelinkwidget.h +++ b/src/gui/sharelinkwidget.h @@ -23,6 +23,10 @@ #include #include #include +#include +#include +#include +#include class QMenu; class QTableWidgetItem; @@ -37,6 +41,7 @@ class AbstractCredentials; class SyncResult; class LinkShare; class Share; +class ElidedLabel; /** * @brief The ShareDialog class @@ -88,6 +93,9 @@ private slots: void slotDeleteAnimationFinished(); void slotAnimationFinished(); + + void slotCreateLabel(); + void slotLabelSet(); signals: void createLinkShare(); @@ -121,6 +129,8 @@ private: void startAnimation(const int start, const int end); void customizeStyle(); + + void displayShareLinkLabel(); Ui::ShareLinkWidget *_ui; AccountPtr _account; @@ -146,6 +156,14 @@ private: QAction *_unshareLinkAction; QAction *_addAnotherLinkAction; QAction *_noteLinkAction; + QHBoxLayout *_shareLinkLayout{}; + QLabel *_shareLinkLabel{}; + ElidedLabel *_shareLinkElidedLabel{}; + QLineEdit *_shareLinkEdit{}; + QToolButton *_shareLinkButton{}; + QProgressIndicator *_shareLinkProgressIndicator{}; + QWidget *_shareLinkDefaultWidget{}; + QWidgetAction *_shareLinkWidgetAction{}; }; } diff --git a/src/gui/sharemanager.cpp b/src/gui/sharemanager.cpp index 4b40213e3..fec6b1bef 100644 --- a/src/gui/sharemanager.cpp +++ b/src/gui/sharemanager.cpp @@ -196,13 +196,15 @@ LinkShare::LinkShare(AccountPtr account, bool isPasswordSet, const QUrl &url, const QDate &expireDate, - const QString ¬e) + const QString ¬e, + const QString &label) : Share(account, id, uidowner, ownerDisplayName, path, Share::TypeLink, isPasswordSet, permissions) , _name(name) , _token(token) , _note(note) , _expireDate(expireDate) , _url(url) + , _label(label) { } @@ -226,6 +228,11 @@ QString LinkShare::getNote() const return _note; } +QString LinkShare::getLabel() const +{ + return _label; +} + void LinkShare::setName(const QString &name) { auto *job = new OcsShareJob(_account); @@ -261,6 +268,14 @@ void LinkShare::setExpireDate(const QDate &date) job->setExpireDate(getId(), date); } +void LinkShare::setLabel(const QString &label) +{ + auto *job = new OcsShareJob(_account); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotLabelSet); + connect(job, &OcsJob::ocsError, this, &LinkShare::slotOcsError); + job->setLabel(getId(), label); +} + void LinkShare::slotExpireDateSet(const QJsonDocument &reply, const QVariant &value) { auto data = reply.object().value("ocs").toObject().value("data").toObject(); @@ -283,6 +298,14 @@ void LinkShare::slotNameSet(const QJsonDocument &, const QVariant &value) emit nameSet(); } +void LinkShare::slotLabelSet(const QJsonDocument &, const QVariant &label) +{ + if (_label != label.toString()) { + _label = label.toString(); + emit labelSet(); + } +} + UserGroupShare::UserGroupShare(AccountPtr account, const QString &id, const QString &owner, @@ -548,7 +571,8 @@ QSharedPointer ShareManager::parseLinkShare(const QJsonObject &data) data.value("share_with").isString(), // has password? url, expireDate, - note)); + note, + data.value("label").toString())); } QSharedPointer ShareManager::parseShare(const QJsonObject &data) diff --git a/src/gui/sharemanager.h b/src/gui/sharemanager.h index 64a3a22da..48f58b81e 100644 --- a/src/gui/sharemanager.h +++ b/src/gui/sharemanager.h @@ -176,7 +176,8 @@ public: bool isPasswordSet, const QUrl &url, const QDate &expireDate, - const QString ¬e); + const QString ¬e, + const QString &label); /* * Get the share link @@ -207,6 +208,11 @@ public: * Returns the note of the link share. */ QString getNote() const; + + /* + * Returns the label of the link share. + */ + QString getLabel() const; /* * Set the name of the link share. @@ -237,16 +243,23 @@ public: * In case of a server error the serverError signal is emitted. */ void setExpireDate(const QDate &expireDate); - + + /* + * Set the label of the share link. + */ + void setLabel(const QString &label); + signals: void expireDateSet(); void noteSet(); void nameSet(); + void labelSet(); private slots: void slotNoteSet(const QJsonDocument &, const QVariant &value); void slotExpireDateSet(const QJsonDocument &reply, const QVariant &value); void slotNameSet(const QJsonDocument &, const QVariant &value); + void slotLabelSet(const QJsonDocument &, const QVariant &value); private: QString _name; @@ -254,6 +267,7 @@ private: QString _note; QDate _expireDate; QUrl _url; + QString _label; }; class UserGroupShare : public Share @@ -292,6 +306,7 @@ signals: private: QString _note; QDate _expireDate; + QString _label; }; /** diff --git a/theme.qrc.in b/theme.qrc.in index 0638c4853..c37796734 100644 --- a/theme.qrc.in +++ b/theme.qrc.in @@ -199,5 +199,7 @@ theme/colored/user-status-away.svg theme/colored/user-status-dnd.svg theme/black/email.svg + theme/black/edit.svg + theme/delete.svg diff --git a/theme/black/edit.svg b/theme/black/edit.svg new file mode 100644 index 000000000..dda21eb28 --- /dev/null +++ b/theme/black/edit.svg @@ -0,0 +1,47 @@ + + + + + + + + + +