]> www.infradead.org Git - pidgin-chime.git/commitdiff
Only consider active members for mentions
authorMichael Gruenewald <gruenem@amazon.com>
Mon, 12 Feb 2018 15:05:31 +0000 (16:05 +0100)
committerMichael Gruenewald <gruenem@amazon.com>
Sun, 25 Feb 2018 21:42:09 +0000 (22:42 +0100)
Inactive members are effectively not part of the chat anymore and
shouldn't be considered for mentioning. This is especially helpful when
a member changed their profile (e.g., mail, domain, whatnot) but not
their display name.

chat.c

diff --git a/chat.c b/chat.c
index ded11de164401c2b3c6510f97a078321091faac9..30152407b972e77baff6c481c4722bb88e950776 100644 (file)
--- a/chat.c
+++ b/chat.c
@@ -98,17 +98,20 @@ static gchar *parse_outbound_mentions(ChimeRoom *room, const gchar *message)
        replace(&parsed, "@present", "<@present|Present Members>");
        while (members) {
                ChimeRoomMember *member = members->data;
-               const gchar *id = chime_contact_get_profile_id(member->contact);
-               const gchar *display_name = chime_contact_get_display_name(member->contact);
-
-               if (strstr(parsed, display_name)) {
-                       gchar *display_name_escaped = g_regex_escape_string(display_name, -1);
-                       gchar *search = g_strdup_printf("(?<!\\|)\\b%s\\b", display_name_escaped);
-                       g_free(display_name_escaped);
-                       gchar *chime_mention = g_strdup_printf("<@%s|%s>", id, display_name);
-                       replace(&parsed, search, chime_mention);
-                       g_free(search);
-                       g_free(chime_mention);
+
+               if (member->active) {
+                       const gchar *id = chime_contact_get_profile_id(member->contact);
+                       const gchar *display_name = chime_contact_get_display_name(member->contact);
+
+                       if (strstr(parsed, display_name)) {
+                               gchar *display_name_escaped = g_regex_escape_string(display_name, -1);
+                               gchar *search = g_strdup_printf("(?<!\\|)\\b%s\\b", display_name_escaped);
+                               g_free(display_name_escaped);
+                               gchar *chime_mention = g_strdup_printf("<@%s|%s>", id, display_name);
+                               replace(&parsed, search, chime_mention);
+                               g_free(search);
+                               g_free(chime_mention);
+                       }
                }
 
                members = g_list_remove(members, member);