From 907865f71aed9c51565bb3ed229e791757874a61 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Fri, 8 Jun 2018 12:59:18 +0900 Subject: csapi: add jobs from rooms.yaml Getting a single event (/events), getting the full room state as well as with a specific type/key (/state), getting the list of room members (/members and /joined_members). --- lib/csapi/rooms.cpp | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/csapi/rooms.h | 183 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 427 insertions(+) create mode 100644 lib/csapi/rooms.cpp create mode 100644 lib/csapi/rooms.h (limited to 'lib/csapi') diff --git a/lib/csapi/rooms.cpp b/lib/csapi/rooms.cpp new file mode 100644 index 00000000..4b66b447 --- /dev/null +++ b/lib/csapi/rooms.cpp @@ -0,0 +1,244 @@ +/****************************************************************************** + * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN + */ + +#include "rooms.h" + +#include "converters.h" + +#include + +using namespace QMatrixClient; + +static const auto basePath = QStringLiteral("/_matrix/client/r0"); + +class GetOneRoomEventJob::Private +{ + public: + EventPtr data; +}; + +QUrl GetOneRoomEventJob::makeRequestUrl(QUrl baseUrl, const QString& roomId, const QString& eventId) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/rooms/" % roomId % "/event/" % eventId); +} + +GetOneRoomEventJob::GetOneRoomEventJob(const QString& roomId, const QString& eventId) + : BaseJob(HttpVerb::Get, "GetOneRoomEventJob", + basePath % "/rooms/" % roomId % "/event/" % eventId) + , d(new Private) +{ +} + +GetOneRoomEventJob::~GetOneRoomEventJob() = default; + +EventPtr&& GetOneRoomEventJob::data() +{ + return std::move(d->data); +} + +BaseJob::Status GetOneRoomEventJob::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(json.value("data")); + return Success; +} + +class GetRoomStateWithKeyJob::Private +{ + public: + StateEventPtr data; +}; + +QUrl GetRoomStateWithKeyJob::makeRequestUrl(QUrl baseUrl, const QString& roomId, const QString& eventType, const QString& stateKey) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/rooms/" % roomId % "/state/" % eventType % "/" % stateKey); +} + +GetRoomStateWithKeyJob::GetRoomStateWithKeyJob(const QString& roomId, const QString& eventType, const QString& stateKey) + : BaseJob(HttpVerb::Get, "GetRoomStateWithKeyJob", + basePath % "/rooms/" % roomId % "/state/" % eventType % "/" % stateKey) + , d(new Private) +{ +} + +GetRoomStateWithKeyJob::~GetRoomStateWithKeyJob() = default; + +StateEventPtr&& GetRoomStateWithKeyJob::data() +{ + return std::move(d->data); +} + +BaseJob::Status GetRoomStateWithKeyJob::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(json.value("data")); + return Success; +} + +class GetRoomStateByTypeJob::Private +{ + public: + StateEventPtr data; +}; + +QUrl GetRoomStateByTypeJob::makeRequestUrl(QUrl baseUrl, const QString& roomId, const QString& eventType) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/rooms/" % roomId % "/state/" % eventType); +} + +GetRoomStateByTypeJob::GetRoomStateByTypeJob(const QString& roomId, const QString& eventType) + : BaseJob(HttpVerb::Get, "GetRoomStateByTypeJob", + basePath % "/rooms/" % roomId % "/state/" % eventType) + , d(new Private) +{ +} + +GetRoomStateByTypeJob::~GetRoomStateByTypeJob() = default; + +StateEventPtr&& GetRoomStateByTypeJob::data() +{ + return std::move(d->data); +} + +BaseJob::Status GetRoomStateByTypeJob::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(json.value("data")); + return Success; +} + +class GetRoomStateJob::Private +{ + public: + StateEvents data; +}; + +QUrl GetRoomStateJob::makeRequestUrl(QUrl baseUrl, const QString& roomId) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/rooms/" % roomId % "/state"); +} + +GetRoomStateJob::GetRoomStateJob(const QString& roomId) + : BaseJob(HttpVerb::Get, "GetRoomStateJob", + basePath % "/rooms/" % roomId % "/state") + , d(new Private) +{ +} + +GetRoomStateJob::~GetRoomStateJob() = default; + +StateEvents&& GetRoomStateJob::data() +{ + return std::move(d->data); +} + +BaseJob::Status GetRoomStateJob::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(json.value("data")); + return Success; +} + +class GetMembersByRoomJob::Private +{ + public: + EventsArray chunk; +}; + +QUrl GetMembersByRoomJob::makeRequestUrl(QUrl baseUrl, const QString& roomId) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/rooms/" % roomId % "/members"); +} + +GetMembersByRoomJob::GetMembersByRoomJob(const QString& roomId) + : BaseJob(HttpVerb::Get, "GetMembersByRoomJob", + basePath % "/rooms/" % roomId % "/members") + , d(new Private) +{ +} + +GetMembersByRoomJob::~GetMembersByRoomJob() = default; + +EventsArray&& GetMembersByRoomJob::chunk() +{ + return std::move(d->chunk); +} + +BaseJob::Status GetMembersByRoomJob::parseJson(const QJsonDocument& data) +{ + auto json = data.object(); + d->chunk = fromJson>(json.value("chunk")); + return Success; +} + +namespace QMatrixClient +{ + // Converters + + template <> struct FromJson + { + GetJoinedMembersByRoomJob::RoomMember operator()(const QJsonValue& jv) + { + const auto& _json = jv.toObject(); + GetJoinedMembersByRoomJob::RoomMember result; + result.displayName = + fromJson(_json.value("display_name")); + result.avatarUrl = + fromJson(_json.value("avatar_url")); + + return result; + } + }; +} // namespace QMatrixClient + +class GetJoinedMembersByRoomJob::Private +{ + public: + QHash joined; +}; + +QUrl GetJoinedMembersByRoomJob::makeRequestUrl(QUrl baseUrl, const QString& roomId) +{ + return BaseJob::makeRequestUrl(std::move(baseUrl), + basePath % "/rooms/" % roomId % "/joined_members"); +} + +GetJoinedMembersByRoomJob::GetJoinedMembersByRoomJob(const QString& roomId) + : BaseJob(HttpVerb::Get, "GetJoinedMembersByRoomJob", + basePath % "/rooms/" % roomId % "/joined_members") + , d(new Private) +{ +} + +GetJoinedMembersByRoomJob::~GetJoinedMembersByRoomJob() = default; + +const QHash& GetJoinedMembersByRoomJob::joined() const +{ + return d->joined; +} + +BaseJob::Status GetJoinedMembersByRoomJob::parseJson(const QJsonDocument& data) +{ + auto json = data.object(); + d->joined = fromJson>(json.value("joined")); + return Success; +} + diff --git a/lib/csapi/rooms.h b/lib/csapi/rooms.h new file mode 100644 index 00000000..459c6ad5 --- /dev/null +++ b/lib/csapi/rooms.h @@ -0,0 +1,183 @@ +/****************************************************************************** + * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN + */ + +#pragma once + +#include "jobs/basejob.h" + +#include "events/event.h" +#include "events/roommemberevent.h" +#include +#include "converters.h" + +namespace QMatrixClient +{ + // Operations + + class GetOneRoomEventJob : public BaseJob + { + public: + explicit GetOneRoomEventJob(const QString& roomId, const QString& eventId); + + /** Construct a URL out of baseUrl and usual parameters passed to + * GetOneRoomEventJob. This function can be used when + * a URL for GetOneRoomEventJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& roomId, const QString& eventId); + + ~GetOneRoomEventJob() override; + + // Result properties + + EventPtr&& data(); + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; + + class GetRoomStateWithKeyJob : public BaseJob + { + public: + explicit GetRoomStateWithKeyJob(const QString& roomId, const QString& eventType, const QString& stateKey); + + /** Construct a URL out of baseUrl and usual parameters passed to + * GetRoomStateWithKeyJob. This function can be used when + * a URL for GetRoomStateWithKeyJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& roomId, const QString& eventType, const QString& stateKey); + + ~GetRoomStateWithKeyJob() override; + + // Result properties + + StateEventPtr&& data(); + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; + + class GetRoomStateByTypeJob : public BaseJob + { + public: + explicit GetRoomStateByTypeJob(const QString& roomId, const QString& eventType); + + /** Construct a URL out of baseUrl and usual parameters passed to + * GetRoomStateByTypeJob. This function can be used when + * a URL for GetRoomStateByTypeJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& roomId, const QString& eventType); + + ~GetRoomStateByTypeJob() override; + + // Result properties + + StateEventPtr&& data(); + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; + + class GetRoomStateJob : public BaseJob + { + public: + explicit GetRoomStateJob(const QString& roomId); + + /** Construct a URL out of baseUrl and usual parameters passed to + * GetRoomStateJob. This function can be used when + * a URL for GetRoomStateJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& roomId); + + ~GetRoomStateJob() override; + + // Result properties + + StateEvents&& data(); + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; + + class GetMembersByRoomJob : public BaseJob + { + public: + explicit GetMembersByRoomJob(const QString& roomId); + + /** Construct a URL out of baseUrl and usual parameters passed to + * GetMembersByRoomJob. This function can be used when + * a URL for GetMembersByRoomJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& roomId); + + ~GetMembersByRoomJob() override; + + // Result properties + + EventsArray&& chunk(); + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; + + class GetJoinedMembersByRoomJob : public BaseJob + { + public: + // Inner data structures + + struct RoomMember + { + QString displayName; + QString avatarUrl; + }; + + // Construction/destruction + + explicit GetJoinedMembersByRoomJob(const QString& roomId); + + /** Construct a URL out of baseUrl and usual parameters passed to + * GetJoinedMembersByRoomJob. This function can be used when + * a URL for GetJoinedMembersByRoomJob is necessary but the job + * itself isn't. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& roomId); + + ~GetJoinedMembersByRoomJob() override; + + // Result properties + + const QHash& joined() const; + + protected: + Status parseJson(const QJsonDocument& data) override; + + private: + class Private; + QScopedPointer d; + }; +} // namespace QMatrixClient -- cgit v1.2.3