From 9a8e2e5c383713f471d5a0f977fbef07a5fc4738 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 21 Oct 2020 06:39:32 +0200 Subject: Matrix: dont count edit/redacts as new unread messages in a room, update local read marker --- src/plugins/Matrix.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/plugins/Matrix.cpp') diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp index 7de8af9..b6f6f76 100644 --- a/src/plugins/Matrix.cpp +++ b/src/plugins/Matrix.cpp @@ -481,14 +481,17 @@ namespace QuickMedia { room_data->append_messages(new_messages); } - std::shared_ptr read_marker_message; - if(me) - read_marker_message = room_data->get_message_by_id(room_data->get_user_read_marker(me)); + time_t read_marker_message_timestamp = 0; + if(me) { + auto read_marker_message = room_data->get_message_by_id(room_data->get_user_read_marker(me)); + if(read_marker_message) + read_marker_message_timestamp = read_marker_message->timestamp; + } for(auto &message : new_messages) { // TODO: Is @room ok? shouldn't we also check if the user has permission to do @room? (only when notifications are limited to @mentions) // TODO: Is comparing against read marker timestamp ok enough? - if(has_unread_notifications && me && (!read_marker_message || read_marker_message->timestamp < message->timestamp)) + if(has_unread_notifications && me && message->timestamp > read_marker_message_timestamp) message->mentions_me = message_contains_user_mention(message->body, me->display_name) || message_contains_user_mention(message->body, me->user_id) || message_contains_user_mention(message->body, "@room"); } } @@ -1609,6 +1612,9 @@ namespace QuickMedia { if(download_to_string(homeserver + "/_matrix/client/r0/rooms/" + room->id + "/read_markers", server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK) return PluginResult::NET_ERR; + auto me = get_me(room); + if(me) + room->set_user_read_marker(me, message->event_id); return PluginResult::OK; } -- cgit v1.2.3