diff options
author | Jocelyn Turcotte <jturcotte@woboq.com> | 2016-09-14 16:31:05 +0300 |
---|---|---|
committer | Jocelyn Turcotte <jturcotte@woboq.com> | 2016-09-16 18:43:39 +0300 |
commit | 2b274e9460b6236e0f2e54d3b4cef57eca64e980 (patch) | |
tree | 89980a8a4ad79c21acaef6aa451f91e56ccd52fa /src/gui/sharemanager.h | |
parent | b7809ded23fdba6aa50b6d834b5bd5fc16865eea (diff) |
Fix the MSVC build
- Replace functions that are provided by MinGW with a Win32-based
implementation
- Explicitly export needed symbols from ocsync.dll
- Rename share.h to sharemanager.h since the name clashes with one
of the Windows headers and get included from there
- Remove the timestamp from the fallback csync stderr logging, it's
not used since we always provide a log callback
Diffstat (limited to 'src/gui/sharemanager.h')
-rw-r--r-- | src/gui/sharemanager.h | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/src/gui/sharemanager.h b/src/gui/sharemanager.h new file mode 100644 index 000000000..8c248c686 --- /dev/null +++ b/src/gui/sharemanager.h @@ -0,0 +1,281 @@ +/* + * Copyright (C) by Roeland Jago Douma <rullzer@owncloud.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef SHAREMANAGER_H +#define SHAREMANAGER_H + +#include "accountfwd.h" +#include "sharee.h" +#include "sharepermissions.h" + +#include <QObject> +#include <QDate> +#include <QString> +#include <QList> +#include <QSharedPointer> +#include <QUrl> +#include <QVariantMap> + +namespace OCC { + +class Share : public QObject { + Q_OBJECT + +public: + + /** + * Possible share types + * Need to be in sync with Sharee::Type + */ + enum ShareType { + TypeUser = Sharee::User, + TypeGroup = Sharee::Group, + TypeLink = 3, + TypeRemote = Sharee::Federated + }; + + typedef SharePermissions Permissions; + + /* + * Constructor for shares + */ + explicit Share(AccountPtr account, + const QString& id, + const QString& path, + const ShareType shareType, + const Permissions permissions = SharePermissionDefault, + const QSharedPointer<Sharee> shareWith = QSharedPointer<Sharee>(NULL)); + + /** + * The account the share is defined on. + */ + AccountPtr account() const; + + /* + * Get the id + */ + QString getId() const; + + /* + * Get the shareType + */ + ShareType getShareType() const; + + /* + * Get the shareWith + */ + QSharedPointer<Sharee> getShareWith() const; + + /* + * Get permissions + */ + Permissions getPermissions() const; + + /* + * Set the permissions of a share + * + * On success the permissionsSet signal is emitted + * In case of a server error the serverError signal is emitted. + */ + void setPermissions(Permissions permissions); + + /** + * Deletes a share + * + * On success the shareDeleted signal is emitted + * In case of a server error the serverError signal is emitted. + */ + void deleteShare(); + +signals: + void permissionsSet(); + void shareDeleted(); + void serverError(int code, const QString &message); + +protected: + AccountPtr _account; + QString _id; + QString _path; + ShareType _shareType; + Permissions _permissions; + QSharedPointer<Sharee> _shareWith; + +protected slots: + void slotOcsError(int statusCode, const QString &message); + +private slots: + void slotDeleted(); + void slotPermissionsSet(const QVariantMap &, const QVariant &value); + +}; + +/** + * A Link share is just like a regular share but then slightly different. + * There are several methods in the API that either work differently for + * link shares or are only available to link shares. + */ +class LinkShare : public Share { + Q_OBJECT +public: + + explicit LinkShare(AccountPtr account, + const QString& id, + const QString& path, + const Permissions permissions, + bool passwordSet, + const QUrl& url, + const QDate& expireDate); + + /* + * Get the share link + */ + QUrl getLink() const; + + /* + * Get the publicUpload status of this share + */ + bool getPublicUpload(); + + /* + * 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. + */ + void setPublicUpload(bool publicUpload); + + /* + * Set the password + * + * On success the passwordSet signal is emitted + * In case of a server error the serverError signal is emitted. + */ + void setPassword(const QString& password); + + /* + * Is the password set? + */ + bool isPasswordSet() const; + + /* + * Get the expiration date + */ + QDate getExpireDate() const; + + /* + * Set the expiration date + * + * On success the expireDateSet signal is emitted + * In case of a server error the serverError signal is emitted. + */ + void setExpireDate(const QDate& expireDate); + +signals: + void expireDateSet(); + void publicUploadSet(); + void passwordSet(); + void passwordSetError(int statusCode, const QString &message); + +private slots: + void slotPasswordSet(const QVariantMap&, const QVariant &value); + void slotPublicUploadSet(const QVariantMap&, const QVariant &value); + void slotExpireDateSet(const QVariantMap& reply, const QVariant &value); + void slotSetPasswordError(int statusCode, const QString &message); + +private: + bool _passwordSet; + QDate _expireDate; + QUrl _url; +}; + +/** + * The share manager allows for creating, retrieving and deletion + * of shares. It abstracts away from the OCS Share API, all the usages + * shares should talk to this manager and not use OCS Share Job directly + */ +class ShareManager : public QObject { + Q_OBJECT +public: + explicit ShareManager(AccountPtr _account, QObject *parent = NULL); + + /** + * Tell the manager to create a link share + * + * @param path The path of the linkshare relative to the user folder on the server + * @param password The password of the share + * + * On success the signal linkShareCreated is emitted + * For older server the linkShareRequiresPassword signal is emitted when it seems appropiate + * In case of a server error the serverError signal is emitted + */ + void createLinkShare(const QString& path, + const QString& password=""); + + /** + * Tell the manager to create a new share + * + * @param path The path of the share relative to the user folder on the server + * @param shareType The type of share (TypeUser, TypeGroup, TypeRemote) + * @param Permissions The share permissions + * + * On success the signal shareCreated is emitted + * In case of a server error the serverError signal is emitted + */ + void createShare(const QString& path, + const Share::ShareType shareType, + const QString shareWith, + const Share::Permissions permissions); + + /** + * Fetch all the shares for path + * + * @param path The path to get the shares for relative to the users folder on the server + * + * On success the sharesFetched signal is emitted + * In case of a server error the serverError signal is emitted + */ + void fetchShares(const QString& path); + +signals: + void shareCreated(const QSharedPointer<Share> &share); + void linkShareCreated(const QSharedPointer<LinkShare> &share); + void sharesFetched(const QList<QSharedPointer<Share>> &shares); + void serverError(int code, const QString &message); + + /** Emitted when creating a link share with password fails. + * + * @param message the error message reported by the server + * + * See createLinkShare(). + */ + void linkShareRequiresPassword(const QString &message); + +private slots: + void slotSharesFetched(const QVariantMap &reply); + 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; +}; + +} + +#endif // SHAREMANAGER_H |