aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/joining.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/csapi/joining.cpp')
-rw-r--r--lib/csapi/joining.cpp145
1 files changed, 30 insertions, 115 deletions
diff --git a/lib/csapi/joining.cpp b/lib/csapi/joining.cpp
index 71781154..cdba95e9 100644
--- a/lib/csapi/joining.cpp
+++ b/lib/csapi/joining.cpp
@@ -4,126 +4,41 @@
#include "joining.h"
-#include "converters.h"
-
-#include <QtCore/QStringBuilder>
-
-using namespace QMatrixClient;
-
-static const auto basePath = QStringLiteral("/_matrix/client/r0");
-
-namespace QMatrixClient
-{
- // Converters
-
- QJsonObject toJson(const JoinRoomByIdJob::ThirdPartySigned& pod)
- {
- QJsonObject jo;
- addParam<>(jo, QStringLiteral("sender"), pod.sender);
- addParam<>(jo, QStringLiteral("mxid"), pod.mxid);
- addParam<>(jo, QStringLiteral("token"), pod.token);
- addParam<>(jo, QStringLiteral("signatures"), pod.signatures);
- return jo;
- }
-} // namespace QMatrixClient
-
-class JoinRoomByIdJob::Private
-{
- public:
- QString roomId;
-};
-
-static const auto JoinRoomByIdJobName = QStringLiteral("JoinRoomByIdJob");
-
-JoinRoomByIdJob::JoinRoomByIdJob(const QString& roomId, const Omittable<ThirdPartySigned>& thirdPartySigned)
- : BaseJob(HttpVerb::Post, JoinRoomByIdJobName,
- basePath % "/rooms/" % roomId % "/join")
- , d(new Private)
-{
- 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" };
- d->roomId = fromJson<QString>(json.value("room_id"_ls));
- return Success;
+using namespace Quotient;
+
+JoinRoomByIdJob::JoinRoomByIdJob(
+ const QString& roomId, const Omittable<ThirdPartySigned>& thirdPartySigned,
+ const QString& reason)
+ : BaseJob(HttpVerb::Post, QStringLiteral("JoinRoomByIdJob"),
+ makePath("/_matrix/client/v3", "/rooms/", roomId, "/join"))
+{
+ QJsonObject _dataJson;
+ addParam<IfNotEmpty>(_dataJson, QStringLiteral("third_party_signed"),
+ thirdPartySigned);
+ addParam<IfNotEmpty>(_dataJson, QStringLiteral("reason"), reason);
+ setRequestData({ _dataJson });
+ addExpectedKey("room_id");
}
-namespace QMatrixClient
-{
- // Converters
-
- QJsonObject toJson(const JoinRoomJob::Signed& pod)
- {
- QJsonObject jo;
- addParam<>(jo, QStringLiteral("sender"), pod.sender);
- addParam<>(jo, QStringLiteral("mxid"), pod.mxid);
- addParam<>(jo, QStringLiteral("token"), pod.token);
- addParam<>(jo, QStringLiteral("signatures"), pod.signatures);
- return jo;
- }
-
- QJsonObject toJson(const JoinRoomJob::ThirdPartySigned& pod)
- {
- QJsonObject jo;
- addParam<>(jo, QStringLiteral("signed"), pod.signedData);
- return jo;
- }
-} // namespace QMatrixClient
-
-class JoinRoomJob::Private
+auto queryToJoinRoom(const QStringList& serverName)
{
- public:
- QString roomId;
-};
-
-BaseJob::Query queryToJoinRoom(const QStringList& serverName)
-{
- BaseJob::Query _q;
+ QUrlQuery _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)
-{
- QJsonObject _data;
- addParam<IfNotEmpty>(_data, QStringLiteral("third_party_signed"), thirdPartySigned);
- setRequestData(_data);
+JoinRoomJob::JoinRoomJob(const QString& roomIdOrAlias,
+ const QStringList& serverName,
+ const Omittable<ThirdPartySigned>& thirdPartySigned,
+ const QString& reason)
+ : BaseJob(HttpVerb::Post, QStringLiteral("JoinRoomJob"),
+ makePath("/_matrix/client/v3", "/join/", roomIdOrAlias),
+ queryToJoinRoom(serverName))
+{
+ QJsonObject _dataJson;
+ addParam<IfNotEmpty>(_dataJson, QStringLiteral("third_party_signed"),
+ thirdPartySigned);
+ addParam<IfNotEmpty>(_dataJson, QStringLiteral("reason"), reason);
+ setRequestData({ _dataJson });
+ 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" };
- d->roomId = fromJson<QString>(json.value("room_id"_ls));
- return Success;
-}
-