diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2019-02-09 19:23:00 +0900 |
---|---|---|
committer | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2019-02-09 21:15:59 +0900 |
commit | d1cf4bc530613a9d3ee10768dd068a0391f6e105 (patch) | |
tree | 115d412adccb617aff576646bed9f7a6f0a03f37 /lib | |
parent | c810b069ab827b1149aeeb9e1f662e5ef85867e5 (diff) | |
download | libquotient-d1cf4bc530613a9d3ee10768dd068a0391f6e105.tar.gz libquotient-d1cf4bc530613a9d3ee10768dd068a0391f6e105.zip |
csapi: GetCapabilitiesJob (MSC1753)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/csapi/capabilities.cpp | 78 | ||||
-rw-r--r-- | lib/csapi/capabilities.h | 69 | ||||
-rw-r--r-- | lib/csapi/gtad.yaml | 2 | ||||
-rw-r--r-- | lib/util.h | 3 |
4 files changed, 152 insertions, 0 deletions
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 <QtCore/QStringBuilder> + +using namespace QMatrixClient; + +static const auto basePath = QStringLiteral("/_matrix/client/r0"); + +namespace QMatrixClient +{ + // Converters + + template <> struct JsonObjectConverter<GetCapabilitiesJob::ChangePasswordCapability> + { + static void fillFrom(const QJsonObject& jo, GetCapabilitiesJob::ChangePasswordCapability& result) + { + fromJson(jo.value("enabled"_ls), result.enabled); + } + }; + + template <> struct JsonObjectConverter<GetCapabilitiesJob::RoomVersionsCapability> + { + 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<ChangePasswordCapability> changePassword; + Omittable<RoomVersionsCapability> 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::ChangePasswordCapability>& GetCapabilitiesJob::changePassword() const +{ + return d->changePassword; +} + +const Omittable<GetCapabilitiesJob::RoomVersionsCapability>& 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 <QtCore/QHash> + +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<QString, QString> 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<ChangePasswordCapability>& changePassword() const; + /// The room versions the server supports. + const Omittable<RoomVersionsCapability>& roomVersions() const; + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer<Private> 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`: @@ -103,6 +103,9 @@ namespace QMatrixClient } Omittable<T>& operator=(value_type&& val) { + // For some reason GCC complains about -Wmaybe-uninitialized + // in the context of using Omittable<bool> with converters.h; + // though the logic looks very much benign (GCC bug???) _value = std::move(val); _omitted = false; return *this; |