Skip to content

Commit

Permalink
Shares: "copy link" action can create shares with expiry #7061
Browse files Browse the repository at this point in the history
Previously it gave up if "expiry required" was enabled. Now it'll create
a link share per day with the default expiry for these setups.
  • Loading branch information
ckamm committed Mar 6, 2019
1 parent a39f4a5 commit 12d3d1b
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/gui/sharelinkwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account,
if (_account->capabilities().sharePublicLinkEnforceExpireDate()) {
_ui->checkBox_expire->setEnabled(false);
_ui->calendar->setMaximumDate(QDate::currentDate().addDays(
_account->capabilities().sharePublicLinkExpireDateDays()));
_account->capabilities().sharePublicLinkDefaultExpireDateDays()));
_expiryRequired = true;
}

Expand Down
9 changes: 8 additions & 1 deletion src/gui/socketapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,7 @@ class GetOrCreatePublicLinkShare : public QObject
GetOrCreatePublicLinkShare(const AccountPtr &account, const QString &localFile,
std::function<void(const QString &link)> targetFun, QObject *parent)
: QObject(parent)
, _account(account)
, _shareManager(account)
, _localFile(localFile)
, _targetFun(targetFun)
Expand All @@ -509,6 +510,12 @@ private slots:
void sharesFetched(const QList<QSharedPointer<Share>> &shares)
{
auto shareName = SocketApi::tr("Context menu share");

// If shares will expire, create a new one every day.
if (_account->capabilities().sharePublicLinkDefaultExpire()) {
shareName = SocketApi::tr("Context menu share %1").arg(QDate::currentDate().toString(Qt::ISODate));
}

// If there already is a context menu share, reuse it
for (const auto &share : shares) {
const auto linkShare = qSharedPointerDynamicCast<LinkShare>(share);
Expand Down Expand Up @@ -551,6 +558,7 @@ private slots:
deleteLater();
}

AccountPtr _account;
ShareManager _shareManager;
QString _localFile;
std::function<void(const QString &url)> _targetFun;
Expand Down Expand Up @@ -731,7 +739,6 @@ void SocketApi::sendSharingContextMenuOptions(const FileData &fileData, SocketLi

// Is is possible to create a public link without user choices?
bool canCreateDefaultPublicLink = publicLinksEnabled
&& !capabilities.sharePublicLinkEnforceExpireDate()
&& !capabilities.sharePublicLinkEnforcePassword();

if (canCreateDefaultPublicLink) {
Expand Down
11 changes: 8 additions & 3 deletions src/libsync/capabilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,21 @@ bool Capabilities::sharePublicLinkEnforcePassword() const
return _capabilities["files_sharing"].toMap()["public"].toMap()["password"].toMap()["enforced"].toBool();
}

bool Capabilities::sharePublicLinkEnforceExpireDate() const
bool Capabilities::sharePublicLinkDefaultExpire() const
{
return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date"].toMap()["enforced"].toBool();
return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date"].toMap()["enabled"].toBool();
}

int Capabilities::sharePublicLinkExpireDateDays() const
int Capabilities::sharePublicLinkDefaultExpireDateDays() const
{
return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date"].toMap()["days"].toInt();
}

bool Capabilities::sharePublicLinkEnforceExpireDate() const
{
return _capabilities["files_sharing"].toMap()["public"].toMap()["expire_date"].toMap()["enforced"].toBool();
}

bool Capabilities::sharePublicLinkMultiple() const
{
return _capabilities["files_sharing"].toMap()["public"].toMap()["multiple"].toBool();
Expand Down
3 changes: 2 additions & 1 deletion src/libsync/capabilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@ class OWNCLOUDSYNC_EXPORT Capabilities
bool sharePublicLinkAllowUpload() const;
bool sharePublicLinkSupportsUploadOnly() const;
bool sharePublicLinkEnforcePassword() const;
bool sharePublicLinkDefaultExpire() const;
int sharePublicLinkDefaultExpireDateDays() const;
bool sharePublicLinkEnforceExpireDate() const;
int sharePublicLinkExpireDateDays() const;
bool sharePublicLinkMultiple() const;
bool shareResharing() const;
bool chunkingNg() const;
Expand Down

0 comments on commit 12d3d1b

Please sign in to comment.