aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Matrix.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-11-22 10:29:58 +0100
committerdec05eba <dec05eba@protonmail.com>2020-11-22 10:29:58 +0100
commit5dd0248e16522a3672c58a7892d549840257e8dd (patch)
tree5c2dc3a8b925627216f28453862413f03644766b /src/plugins/Matrix.cpp
parent4ddc6897dd53274bb68eb6401715c718a212d9ab (diff)
Matrix: add reactions
Diffstat (limited to 'src/plugins/Matrix.cpp')
-rw-r--r--src/plugins/Matrix.cpp37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp
index 6dabad9..e5e4922 100644
--- a/src/plugins/Matrix.cpp
+++ b/src/plugins/Matrix.cpp
@@ -1754,19 +1754,30 @@ namespace QuickMedia {
std::string related_event_id;
const rapidjson::Value &relates_to_json = GetMember(*content_json, "m.relates_to");
if(relates_to_json.IsObject()) {
- const rapidjson::Value &replaces_event_id_json = GetMember(relates_to_json, "event_id");
+ const rapidjson::Value &relates_to_event_id_json = GetMember(relates_to_json, "event_id");
const rapidjson::Value &rel_type_json = GetMember(relates_to_json, "rel_type");
- if(replaces_event_id_json.IsString() && rel_type_json.IsString() && strcmp(rel_type_json.GetString(), "m.replace") == 0) {
- related_event_id = replaces_event_id_json.GetString();
+ const rapidjson::Value &in_reply_to_json = GetMember(relates_to_json, "m.in_reply_to");
+ const rapidjson::Value &key_json = GetMember(relates_to_json, "key");
+ if(relates_to_event_id_json.IsString() && rel_type_json.IsString() && strcmp(rel_type_json.GetString(), "m.replace") == 0) {
+ related_event_id = relates_to_event_id_json.GetString();
related_event_type = RelatedEventType::EDIT;
- } else {
- const rapidjson::Value &in_reply_to_json = GetMember(relates_to_json, "m.in_reply_to");
- if(in_reply_to_json.IsObject()) {
- const rapidjson::Value &in_reply_to_event_id = GetMember(in_reply_to_json, "event_id");
- if(in_reply_to_event_id.IsString()) {
- related_event_id = in_reply_to_event_id.GetString();
- related_event_type = RelatedEventType::REPLY;
- }
+ } else if(in_reply_to_json.IsObject()) {
+ const rapidjson::Value &in_reply_to_event_id = GetMember(in_reply_to_json, "event_id");
+ if(in_reply_to_event_id.IsString()) {
+ related_event_id = in_reply_to_event_id.GetString();
+ related_event_type = RelatedEventType::REPLY;
+ }
+ } else if(relates_to_event_id_json.IsString() && rel_type_json.IsString() && strcmp(rel_type_json.GetString(), "m.annotation") == 0 && key_json.IsString()) {
+ if(strcmp(type_json.GetString(), "m.reaction") == 0) {
+ auto message = std::make_shared<Message>();
+ message->type = MessageType::REACTION;
+ message->user = user;
+ message->event_id = event_id_str;
+ message->body = key_json.GetString();
+ message->related_event_id = relates_to_event_id_json.GetString();
+ message->related_event_type = RelatedEventType::REACTION;
+ message->timestamp = timestamp;
+ return message;
}
}
}
@@ -1799,7 +1810,9 @@ namespace QuickMedia {
}
if(strcmp(type_json.GetString(), "m.room.message") == 0 || strcmp(type_json.GetString(), "m.sticker") == 0) {
-
+ } else if(strcmp(type_json.GetString(), "m.reaction") == 0) {
+ // An old reaction that has been removed. New reactions are removed with m.redact
+ return nullptr;
} else if(strcmp(type_json.GetString(), "m.room.member") == 0) {
std::string user_display_name = room_data->get_user_display_name(user);
std::string sender_display_name = room_data->get_user_display_name(user_sender);