mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-26 06:15:48 +03:00
Link shares: Add "show file listing" option #5837
This commit is contained in:
parent
411621bf03
commit
e54be1c4ee
7 changed files with 48 additions and 42 deletions
|
@ -68,7 +68,7 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
|
|||
_pi_editing = new QProgressIndicator();
|
||||
_ui->horizontalLayout_create->addWidget(_pi_create);
|
||||
_ui->horizontalLayout_password->addWidget(_pi_password);
|
||||
_ui->horizontalLayout_editing->addWidget(_pi_editing);
|
||||
_ui->layout_editing->addWidget(_pi_editing, 0, 2);
|
||||
_ui->horizontalLayout_expire->insertWidget(_ui->horizontalLayout_expire->count() - 1, _pi_date);
|
||||
|
||||
connect(_ui->nameLineEdit, SIGNAL(returnPressed()), SLOT(slotShareNameEntered()));
|
||||
|
@ -81,7 +81,8 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
|
|||
connect(_ui->pushButton_setPassword, SIGNAL(clicked(bool)), SLOT(slotPasswordReturnPressed()));
|
||||
connect(_ui->checkBox_expire, SIGNAL(clicked()), this, SLOT(slotCheckBoxExpireClicked()));
|
||||
connect(_ui->calendar, SIGNAL(dateChanged(QDate)), SLOT(slotExpireDateChanged(QDate)));
|
||||
connect(_ui->checkBox_editing, SIGNAL(clicked()), this, SLOT(slotCheckBoxEditingClicked()));
|
||||
connect(_ui->checkBox_editing, SIGNAL(clicked()), this, SLOT(slotPermissionsCheckboxClicked()));
|
||||
connect(_ui->checkBox_fileListing, SIGNAL(clicked(bool)), this, SLOT(slotPermissionsCheckboxClicked()));
|
||||
|
||||
_ui->errorLabel->hide();
|
||||
|
||||
|
@ -145,10 +146,11 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
|
|||
_expiryRequired = true;
|
||||
}
|
||||
|
||||
// File can't have public upload set.
|
||||
_ui->widget_editing->setVisible(!_isFile);
|
||||
_ui->checkBox_editing->setEnabled(
|
||||
_account->capabilities().sharePublicLinkAllowUpload());
|
||||
// File can't have public upload set; we also hide it if the capability isn't there
|
||||
_ui->widget_editing->setVisible(
|
||||
!_isFile && _account->capabilities().sharePublicLinkAllowUpload());
|
||||
_ui->checkBox_fileListing->setVisible(
|
||||
_account->capabilities().sharePublicLinkSupportsUploadOnly());
|
||||
|
||||
|
||||
// Prepare sharing menu
|
||||
|
@ -217,9 +219,10 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
|
|||
connect(share.data(), SIGNAL(serverError(int, QString)), SLOT(slotServerError(int, QString)));
|
||||
connect(share.data(), SIGNAL(shareDeleted()), SLOT(slotDeleteShareFetched()));
|
||||
connect(share.data(), SIGNAL(expireDateSet()), SLOT(slotExpireSet()));
|
||||
connect(share.data(), SIGNAL(publicUploadSet()), SLOT(slotPublicUploadSet()));
|
||||
connect(share.data(), SIGNAL(publicUploadSet()), SLOT(slotPermissionsSet()));
|
||||
connect(share.data(), SIGNAL(passwordSet()), SLOT(slotPasswordSet()));
|
||||
connect(share.data(), SIGNAL(passwordSetError(int, QString)), SLOT(slotPasswordSetError(int, QString)));
|
||||
connect(share.data(), SIGNAL(permissionsSet()), SLOT(slotPermissionsSet()));
|
||||
|
||||
// Build the table row
|
||||
auto row = table->rowCount();
|
||||
|
@ -325,6 +328,8 @@ void ShareLinkWidget::slotShareSelectionChanged()
|
|||
// Public upload state (box is hidden for files)
|
||||
if (!_isFile) {
|
||||
_ui->checkBox_editing->setChecked(share->getPublicUpload());
|
||||
_ui->checkBox_fileListing->setChecked(share->getShowFileListing());
|
||||
_ui->checkBox_fileListing->setEnabled(share->getPublicUpload());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -532,14 +537,22 @@ void ShareLinkWidget::slotDeleteShareClicked()
|
|||
share->deleteShare();
|
||||
}
|
||||
|
||||
void ShareLinkWidget::slotCheckBoxEditingClicked()
|
||||
void ShareLinkWidget::slotPermissionsCheckboxClicked()
|
||||
{
|
||||
if (auto current = selectedShare()) {
|
||||
_ui->checkBox_editing->setEnabled(false);
|
||||
_ui->checkBox_fileListing->setEnabled(false);
|
||||
_pi_editing->startAnimation();
|
||||
_ui->errorLabel->hide();
|
||||
|
||||
current->setPublicUpload(_ui->checkBox_editing->isChecked());
|
||||
SharePermissions perm = SharePermissionRead;
|
||||
if (_ui->checkBox_editing->isChecked() && _ui->checkBox_fileListing->isChecked()) {
|
||||
perm = SharePermissionRead | SharePermissionCreate
|
||||
| SharePermissionUpdate | SharePermissionDelete;
|
||||
} else if (_ui->checkBox_editing->isChecked() && !_ui->checkBox_fileListing->isChecked()) {
|
||||
perm = SharePermissionCreate;
|
||||
}
|
||||
current->setPermissions(perm);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -553,7 +566,7 @@ QSharedPointer<LinkShare> ShareLinkWidget::selectedShare() const
|
|||
return items.first()->data(Qt::UserRole).value<QSharedPointer<LinkShare>>();
|
||||
}
|
||||
|
||||
void ShareLinkWidget::slotPublicUploadSet()
|
||||
void ShareLinkWidget::slotPermissionsSet()
|
||||
{
|
||||
if (sender() == selectedShare().data()) {
|
||||
slotShareSelectionChanged();
|
||||
|
|
|
@ -65,7 +65,7 @@ private slots:
|
|||
void slotCheckBoxPasswordClicked();
|
||||
void slotCheckBoxExpireClicked();
|
||||
void slotPasswordReturnPressed();
|
||||
void slotCheckBoxEditingClicked();
|
||||
void slotPermissionsCheckboxClicked();
|
||||
void slotExpireDateChanged(const QDate &date);
|
||||
void slotPasswordChanged(const QString &newText);
|
||||
void slotNameEdited(QTableWidgetItem *item);
|
||||
|
@ -77,7 +77,7 @@ private slots:
|
|||
void slotCreateShareRequiresPassword(const QString &message);
|
||||
void slotPasswordSet();
|
||||
void slotExpireSet();
|
||||
void slotPublicUploadSet();
|
||||
void slotPermissionsSet();
|
||||
|
||||
void slotServerError(int code, const QString &message);
|
||||
void slotPasswordSetError(int code, const QString &message);
|
||||
|
|
|
@ -181,7 +181,7 @@
|
|||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QWidget" name="widget_editing" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_editing">
|
||||
<layout class="QGridLayout" name="layout_editing">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
|
@ -194,14 +194,14 @@
|
|||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_editing">
|
||||
<property name="text">
|
||||
<string>Allow editing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
|
@ -214,6 +214,13 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_fileListing">
|
||||
<property name="text">
|
||||
<string>Show file listing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -146,17 +146,14 @@ LinkShare::LinkShare(AccountPtr account,
|
|||
{
|
||||
}
|
||||
|
||||
bool LinkShare::getPublicUpload()
|
||||
bool LinkShare::getPublicUpload() const
|
||||
{
|
||||
return ((_permissions & SharePermissionUpdate) && (_permissions & SharePermissionCreate));
|
||||
return _permissions & SharePermissionCreate;
|
||||
}
|
||||
|
||||
void LinkShare::setPublicUpload(bool publicUpload)
|
||||
bool LinkShare::getShowFileListing() const
|
||||
{
|
||||
OcsShareJob *job = new OcsShareJob(_account);
|
||||
connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotPublicUploadSet(QJsonDocument, QVariant)));
|
||||
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
|
||||
job->setPublicUpload(getId(), publicUpload);
|
||||
return _permissions & SharePermissionRead;
|
||||
}
|
||||
|
||||
QString LinkShare::getName() const
|
||||
|
@ -177,17 +174,6 @@ QString LinkShare::getToken() const
|
|||
return _token;
|
||||
}
|
||||
|
||||
void LinkShare::slotPublicUploadSet(const QJsonDocument &, const QVariant &value)
|
||||
{
|
||||
if (value.toBool()) {
|
||||
_permissions = SharePermissionRead | SharePermissionUpdate | SharePermissionCreate;
|
||||
} else {
|
||||
_permissions = SharePermissionRead;
|
||||
}
|
||||
|
||||
emit publicUploadSet();
|
||||
}
|
||||
|
||||
void LinkShare::setPassword(const QString &password)
|
||||
{
|
||||
OcsShareJob *job = new OcsShareJob(_account);
|
||||
|
|
|
@ -153,16 +153,12 @@ public:
|
|||
/*
|
||||
* Get the publicUpload status of this share
|
||||
*/
|
||||
bool getPublicUpload();
|
||||
bool getPublicUpload() const;
|
||||
|
||||
/*
|
||||
* Set a share to be public upload
|
||||
* This function can only be called on link shares
|
||||
*
|
||||
* On success the publicUploadSet signal is emitted
|
||||
* In case of a server error the serverError signal is emitted.
|
||||
* Whether directory listings are available (READ permission)
|
||||
*/
|
||||
void setPublicUpload(bool publicUpload);
|
||||
bool getShowFileListing() const;
|
||||
|
||||
/*
|
||||
* Returns the name of the link share. Can be empty.
|
||||
|
@ -209,14 +205,12 @@ public:
|
|||
|
||||
signals:
|
||||
void expireDateSet();
|
||||
void publicUploadSet();
|
||||
void passwordSet();
|
||||
void passwordSetError(int statusCode, const QString &message);
|
||||
void nameSet();
|
||||
|
||||
private slots:
|
||||
void slotPasswordSet(const QJsonDocument &, const QVariant &value);
|
||||
void slotPublicUploadSet(const QJsonDocument &, const QVariant &value);
|
||||
void slotExpireDateSet(const QJsonDocument &reply, const QVariant &value);
|
||||
void slotSetPasswordError(int statusCode, const QString &message);
|
||||
void slotNameSet(const QJsonDocument &, const QVariant &value);
|
||||
|
|
|
@ -51,6 +51,11 @@ bool Capabilities::sharePublicLinkAllowUpload() const
|
|||
return _capabilities["files_sharing"].toMap()["public"].toMap()["upload"].toBool();
|
||||
}
|
||||
|
||||
bool Capabilities::sharePublicLinkSupportsUploadOnly() const
|
||||
{
|
||||
return _capabilities["files_sharing"].toMap()["public"].toMap()["supports_upload_only"].toBool();
|
||||
}
|
||||
|
||||
bool Capabilities::sharePublicLinkEnforcePassword() const
|
||||
{
|
||||
return _capabilities["files_sharing"].toMap()["public"].toMap()["password"].toMap()["enforced"].toBool();
|
||||
|
|
|
@ -36,6 +36,7 @@ public:
|
|||
bool shareAPI() const;
|
||||
bool sharePublicLink() const;
|
||||
bool sharePublicLinkAllowUpload() const;
|
||||
bool sharePublicLinkSupportsUploadOnly() const;
|
||||
bool sharePublicLinkEnforcePassword() const;
|
||||
bool sharePublicLinkEnforceExpireDate() const;
|
||||
int sharePublicLinkExpireDateDays() const;
|
||||
|
|
Loading…
Reference in a new issue