Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2017-10-17 18:29:48 +0300
committerOlivier Goffart <olivier@woboq.com>2017-10-24 16:50:14 +0300
commitc6bd3ab31ac5303baf6358c4af685e4e2537d010 (patch)
tree2ae9351ee8946066e5aa89710ba14ce7e9d575a5 /src/gui/sharemanager.cpp
parent9c7ee6ef85fbc11234b2f0bf903c9a647f4b395b (diff)
Sharing: remove the ShareManager::_jobContinuation
It is growing indefinitively in case of error, causing a leak. Use a labda instead to pass the capture
Diffstat (limited to 'src/gui/sharemanager.cpp')
-rw-r--r--src/gui/sharemanager.cpp76
1 files changed, 24 insertions, 52 deletions
diff --git a/src/gui/sharemanager.cpp b/src/gui/sharemanager.cpp
index 95a976451..4ff75d3c5 100644
--- a/src/gui/sharemanager.cpp
+++ b/src/gui/sharemanager.cpp
@@ -21,17 +21,6 @@
#include <QJsonObject>
#include <QJsonArray>
-namespace {
-struct CreateShare
-{
- QString path;
- OCC::Share::ShareType shareType;
- QString shareWith;
- OCC::Share::Permissions permissions;
-};
-} // anonymous namespace
-Q_DECLARE_METATYPE(CreateShare)
-
namespace OCC {
Share::Share(AccountPtr account,
@@ -267,51 +256,34 @@ void ShareManager::createShare(const QString &path,
const Share::Permissions permissions)
{
auto job = new OcsShareJob(_account);
-
- // Store values that we need for creating this share later.
- CreateShare continuation;
- continuation.path = path;
- continuation.shareType = shareType;
- continuation.shareWith = shareWith;
- continuation.permissions = permissions;
- _jobContinuation[job] = QVariant::fromValue(continuation);
-
- connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotCreateShare);
connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError);
+ connect(job, &OcsShareJob::shareJobFinished, this,
+ [=](const QJsonDocument &reply) {
+ // Find existing share permissions (if this was shared with us)
+ Share::Permissions existingPermissions = SharePermissionDefault;
+ foreach (const QJsonValue &element, reply.object()["ocs"].toObject()["data"].toArray()) {
+ auto map = element.toObject();
+ if (map["file_target"] == path)
+ existingPermissions = Share::Permissions(map["permissions"].toInt());
+ }
+
+ // Limit the permissions we request for a share to the ones the item
+ // was shared with initially.
+ auto perm = permissions;
+ if (permissions == SharePermissionDefault) {
+ perm = existingPermissions;
+ } else if (existingPermissions != SharePermissionDefault) {
+ perm &= existingPermissions;
+ }
+
+ OcsShareJob *job = new OcsShareJob(_account);
+ connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotShareCreated);
+ connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError);
+ job->createShare(path, shareType, shareWith, permissions);
+ });
job->getSharedWithMe();
}
-void ShareManager::slotCreateShare(const QJsonDocument &reply)
-{
- if (!_jobContinuation.contains(sender()))
- return;
-
- CreateShare cont = _jobContinuation[sender()].value<CreateShare>();
- if (cont.path.isEmpty())
- return;
- _jobContinuation.remove(sender());
-
- // Find existing share permissions (if this was shared with us)
- Share::Permissions existingPermissions = SharePermissionDefault;
- foreach (const QJsonValue &element, reply.object()["ocs"].toObject()["data"].toArray()) {
- auto map = element.toObject();
- if (map["file_target"] == cont.path)
- existingPermissions = Share::Permissions(map["permissions"].toInt());
- }
-
- // Limit the permissions we request for a share to the ones the item
- // was shared with initially.
- if (cont.permissions == SharePermissionDefault) {
- cont.permissions = existingPermissions;
- } else if (existingPermissions != SharePermissionDefault) {
- cont.permissions &= existingPermissions;
- }
-
- OcsShareJob *job = new OcsShareJob(_account);
- connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotShareCreated);
- connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError);
- job->createShare(cont.path, cont.shareType, cont.shareWith, cont.permissions);
-}
void ShareManager::slotShareCreated(const QJsonDocument &reply)
{