diff options
Diffstat (limited to 'lib/csapi/joining.cpp')
-rw-r--r-- | lib/csapi/joining.cpp | 130 |
1 files changed, 20 insertions, 110 deletions
diff --git a/lib/csapi/joining.cpp b/lib/csapi/joining.cpp index 00d930fa..4761e949 100644 --- a/lib/csapi/joining.cpp +++ b/lib/csapi/joining.cpp @@ -4,129 +4,39 @@ #include "joining.h" -#include "converters.h" - #include <QtCore/QStringBuilder> -using namespace QMatrixClient; - -static const auto basePath = QStringLiteral("/_matrix/client/r0"); - -namespace QMatrixClient -{ - // Converters - - template <> struct JsonObjectConverter<JoinRoomByIdJob::ThirdPartySigned> - { - static void dumpTo(QJsonObject& jo, const JoinRoomByIdJob::ThirdPartySigned& pod) - { - addParam<>(jo, QStringLiteral("sender"), pod.sender); - addParam<>(jo, QStringLiteral("mxid"), pod.mxid); - addParam<>(jo, QStringLiteral("token"), pod.token); - addParam<>(jo, QStringLiteral("signatures"), pod.signatures); - } - }; -} // namespace QMatrixClient - -class JoinRoomByIdJob::Private -{ - public: - QString roomId; -}; - -static const auto JoinRoomByIdJobName = QStringLiteral("JoinRoomByIdJob"); +using namespace Quotient; -JoinRoomByIdJob::JoinRoomByIdJob(const QString& roomId, const Omittable<ThirdPartySigned>& thirdPartySigned) - : BaseJob(HttpVerb::Post, JoinRoomByIdJobName, - basePath % "/rooms/" % roomId % "/join") - , d(new Private) +JoinRoomByIdJob::JoinRoomByIdJob( + const QString& roomId, const Omittable<ThirdPartySigned>& thirdPartySigned) + : BaseJob(HttpVerb::Post, QStringLiteral("JoinRoomByIdJob"), + QStringLiteral("/_matrix/client/r0") % "/rooms/" % roomId % "/join") { QJsonObject _data; - addParam<IfNotEmpty>(_data, QStringLiteral("third_party_signed"), thirdPartySigned); - setRequestData(_data); -} - -JoinRoomByIdJob::~JoinRoomByIdJob() = default; - -const QString& JoinRoomByIdJob::roomId() const -{ - return d->roomId; -} - -BaseJob::Status JoinRoomByIdJob::parseJson(const QJsonDocument& data) -{ - auto json = data.object(); - if (!json.contains("room_id"_ls)) - return { JsonParseError, - "The key 'room_id' not found in the response" }; - fromJson(json.value("room_id"_ls), d->roomId); - return Success; + addParam<IfNotEmpty>(_data, QStringLiteral("third_party_signed"), + thirdPartySigned); + setRequestData(std::move(_data)); + addExpectedKey("room_id"); } -namespace QMatrixClient -{ - // Converters - - template <> struct JsonObjectConverter<JoinRoomJob::Signed> - { - static void dumpTo(QJsonObject& jo, const JoinRoomJob::Signed& pod) - { - addParam<>(jo, QStringLiteral("sender"), pod.sender); - addParam<>(jo, QStringLiteral("mxid"), pod.mxid); - addParam<>(jo, QStringLiteral("token"), pod.token); - addParam<>(jo, QStringLiteral("signatures"), pod.signatures); - } - }; - - template <> struct JsonObjectConverter<JoinRoomJob::ThirdPartySigned> - { - static void dumpTo(QJsonObject& jo, const JoinRoomJob::ThirdPartySigned& pod) - { - addParam<>(jo, QStringLiteral("signed"), pod.signedData); - } - }; -} // namespace QMatrixClient - -class JoinRoomJob::Private -{ - public: - QString roomId; -}; - -BaseJob::Query queryToJoinRoom(const QStringList& serverName) +auto queryToJoinRoom(const QStringList& serverName) { BaseJob::Query _q; addParam<IfNotEmpty>(_q, QStringLiteral("server_name"), serverName); return _q; } -static const auto JoinRoomJobName = QStringLiteral("JoinRoomJob"); - -JoinRoomJob::JoinRoomJob(const QString& roomIdOrAlias, const QStringList& serverName, const Omittable<ThirdPartySigned>& thirdPartySigned) - : BaseJob(HttpVerb::Post, JoinRoomJobName, - basePath % "/join/" % roomIdOrAlias, - queryToJoinRoom(serverName)) - , d(new Private) +JoinRoomJob::JoinRoomJob(const QString& roomIdOrAlias, + const QStringList& serverName, + const Omittable<ThirdPartySigned>& thirdPartySigned) + : BaseJob(HttpVerb::Post, QStringLiteral("JoinRoomJob"), + QStringLiteral("/_matrix/client/r0") % "/join/" % roomIdOrAlias, + queryToJoinRoom(serverName)) { QJsonObject _data; - addParam<IfNotEmpty>(_data, QStringLiteral("third_party_signed"), thirdPartySigned); - setRequestData(_data); + addParam<IfNotEmpty>(_data, QStringLiteral("third_party_signed"), + thirdPartySigned); + setRequestData(std::move(_data)); + addExpectedKey("room_id"); } - -JoinRoomJob::~JoinRoomJob() = default; - -const QString& JoinRoomJob::roomId() const -{ - return d->roomId; -} - -BaseJob::Status JoinRoomJob::parseJson(const QJsonDocument& data) -{ - auto json = data.object(); - if (!json.contains("room_id"_ls)) - return { JsonParseError, - "The key 'room_id' not found in the response" }; - fromJson(json.value("room_id"_ls), d->roomId); - return Success; -} - |