From: Matthieu Gallien Date: Wed, 12 Oct 2022 16:02:26 +0000 (+0200) Subject: introduce a very simple network job to do API requests X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~11^2~204^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=580f512c945265c45902f202731489de20abc10c;p=nextcloud-desktop.git introduce a very simple network job to do API requests Signed-off-by: Matthieu Gallien --- 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