Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>2022-10-12 19:02:26 +0300
committerMatthieu Gallien <matthieu.gallien@nextcloud.com>2022-10-17 10:01:36 +0300
commit580f512c945265c45902f202731489de20abc10c (patch)
tree37af3c4409ecb2718ec7447aed341ebd28dc1e6f /src
parent39a6904a813d0b9ac441129f2535d948172a0d71 (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.cpp57
-rw-r--r--src/libsync/networkjobs.h36
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