aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-06-08 17:03:41 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2018-06-08 17:03:41 +0900
commitb28e2d697842f58e2994ead62635b31f48162cdc (patch)
tree79e4ea713835e19d591c4c4b32d2997139a1ef01 /lib
parent318e094e19bc8ecfe89031e4c62a8cd14d307157 (diff)
downloadlibquotient-b28e2d697842f58e2994ead62635b31f48162cdc.tar.gz
libquotient-b28e2d697842f58e2994ead62635b31f48162cdc.zip
csapi: add jobs for device management
Same as for account management jobs, auth objects are modeled as generic QJsonObjects for now.
Diffstat (limited to 'lib')
-rw-r--r--lib/csapi/definitions/client_device.cpp34
-rw-r--r--lib/csapi/definitions/client_device.h31
-rw-r--r--lib/csapi/device_management.cpp111
-rw-r--r--lib/csapi/device_management.h87
4 files changed, 263 insertions, 0 deletions
diff --git a/lib/csapi/definitions/client_device.cpp b/lib/csapi/definitions/client_device.cpp
new file mode 100644
index 00000000..60b3617c
--- /dev/null
+++ b/lib/csapi/definitions/client_device.cpp
@@ -0,0 +1,34 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#include "client_device.h"
+
+using namespace QMatrixClient;
+
+QJsonObject QMatrixClient::toJson(const Device& pod)
+{
+ QJsonObject _json;
+ addToJson<>(_json, "device_id", pod.deviceId);
+ addToJson<IfNotEmpty>(_json, "display_name", pod.displayName);
+ addToJson<IfNotEmpty>(_json, "last_seen_ip", pod.lastSeenIp);
+ addToJson<IfNotEmpty>(_json, "last_seen_ts", pod.lastSeenTs);
+ return _json;
+}
+
+Device FromJson<Device>::operator()(const QJsonValue& jv)
+{
+ const auto& _json = jv.toObject();
+ Device result;
+ result.deviceId =
+ fromJson<QString>(_json.value("device_id"));
+ result.displayName =
+ fromJson<QString>(_json.value("display_name"));
+ result.lastSeenIp =
+ fromJson<QString>(_json.value("last_seen_ip"));
+ result.lastSeenTs =
+ fromJson<qint64>(_json.value("last_seen_ts"));
+
+ return result;
+}
+
diff --git a/lib/csapi/definitions/client_device.h b/lib/csapi/definitions/client_device.h
new file mode 100644
index 00000000..4c09e13c
--- /dev/null
+++ b/lib/csapi/definitions/client_device.h
@@ -0,0 +1,31 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#pragma once
+
+
+#include "converters.h"
+
+#include "converters.h"
+
+namespace QMatrixClient
+{
+ // Data structures
+
+ struct Device
+ {
+ QString deviceId;
+ QString displayName;
+ QString lastSeenIp;
+ Omittable<qint64> lastSeenTs;
+ };
+
+ QJsonObject toJson(const Device& pod);
+
+ template <> struct FromJson<Device>
+ {
+ Device operator()(const QJsonValue& jv);
+ };
+
+} // namespace QMatrixClient
diff --git a/lib/csapi/device_management.cpp b/lib/csapi/device_management.cpp
new file mode 100644
index 00000000..2248a0b4
--- /dev/null
+++ b/lib/csapi/device_management.cpp
@@ -0,0 +1,111 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#include "device_management.h"
+
+#include "converters.h"
+
+#include <QtCore/QStringBuilder>
+
+using namespace QMatrixClient;
+
+static const auto basePath = QStringLiteral("/_matrix/client/r0");
+
+class GetDevicesJob::Private
+{
+ public:
+ QVector<Device> devices;
+};
+
+QUrl GetDevicesJob::makeRequestUrl(QUrl baseUrl)
+{
+ return BaseJob::makeRequestUrl(std::move(baseUrl),
+ basePath % "/devices");
+}
+
+GetDevicesJob::GetDevicesJob()
+ : BaseJob(HttpVerb::Get, "GetDevicesJob",
+ basePath % "/devices")
+ , d(new Private)
+{
+}
+
+GetDevicesJob::~GetDevicesJob() = default;
+
+const QVector<Device>& GetDevicesJob::devices() const
+{
+ return d->devices;
+}
+
+BaseJob::Status GetDevicesJob::parseJson(const QJsonDocument& data)
+{
+ auto json = data.object();
+ d->devices = fromJson<QVector<Device>>(json.value("devices"));
+ return Success;
+}
+
+class GetDeviceJob::Private
+{
+ public:
+ Device data;
+};
+
+QUrl GetDeviceJob::makeRequestUrl(QUrl baseUrl, const QString& deviceId)
+{
+ return BaseJob::makeRequestUrl(std::move(baseUrl),
+ basePath % "/devices/" % deviceId);
+}
+
+GetDeviceJob::GetDeviceJob(const QString& deviceId)
+ : BaseJob(HttpVerb::Get, "GetDeviceJob",
+ basePath % "/devices/" % deviceId)
+ , d(new Private)
+{
+}
+
+GetDeviceJob::~GetDeviceJob() = default;
+
+const Device& GetDeviceJob::data() const
+{
+ return d->data;
+}
+
+BaseJob::Status GetDeviceJob::parseJson(const QJsonDocument& data)
+{
+ auto json = data.object();
+ if (!json.contains("data"))
+ return { JsonParseError,
+ "The key 'data' not found in the response" };
+ d->data = fromJson<Device>(json.value("data"));
+ return Success;
+}
+
+UpdateDeviceJob::UpdateDeviceJob(const QString& deviceId, const QString& displayName)
+ : BaseJob(HttpVerb::Put, "UpdateDeviceJob",
+ basePath % "/devices/" % deviceId)
+{
+ QJsonObject _data;
+ addToJson<IfNotEmpty>(_data, "display_name", displayName);
+ setRequestData(_data);
+}
+
+DeleteDeviceJob::DeleteDeviceJob(const QString& deviceId, const QJsonObject& auth)
+ : BaseJob(HttpVerb::Delete, "DeleteDeviceJob",
+ basePath % "/devices/" % deviceId)
+{
+ QJsonObject _data;
+ addToJson<IfNotEmpty>(_data, "auth", auth);
+ setRequestData(_data);
+}
+
+DeleteDevicesJob::DeleteDevicesJob(const QStringList& devices, const QJsonObject& auth)
+ : BaseJob(HttpVerb::Post, "DeleteDevicesJob",
+ basePath % "/delete_devices")
+{
+ QJsonObject _data;
+ addToJson<>(_data, "devices", devices);
+ addToJson<IfNotEmpty>(_data, "auth", auth);
+ setRequestData(_data);
+}
+
diff --git a/lib/csapi/device_management.h b/lib/csapi/device_management.h
new file mode 100644
index 00000000..f9213d22
--- /dev/null
+++ b/lib/csapi/device_management.h
@@ -0,0 +1,87 @@
+/******************************************************************************
+ * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
+ */
+
+#pragma once
+
+#include "jobs/basejob.h"
+
+#include <QtCore/QJsonObject>
+#include <QtCore/QVector>
+#include "converters.h"
+#include "csapi/definitions/client_device.h"
+
+namespace QMatrixClient
+{
+ // Operations
+
+ class GetDevicesJob : public BaseJob
+ {
+ public:
+ explicit GetDevicesJob();
+
+ /** Construct a URL out of baseUrl and usual parameters passed to
+ * GetDevicesJob. This function can be used when
+ * a URL for GetDevicesJob is necessary but the job
+ * itself isn't.
+ */
+ static QUrl makeRequestUrl(QUrl baseUrl);
+
+ ~GetDevicesJob() override;
+
+ // Result properties
+
+ const QVector<Device>& devices() const;
+
+ protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+ private:
+ class Private;
+ QScopedPointer<Private> d;
+ };
+
+ class GetDeviceJob : public BaseJob
+ {
+ public:
+ explicit GetDeviceJob(const QString& deviceId);
+
+ /** Construct a URL out of baseUrl and usual parameters passed to
+ * GetDeviceJob. This function can be used when
+ * a URL for GetDeviceJob is necessary but the job
+ * itself isn't.
+ */
+ static QUrl makeRequestUrl(QUrl baseUrl, const QString& deviceId);
+
+ ~GetDeviceJob() override;
+
+ // Result properties
+
+ const Device& data() const;
+
+ protected:
+ Status parseJson(const QJsonDocument& data) override;
+
+ private:
+ class Private;
+ QScopedPointer<Private> d;
+ };
+
+ class UpdateDeviceJob : public BaseJob
+ {
+ public:
+ explicit UpdateDeviceJob(const QString& deviceId, const QString& displayName = {});
+ };
+
+ class DeleteDeviceJob : public BaseJob
+ {
+ public:
+ explicit DeleteDeviceJob(const QString& deviceId, const QJsonObject& auth = {});
+ };
+
+ class DeleteDevicesJob : public BaseJob
+ {
+ public:
+ explicit DeleteDevicesJob(const QStringList& devices, const QJsonObject& auth = {});
+ };
+} // namespace QMatrixClient