aboutsummaryrefslogtreecommitdiff
path: root/lib/events
diff options
context:
space:
mode:
Diffstat (limited to 'lib/events')
-rw-r--r--lib/events/encryptedevent.cpp2
-rw-r--r--lib/events/roomkeyevent.cpp11
-rw-r--r--lib/events/roomkeyevent.h25
-rw-r--r--lib/events/roommemberevent.cpp20
-rw-r--r--lib/events/roommemberevent.h3
-rw-r--r--lib/events/roommessageevent.cpp6
-rw-r--r--lib/events/roommessageevent.h4
7 files changed, 67 insertions, 4 deletions
diff --git a/lib/events/encryptedevent.cpp b/lib/events/encryptedevent.cpp
index b5cedc69..dccfa540 100644
--- a/lib/events/encryptedevent.cpp
+++ b/lib/events/encryptedevent.cpp
@@ -28,5 +28,5 @@ EncryptedEvent::EncryptedEvent(QByteArray ciphertext, const QString& senderKey,
EncryptedEvent::EncryptedEvent(const QJsonObject& obj)
: RoomEvent(typeId(), obj)
{
- qCDebug(EVENTS) << "Encrypted event" << id();
+ qCDebug(E2EE) << "Encrypted event from" << senderId();
}
diff --git a/lib/events/roomkeyevent.cpp b/lib/events/roomkeyevent.cpp
new file mode 100644
index 00000000..1fb2e9f5
--- /dev/null
+++ b/lib/events/roomkeyevent.cpp
@@ -0,0 +1,11 @@
+#include "roomkeyevent.h"
+
+using namespace Quotient;
+
+RoomKeyEvent::RoomKeyEvent(const QJsonObject &obj) : Event(typeId(), obj)
+{
+ _algorithm = contentJson()["algorithm"_ls].toString();
+ _roomId = contentJson()["room_id"_ls].toString();
+ _sessionId = contentJson()["session_id"_ls].toString();
+ _sessionKey = contentJson()["session_key"_ls].toString();
+}
diff --git a/lib/events/roomkeyevent.h b/lib/events/roomkeyevent.h
new file mode 100644
index 00000000..e4bcfd71
--- /dev/null
+++ b/lib/events/roomkeyevent.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "event.h"
+
+namespace Quotient {
+class RoomKeyEvent : public Event
+{
+public:
+ DEFINE_EVENT_TYPEID("m.room_key", RoomKeyEvent)
+
+ RoomKeyEvent(const QJsonObject& obj);
+
+ const QString algorithm() const { return _algorithm; }
+ const QString roomId() const { return _roomId; }
+ const QString sessionId() const { return _sessionId; }
+ const QString sessionKey() const { return _sessionKey; }
+
+private:
+ QString _algorithm;
+ QString _roomId;
+ QString _sessionId;
+ QString _sessionKey;
+};
+REGISTER_EVENT_TYPE(RoomKeyEvent)
+} // namespace Quotient
diff --git a/lib/events/roommemberevent.cpp b/lib/events/roommemberevent.cpp
index d4b2be45..35cbdb3a 100644
--- a/lib/events/roommemberevent.cpp
+++ b/lib/events/roommemberevent.cpp
@@ -79,6 +79,12 @@ bool RoomMemberEvent::isInvite() const
return membership() == MembershipType::Invite && changesMembership();
}
+bool RoomMemberEvent::isRejectedInvite() const
+{
+ return membership() == MembershipType::Leave && prevContent()
+ && prevContent()->membership == MembershipType::Invite;
+}
+
bool RoomMemberEvent::isJoin() const
{
return membership() == MembershipType::Join && changesMembership();
@@ -88,7 +94,19 @@ bool RoomMemberEvent::isLeave() const
{
return membership() == MembershipType::Leave && prevContent()
&& prevContent()->membership != membership()
- && prevContent()->membership != MembershipType::Ban;
+ && prevContent()->membership != MembershipType::Ban
+ && prevContent()->membership != MembershipType::Invite;
+}
+
+bool RoomMemberEvent::isBan() const
+{
+ return membership() == MembershipType::Ban && changesMembership();
+}
+
+bool RoomMemberEvent::isUnban() const
+{
+ return membership() == MembershipType::Leave && prevContent()
+ && prevContent()->membership == MembershipType::Ban;
}
bool RoomMemberEvent::isRename() const
diff --git a/lib/events/roommemberevent.h b/lib/events/roommemberevent.h
index 0ca439e1..783b8207 100644
--- a/lib/events/roommemberevent.h
+++ b/lib/events/roommemberevent.h
@@ -88,7 +88,10 @@ public:
QUrl avatarUrl() const { return content().avatarUrl; }
QString reason() const { return content().reason; }
bool changesMembership() const;
+ bool isBan() const;
+ bool isUnban() const;
bool isInvite() const;
+ bool isRejectedInvite() const;
bool isJoin() const;
bool isLeave() const;
bool isRename() const;
diff --git a/lib/events/roommessageevent.cpp b/lib/events/roommessageevent.cpp
index 078ae70a..616a034f 100644
--- a/lib/events/roommessageevent.cpp
+++ b/lib/events/roommessageevent.cpp
@@ -120,9 +120,11 @@ QJsonObject RoomMessageEvent::assembleContentJson(const QString& plainBody,
if (textContent->relatesTo->type == RelatesTo::ReplacementTypeId()) {
auto newContentJson = json.take("m.new_content"_ls).toObject();
newContentJson.insert(BodyKey, plainBody);
- newContentJson.insert(TypeKey, jsonMsgType);
+ newContentJson.insert(MsgTypeKeyL, jsonMsgType);
json.insert(QStringLiteral("m.new_content"), newContentJson);
+ json[MsgTypeKeyL] = jsonMsgType;
json[BodyKeyL] = "* " + plainBody;
+ return json;
}
}
}
@@ -336,7 +338,7 @@ void TextContent::fillJson(QJsonObject* json) const
}
if (relatesTo) {
json->insert(QStringLiteral("m.relates_to"),
- QJsonObject { { relatesTo->type, relatesTo->eventId } });
+ QJsonObject { { "rel_type", relatesTo->type }, { EventIdKey, relatesTo->eventId } });
if (relatesTo->type == RelatesTo::ReplacementTypeId()) {
QJsonObject newContentJson;
if (mimeType.inherits("text/html")) {
diff --git a/lib/events/roommessageevent.h b/lib/events/roommessageevent.h
index ded5e572..2501d097 100644
--- a/lib/events/roommessageevent.h
+++ b/lib/events/roommessageevent.h
@@ -105,6 +105,10 @@ namespace EventContent {
{
return { RelatesTo::ReplyTypeId(), std::move(eventId) };
}
+ inline RelatesTo replacementOf(QString eventId)
+ {
+ return { RelatesTo::ReplacementTypeId(), std::move(eventId) };
+ }
/**
* Rich text content for m.text, m.emote, m.notice