aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2019-02-09 19:23:00 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2019-02-09 21:15:59 +0900
commitd1cf4bc530613a9d3ee10768dd068a0391f6e105 (patch)
tree115d412adccb617aff576646bed9f7a6f0a03f37 /lib
parentc810b069ab827b1149aeeb9e1f662e5ef85867e5 (diff)
downloadlibquotient-d1cf4bc530613a9d3ee10768dd068a0391f6e105.tar.gz
libquotient-d1cf4bc530613a9d3ee10768dd068a0391f6e105.zip
csapi: GetCapabilitiesJob (MSC1753)
Diffstat (limited to 'lib')
-rw-r--r--lib/csapi/capabilities.cpp78
-rw-r--r--lib/csapi/capabilities.h69
-rw-r--r--lib/csapi/gtad.yaml2
-rw-r--r--lib/util.h3
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`:
diff --git a/lib/util.h b/lib/util.h
index ade6e8c2..420b0984 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -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;