From 0d4670e094f32ef7dc5d3752b749107b0fb8317c Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 13 Feb 2023 17:39:55 +0100 Subject: Matrix: better reply notification. Only mark as reply if it's a direct reply to you --- src/plugins/Matrix.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp index 04062f3..062d16a 100644 --- a/src/plugins/Matrix.cpp +++ b/src/plugins/Matrix.cpp @@ -826,7 +826,7 @@ namespace QuickMedia { if(message->body_is_formatted) return formatted_text_to_qm_text(matrix, message->body.c_str(), message->body.size(), allow_formatted_text, image_max_size); else - return message->body; + return message->body; // TODO: Remove > <@ formatting? } std::string pantalaimon_url_to_homeserver_url(Matrix *matrix, const std::string &url) { @@ -2657,6 +2657,15 @@ namespace QuickMedia { } bool message_contains_user_mention(Matrix *matrix, const Message *message, const std::string &username, const std::string &user_id) { + if(message->body_is_formatted) { + if(message->body.find("href=\"https://matrix.to/#/" + user_id + "\"") != std::string::npos) + return true; + } else { + const std::string mention_str = "> <" + user_id + ">"; + if(string_starts_with(message->body, mention_str.c_str())) + return true; + } + const std::string formatted_text = message_to_qm_text(matrix, message, false); return message_contains_user_mention(formatted_text, username) || message_contains_user_mention(formatted_text, user_id) || (power_level_is_at_least_admin(message->user->power_level, message->user->room) && message_contains_user_mention(formatted_text, "@room")); } @@ -2725,10 +2734,10 @@ namespace QuickMedia { // 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(message_is_timeline(message.get()) && me && message->timestamp > read_marker_message_timestamp && may_have_unread_notifications) { - message->notification_mentions_me = message_contains_user_mention(message->body, my_display_name) - || message_contains_user_mention(message->body, me->user_id) - || (has_unread_notifications && message_contains_user_mention(message->body, "@room")); // TODO: ... - //|| (power_level_is_at_least_admin(message->user->power_level, room_data) && message_contains_user_mention(message->body, "@room")); + const std::string message_str = message_to_qm_text(this, message.get(), false); + message->notification_mentions_me = message_contains_user_mention(this, message.get(), my_display_name, me->user_id) + || (has_unread_notifications && message_contains_user_mention(message_str, "@room")); // TODO: ... + //|| (power_level_is_at_least_admin(message->user->power_level, room_data) && message_contains_user_mention(message_str, "@room")); } } -- cgit v1.2.3