mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-27 23:17:13 +03:00
parent
62ded39416
commit
3b60f6e238
5 changed files with 70 additions and 3 deletions
|
@ -129,6 +129,13 @@ void OcsShareJob::createShare(const QString& path,
|
|||
start();
|
||||
}
|
||||
|
||||
void OcsShareJob::getSharedWithMe()
|
||||
{
|
||||
setVerb("GET");
|
||||
addParam(QLatin1String("shared_with_me"), QLatin1String("true"));
|
||||
start();
|
||||
}
|
||||
|
||||
void OcsShareJob::jobDone(QVariantMap reply)
|
||||
{
|
||||
emit shareJobFinished(reply, _value);
|
||||
|
|
|
@ -103,6 +103,11 @@ public:
|
|||
const QString& shareWith = "",
|
||||
const Share::Permissions permissions = Share::PermissionRead);
|
||||
|
||||
/**
|
||||
* Returns information on the items shared with the current user.
|
||||
*/
|
||||
void getSharedWithMe();
|
||||
|
||||
signals:
|
||||
/**
|
||||
* Result of the OCS request
|
||||
|
|
|
@ -17,6 +17,17 @@
|
|||
|
||||
#include <QUrl>
|
||||
|
||||
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,
|
||||
|
@ -212,15 +223,57 @@ void ShareManager::slotLinkShareCreated(const QVariantMap &reply)
|
|||
emit linkShareCreated(share);
|
||||
}
|
||||
|
||||
|
||||
void ShareManager::createShare(const QString& path,
|
||||
const Share::ShareType shareType,
|
||||
const QString shareWith,
|
||||
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, SIGNAL(shareJobFinished(QVariantMap,QVariant)), SLOT(slotCreateShare(QVariantMap)));
|
||||
connect(job, SIGNAL(ocsError(int,QString)), SLOT(slotOcsError(int,QString)));
|
||||
job->getSharedWithMe();
|
||||
}
|
||||
|
||||
void ShareManager::slotCreateShare(const QVariantMap &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 = Share::PermissionDefault;
|
||||
foreach (const QVariant & element, reply["ocs"].toMap()["data"].toList()) {
|
||||
QVariantMap map = element.toMap();
|
||||
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 == Share::PermissionDefault) {
|
||||
cont.permissions = existingPermissions;
|
||||
} else if (existingPermissions != Share::PermissionDefault) {
|
||||
cont.permissions &= existingPermissions;
|
||||
}
|
||||
|
||||
OcsShareJob *job = new OcsShareJob(_account);
|
||||
connect(job, SIGNAL(shareJobFinished(QVariantMap, QVariant)), SLOT(slotShareCreated(QVariantMap)));
|
||||
connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString)));
|
||||
job->createShare(path, shareType, shareWith, permissions);
|
||||
job->createShare(cont.path, cont.shareType, cont.shareWith, cont.permissions);
|
||||
}
|
||||
|
||||
void ShareManager::slotShareCreated(const QVariantMap &reply)
|
||||
|
@ -314,7 +367,7 @@ QSharedPointer<Share> ShareManager::parseShare(const QVariantMap &data)
|
|||
|
||||
void ShareManager::slotOcsError(int statusCode, const QString &message)
|
||||
{
|
||||
emit serverError(statusCode, message);
|
||||
emit serverError(statusCode, message);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -268,11 +268,13 @@ private slots:
|
|||
void slotLinkShareCreated(const QVariantMap &reply);
|
||||
void slotShareCreated(const QVariantMap &reply);
|
||||
void slotOcsError(int statusCode, const QString &message);
|
||||
void slotCreateShare(const QVariantMap &reply);
|
||||
|
||||
private:
|
||||
QSharedPointer<LinkShare> parseLinkShare(const QVariantMap &data);
|
||||
QSharedPointer<Share> parseShare(const QVariantMap &data);
|
||||
|
||||
QMap<QObject*, QVariant> _jobContinuation;
|
||||
AccountPtr _account;
|
||||
};
|
||||
|
||||
|
|
|
@ -386,7 +386,7 @@ void SocketApi::command_SHARE(const QString& localFile, QIODevice* socket)
|
|||
return;
|
||||
}
|
||||
|
||||
const QString remotePath = shareFolder->remotePath() + QLatin1Char('/') + file;
|
||||
const QString remotePath = QDir(shareFolder->remotePath()).filePath(file);
|
||||
|
||||
// Can't share root folder
|
||||
if (remotePath == "/") {
|
||||
|
|
Loading…
Reference in a new issue