_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()));
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();
_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
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();
// 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());
}
}
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);
}
}
return items.first()->data(Qt::UserRole).value<QSharedPointer<LinkShare>>();
}
-void ShareLinkWidget::slotPublicUploadSet()
+void ShareLinkWidget::slotPermissionsSet()
{
if (sender() == selectedShare().data()) {
slotShareSelectionChanged();
void slotCheckBoxPasswordClicked();
void slotCheckBoxExpireClicked();
void slotPasswordReturnPressed();
- void slotCheckBoxEditingClicked();
+ void slotPermissionsCheckboxClicked();
void slotExpireDateChanged(const QDate &date);
void slotPasswordChanged(const QString &newText);
void slotNameEdited(QTableWidgetItem *item);
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);
</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>
<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>
</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>
{
}
-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
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);
/*
* 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.
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);
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();
bool shareAPI() const;
bool sharePublicLink() const;
bool sharePublicLinkAllowUpload() const;
+ bool sharePublicLinkSupportsUploadOnly() const;
bool sharePublicLinkEnforcePassword() const;
bool sharePublicLinkEnforceExpireDate() const;
int sharePublicLinkExpireDateDays() const;