aboutsummaryrefslogtreecommitdiff
path: root/lib/events/roomcanonicalaliasevent.h
diff options
context:
space:
mode:
authorRam Nad <ramnad1999@gmail.com>2020-03-08 02:43:23 +0530
committerRam Nad <ramnad1999@gmail.com>2020-03-08 02:43:23 +0530
commit42bca67768d6f174ecf125563ab28ef79b994e23 (patch)
treed3bf3263a9a8b99f9411dfd4f2e0178518ef1f70 /lib/events/roomcanonicalaliasevent.h
parentd3ca82b9d7477a35e7580f2d6ce579dcbf791d07 (diff)
downloadlibquotient-42bca67768d6f174ecf125563ab28ef79b994e23.tar.gz
libquotient-42bca67768d6f174ecf125563ab28ef79b994e23.zip
fixing msc2432
Diffstat (limited to 'lib/events/roomcanonicalaliasevent.h')
-rw-r--r--lib/events/roomcanonicalaliasevent.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/lib/events/roomcanonicalaliasevent.h b/lib/events/roomcanonicalaliasevent.h
new file mode 100644
index 00000000..3f89f639
--- /dev/null
+++ b/lib/events/roomcanonicalaliasevent.h
@@ -0,0 +1,86 @@
+// Contains code for RoomCanonicalAlias Event
+#pragma once
+
+#include "stateevent.h"
+
+namespace Quotient {
+namespace EventContent{
+ template <typename T1, typename T2>
+ class SimpleDualContent {
+ public:
+ using first_value_type = T1;
+ using second_value_type = T2;
+
+ template <typename TT1, typename TT2>
+ SimpleDualContent(QString Key1Name, TT1&& value1, QString Key2Name,
+ TT2&& value2)
+ : value1(std::forward<TT1>(value1))
+ , value2(std::forward<TT2>(value2))
+ , key1(std::move(Key1Name))
+ , key2(std::move(Key2Name))
+ { }
+
+ SimpleDualContent(const QJsonObject& json, QString key1Name,
+ QString key2Name)
+ : value1(fromJson<T1>(json[key1Name]))
+ , value2(fromJson<T2>(json[key2Name]))
+ , key1(std::move(key1Name))
+ , key2(std::move(key2Name))
+ { }
+
+ QJsonObject toJson() const
+ {
+ return { { key1, Quotient::toJson(value1) },
+ { key2, Quotient::toJson(value2) } };
+ }
+
+ public:
+ T1 value1;
+ T2 value2;
+
+ protected:
+ QString key1;
+ QString key2;
+ };
+} // namespace EventContent
+
+class RoomCanonicalAliasEvent
+ : public StateEvent<EventContent::SimpleDualContent<QString, QStringList>> {
+public:
+ DEFINE_EVENT_TYPEID("m.room.canonical_alias", RoomCanonicalAliasEvent)
+
+ explicit RoomCanonicalAliasEvent(const QJsonObject& obj)
+ : StateEvent(typeId(), obj, QStringLiteral("alias"),
+ QStringLiteral("alt_aliases"))
+ { }
+
+ RoomCanonicalAliasEvent(const QString& server, const QString& alias,
+ const QStringList& alt_aliases)
+ : StateEvent(typeId(), matrixTypeId(), server, QStringLiteral("alias"),
+ alias, QStringLiteral("alt_aliases"), alt_aliases)
+ { }
+
+ // For compatibility used at Room::setCanonicalAlias
+ explicit RoomCanonicalAliasEvent(const QString& value1)
+ : RoomCanonicalAliasEvent(value1, QStringList())
+ { }
+
+ // Because, MSC2432 specifies, that alt_aliases may be present
+ // without aliases as well
+ explicit RoomCanonicalAliasEvent(const QStringList& value2)
+ : RoomCanonicalAliasEvent(QString(), value2)
+ { }
+
+ template <typename T1, typename T2>
+ RoomCanonicalAliasEvent(T1&& value1, T2&& value2)
+ : StateEvent(typeId(), matrixTypeId(), QString(),
+ QStringLiteral("alias"), std::forward<T1>(value1),
+ QStringLiteral("alt_aliases"), std::forward<T2>(value2))
+ { }
+
+ QString alias() const { return content().value1; }
+
+ QStringList alt_aliases() const { return content().value2; }
+};
+REGISTER_EVENT_TYPE(RoomCanonicalAliasEvent)
+} // namespace Quotient \ No newline at end of file