aboutsummaryrefslogtreecommitdiff
path: root/events/roommemberevent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'events/roommemberevent.cpp')
-rw-r--r--events/roommemberevent.cpp48
1 files changed, 35 insertions, 13 deletions
diff --git a/events/roommemberevent.cpp b/events/roommemberevent.cpp
index 19f116d2..76df5f2e 100644
--- a/events/roommemberevent.cpp
+++ b/events/roommemberevent.cpp
@@ -20,23 +20,45 @@
#include "logging.h"
+#include <array>
+
using namespace QMatrixClient;
-static const auto membershipStrings =
- { "invite", "join", "knock", "leave", "ban" };
+static const std::array<QString, 5> membershipStrings = { {
+ QStringLiteral("invite"), QStringLiteral("join"),
+ QStringLiteral("knock"), QStringLiteral("leave"),
+ QStringLiteral("ban")
+} };
-RoomMemberEvent::RoomMemberEvent(const QJsonObject& obj)
- : RoomEvent(Type::RoomMember, obj), _userId(obj["state_key"].toString())
+namespace QMatrixClient
{
- const auto contentObj = contentJson();
- _displayName = contentObj["displayname"].toString();
- _avatarUrl = contentObj["avatar_url"].toString();
- QString membershipString = contentObj["membership"].toString();
- for (auto it = membershipStrings.begin(); it != membershipStrings.end(); ++it)
- if (membershipString == *it)
+ template <>
+ struct FromJson<MembershipType>
+ {
+ MembershipType operator()(const QJsonValue& jv) const
{
- _membership = MembershipType(it - membershipStrings.begin());
- return;
+ const auto& membershipString = jv.toString();
+ for (auto it = membershipStrings.begin();
+ it != membershipStrings.end(); ++it)
+ if (membershipString == *it)
+ return MembershipType(it - membershipStrings.begin());
+
+ qCWarning(EVENTS) << "Unknown MembershipType: " << membershipString;
+ return MembershipType::Join;
}
- qCWarning(EVENTS) << "Unknown MembershipType: " << membershipString;
+ };
+}
+
+MemberEventContent::MemberEventContent(const QJsonObject& json)
+ : membership(fromJson<MembershipType>(json["membership"]))
+ , displayName(json["displayname"].toString())
+ , avatarUrl(json["avatar_url"].toString())
+{ }
+
+void MemberEventContent::fillJson(QJsonObject* o) const
+{
+ Q_ASSERT(o);
+ o->insert("membership", membershipStrings[membership]);
+ o->insert("displayname", displayName);
+ o->insert("avatar_url", avatarUrl.toString());
}