From d1cf4bc530613a9d3ee10768dd068a0391f6e105 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sat, 9 Feb 2019 19:23:00 +0900 Subject: csapi: GetCapabilitiesJob (MSC1753) --- lib/csapi/capabilities.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++ lib/csapi/capabilities.h | 69 ++++++++++++++++++++++++++++++++++++++++ lib/csapi/gtad.yaml | 2 ++ 3 files changed, 149 insertions(+) create mode 100644 lib/csapi/capabilities.cpp create mode 100644 lib/csapi/capabilities.h (limited to 'lib/csapi') diff --git a/lib/csapi/capabilities.cpp b/lib/csapi/capabilities.cpp new file mode 100644 index 00000000..a8e79f6b --- /dev/null +++ b/lib/csapi/capabilities.cpp @@ -0,0 +1,78 @@ +/****************************************************************************** + * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN + */ + +#include "capabilities.h" + +#include "converters.h" + +#include + +using namespace QMatrixClient; + +static const auto basePath = QStringLiteral("/_matrix/client/r0"); + +namespace QMatrixClient +{ + // Converters + + template <> struct JsonObjectConverter + { + static void fillFrom(const QJsonObject& jo, GetCapabilitiesJob::ChangePasswordCapability& result) + { + fromJson(jo.value("enabled"_ls), result.enabled); + } + }; + + template <> struct JsonObjectConverter + { + static void fillFrom(const QJsonObject& jo, GetCapabilitiesJob::RoomVersionsCapability& result) + { + fromJson(jo.value("default"_ls), result.isDefault); + fromJson(jo.value("available"_ls), result.available); + } + }; +} // namespace QMatrixClient + +class GetCapabilitiesJob::Private +{ + public: + Omittable changePassword; + Omittable roomVersions; +}; + +QUrl GetCapabilitiesJob::makeRequestUrl(QUrl baseUrl) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/capabilities"); +} + +static const auto GetCapabilitiesJobName = QStringLiteral("GetCapabilitiesJob"); + +GetCapabilitiesJob::GetCapabilitiesJob() + : BaseJob(HttpVerb::Get, GetCapabilitiesJobName, + basePath % "/capabilities") + , d(new Private) +{ +} + +GetCapabilitiesJob::~GetCapabilitiesJob() = default; + +const Omittable& GetCapabilitiesJob::changePassword() const +{ + return d->changePassword; +} + +const Omittable& GetCapabilitiesJob::roomVersions() const +{ + return d->roomVersions; +} + +BaseJob::Status GetCapabilitiesJob::parseJson(const QJsonDocument& data) +{ + auto json = data.object(); + fromJson(json.value("m.change_password"_ls), d->changePassword); + fromJson(json.value("m.room_versions"_ls), d->roomVersions); + return Success; +} + diff --git a/lib/csapi/capabilities.h b/lib/csapi/capabilities.h new file mode 100644 index 00000000..e38483bc --- /dev/null +++ b/lib/csapi/capabilities.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN + */ + +#pragma once + +#include "jobs/basejob.h" + +#include "converters.h" +#include + +namespace QMatrixClient +{ + // Operations + + /// Gets information about the server's capabilities. + /// + /// Gets information about the server's supported feature set + /// and other relevant capabilities. + class GetCapabilitiesJob : public BaseJob + { + public: + // Inner data structures + + /// Capability to indicate if the user can change their password. + struct ChangePasswordCapability + { + /// True if the user can change their password, false otherwise. + bool enabled; + }; + + /// The room versions the server supports. + struct RoomVersionsCapability + { + /// The default room version the server is using for new rooms. + QString isDefault; + /// A detailed description of the room versions the server supports. + QHash available; + }; + + // Construction/destruction + + explicit GetCapabilitiesJob(); + + /*! Construct a URL without creating a full-fledged job object + * + * This function can be used when a URL for + * GetCapabilitiesJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl); + + ~GetCapabilitiesJob() override; + + // Result properties + + /// Capability to indicate if the user can change their password. + const Omittable& changePassword() const; + /// The room versions the server supports. + const Omittable& roomVersions() const; + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; +} // namespace QMatrixClient diff --git a/lib/csapi/gtad.yaml b/lib/csapi/gtad.yaml index c6ea8a13..21a59a5c 100644 --- a/lib/csapi/gtad.yaml +++ b/lib/csapi/gtad.yaml @@ -11,6 +11,8 @@ analyzer: m.upload.size: uploadSize m.homeserver: homeserver m.identity_server: identityServer + m.change_password: changePassword + m.room_versions: roomVersions AuthenticationData/additionalProperties: authInfo # Structure inside `types`: -- cgit v1.2.3