diff options
author | Matthieu Gallien <matthieu.gallien@nextcloud.com> | 2022-10-12 19:02:26 +0300 |
---|---|---|
committer | Matthieu Gallien <matthieu.gallien@nextcloud.com> | 2022-10-17 10:01:36 +0300 |
commit | 580f512c945265c45902f202731489de20abc10c (patch) | |
tree | 37af3c4409ecb2718ec7447aed341ebd28dc1e6f /src | |
parent | 39a6904a813d0b9ac441129f2535d948172a0d71 (diff) |
introduce a very simple network job to do API requests
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libsync/networkjobs.cpp | 57 | ||||
-rw-r--r-- | src/libsync/networkjobs.h | 36 |
2 files changed, 93 insertions, 0 deletions
diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 91970b5ce..81d43ffb3 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -54,6 +54,7 @@ Q_LOGGING_CATEGORY(lcAvatarJob, "nextcloud.sync.networkjob.avatar", QtInfoMsg) Q_LOGGING_CATEGORY(lcMkColJob, "nextcloud.sync.networkjob.mkcol", QtInfoMsg) Q_LOGGING_CATEGORY(lcProppatchJob, "nextcloud.sync.networkjob.proppatch", QtInfoMsg) Q_LOGGING_CATEGORY(lcJsonApiJob, "nextcloud.sync.networkjob.jsonapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcSimpleApiJob, "nextcloud.sync.networkjob.simpleapi", QtInfoMsg) Q_LOGGING_CATEGORY(lcDetermineAuthTypeJob, "nextcloud.sync.networkjob.determineauthtype", QtInfoMsg) Q_LOGGING_CATEGORY(lcSimpleFileJob, "nextcloud.sync.networkjob.simplefilejob", QtInfoMsg) const int notModifiedStatusCode = 304; @@ -1183,4 +1184,60 @@ void fetchPrivateLinkUrl(AccountPtr account, const QString &remotePath, job->start(); } +SimpleApiJob::SimpleApiJob(const AccountPtr &account, const QString &path, QObject *parent) + : AbstractNetworkJob(account, path, parent) +{ +} + +void SimpleApiJob::setBody(const QByteArray &body) +{ + _body = body; + qCDebug(lcSimpleApiJob) << "Set body for request:" << _body; +} + + +void SimpleApiJob::setVerb(Verb value) +{ + _verb = value; +} + + +QByteArray SimpleApiJob::verbToString() const +{ + switch (_verb) { + case Verb::Get: + return "GET"; + case Verb::Post: + return "POST"; + case Verb::Put: + return "PUT"; + case Verb::Delete: + return "DELETE"; + } + return "GET"; +} + +void SimpleApiJob::start() +{ + qCDebug(lcSimpleApiJob) << "send: " << path() << _body; + + _request.setRawHeader("OCS-APIREQUEST", "true"); + const auto url = Utility::concatUrlPath(account()->url(), path()); + const auto httpVerb = verbToString(); + if (!_body.isEmpty()) { + sendRequest(httpVerb, url, _request, _body); + } else { + sendRequest(httpVerb, url, _request); + } + AbstractNetworkJob::start(); +} + +bool SimpleApiJob::finished() +{ + const auto httpStatusCode = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + qCDebug(lcSimpleApiJob) << "result: " << path() << errorString() << httpStatusCode; + emit resultReceived(httpStatusCode); + return true; +} + } // namespace OCC diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h index 644244a10..c89368c45 100644 --- a/src/libsync/networkjobs.h +++ b/src/libsync/networkjobs.h @@ -459,6 +459,42 @@ private: [[nodiscard]] QByteArray verbToString() const; }; +class OWNCLOUDSYNC_EXPORT SimpleApiJob : public AbstractNetworkJob +{ + Q_OBJECT +public: + enum class Verb { + Get, + Post, + Put, + Delete, + }; + + explicit SimpleApiJob(const AccountPtr &account, const QString &path, QObject *parent = nullptr); + + void setBody(const QByteArray &body); + + void setVerb(Verb value); + +public slots: + void start() override; + +Q_SIGNALS: + + void resultReceived(int statusCode); + +protected: + bool finished() override; + +private: + QByteArray _body; + QNetworkRequest _request; + + Verb _verb = Verb::Get; + + [[nodiscard]] QByteArray verbToString() const; +}; + /** * @brief Checks with auth type to use for a server * @ingroup libsync |