Skip to content

Commit

Permalink
Link shares: Add "show file listing" option #5837
Browse files Browse the repository at this point in the history
  • Loading branch information
ckamm committed Jul 7, 2017
1 parent 411621b commit e54be1c
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 42 deletions.
33 changes: 23 additions & 10 deletions src/gui/sharelinkwidget.cpp
Expand Up @@ -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()));
Expand All @@ -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();

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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());
}
}

Expand Down Expand Up @@ -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);
}
}

Expand All @@ -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();
Expand Down
4 changes: 2 additions & 2 deletions src/gui/sharelinkwidget.h
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
13 changes: 10 additions & 3 deletions src/gui/sharelinkwidget.ui
Expand Up @@ -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>
Expand All @@ -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>
Expand All @@ -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>
Expand Down
22 changes: 4 additions & 18 deletions src/gui/sharemanager.cpp
Expand Up @@ -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
Expand All @@ -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);
Expand Down
12 changes: 3 additions & 9 deletions src/gui/sharemanager.h
Expand Up @@ -153,16 +153,12 @@ class LinkShare : public Share
/*
* 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.
Expand Down Expand Up @@ -209,14 +205,12 @@ class LinkShare : public Share

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);
Expand Down
5 changes: 5 additions & 0 deletions src/libsync/capabilities.cpp
Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions src/libsync/capabilities.h
Expand Up @@ -36,6 +36,7 @@ class OWNCLOUDSYNC_EXPORT Capabilities
bool shareAPI() const;
bool sharePublicLink() const;
bool sharePublicLinkAllowUpload() const;
bool sharePublicLinkSupportsUploadOnly() const;
bool sharePublicLinkEnforcePassword() const;
bool sharePublicLinkEnforceExpireDate() const;
int sharePublicLinkExpireDateDays() const;
Expand Down

0 comments on commit e54be1c

Please sign in to comment.