diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-06-08 17:03:41 +0900 |
---|---|---|
committer | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-06-08 17:03:41 +0900 |
commit | b28e2d697842f58e2994ead62635b31f48162cdc (patch) | |
tree | 79e4ea713835e19d591c4c4b32d2997139a1ef01 /lib | |
parent | 318e094e19bc8ecfe89031e4c62a8cd14d307157 (diff) | |
download | libquotient-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.cpp | 34 | ||||
-rw-r--r-- | lib/csapi/definitions/client_device.h | 31 | ||||
-rw-r--r-- | lib/csapi/device_management.cpp | 111 | ||||
-rw-r--r-- | lib/csapi/device_management.h | 87 |
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 |