diff options
Diffstat (limited to 'src/client/QXmppFileSharingProvider.h')
| -rw-r--r-- | src/client/QXmppFileSharingProvider.h | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/src/client/QXmppFileSharingProvider.h b/src/client/QXmppFileSharingProvider.h index cde719db..02e6252a 100644 --- a/src/client/QXmppFileSharingProvider.h +++ b/src/client/QXmppFileSharingProvider.h @@ -1,14 +1,18 @@ // SPDX-FileCopyrightText: 2022 Jonah BrĂ¼chert <jbb@kaidan.im> +// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im> // // SPDX-License-Identifier: LGPL-2.1-or-later #ifndef QXMPPFILESHARINGPROVIDER_H #define QXMPPFILESHARINGPROVIDER_H +#include "QXmppError.h" #include "QXmppGlobal.h" #include <any> +#include <functional> #include <memory> +#include <variant> class QIODevice; class QXmppFileMetadata; @@ -16,7 +20,7 @@ class QXmppUpload; class QXmppDownload; /// -/// \brief The interface of a provider for the FileSharingManager +/// \brief The interface of a provider for the QXmppFileSharingManager /// /// To use it, implement all the pure virtual functions, /// and add a using declaration for the type of source you want to handle. @@ -27,26 +31,60 @@ class QXmppDownload; class QXMPP_EXPORT QXmppFileSharingProvider { public: + /// Contains QXmpp::Success (successfully finished), QXmpp::Cancelled (manually cancelled) or + /// QXmppError (an error occured while downloading). + using DownloadResult = std::variant<QXmpp::Success, QXmpp::Cancelled, QXmppError>; + + /// Contains std::any (created file source), QXmpp::Cancelled (manually cancelled) or + /// QXmppError (an error occured while uploading). + using UploadResult = std::variant<std::any /* source */, QXmpp::Cancelled, QXmppError>; + + /// Used to control ongoing downloads + class Download + { + public: + virtual ~Download() = default; + /// Cancels the download. + virtual void cancel() = 0; + }; + + /// Used to control ongoing uploads + class Upload + { + public: + virtual ~Upload() = default; + /// Cancels the upload. + virtual void cancel() = 0; + }; + /// \cond virtual ~QXmppFileSharingProvider() = default; /// \endcond /// /// \brief Handles the download of files for this provider - /// \param source A type-erased source object. The provider will only ever have to handle its own sources, - /// so this can be safely casted to a concrete type. + /// \param source A type-erased source object. The provider will only ever have to handle + /// its own sources, so this can safely be casted to the defined source type. /// \param target QIODevice into which the received data should be written - /// \return A subclass of QXmppDownload + /// \param reportProgress Can be called to report received bytes and total bytes + /// \param reportFinished Finalizes the download, no more progress must be reported after this /// - virtual auto downloadFile(const std::any &source, std::unique_ptr<QIODevice> &&target) -> std::shared_ptr<QXmppDownload> = 0; + virtual auto downloadFile(const std::any &source, + std::unique_ptr<QIODevice> target, + std::function<void(quint64, quint64)> reportProgress, + std::function<void(DownloadResult)> reportFinished) -> std::shared_ptr<Download> = 0; /// /// \brief Handles the upload of a file for this provider /// \param source A QIODevice from which data for uploading should be read. /// \param info Metadata of the file - /// \return A subclass of QXmppUpload + /// \param reportProgress Can be called to report sent bytes and total bytes + /// \param reportFinished Finalizes the upload, no more progress must be reported after this /// - virtual auto uploadFile(std::unique_ptr<QIODevice> source, const QXmppFileMetadata &info) -> std::shared_ptr<QXmppUpload> = 0; + virtual auto uploadFile(std::unique_ptr<QIODevice> source, + const QXmppFileMetadata &info, + std::function<void(quint64, quint64)> reportProgress, + std::function<void(UploadResult)> reportFinished) -> std::shared_ptr<Upload> = 0; }; #endif // QXMPPFILESHARINGPROVIDER_H |
