Notify on attention messages from MUC member or higher

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/entities/Message.java             | 12 
src/main/java/eu/siacs/conversations/parser/MessageParser.java         |  3 
src/main/java/eu/siacs/conversations/services/NotificationService.java |  6 
3 files changed, 21 insertions(+)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Message.java 🔗

@@ -449,6 +449,18 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
         return null;
     }
 
+    public boolean isAttention() {
+        if (this.payloads == null) return false;
+
+        for (Element el : this.payloads) {
+            if (el.getName().equals("attention") && el.getNamespace().equals("urn:xmpp:attention:0")) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     public String getConversationUuid() {
         return conversationUuid;
     }

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -671,6 +671,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
                 if (el.getName().equals("reply") && el.getNamespace() != null && el.getNamespace().equals("urn:xmpp:reply:0")) {
                     message.addPayload(el);
                 }
+                if (el.getName().equals("attention") && el.getNamespace() != null && el.getNamespace().equals("urn:xmpp:attention:0")) {
+                    message.addPayload(el);
+                }
             }
             if (conversationMultiMode) {
                 message.setMucUser(conversation.getMucOptions().findUserByFullJid(counterpart));

src/main/java/eu/siacs/conversations/services/NotificationService.java 🔗

@@ -72,6 +72,7 @@ import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Conversational;
 import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.entities.MucOptions;
 import eu.siacs.conversations.persistance.FileBackend;
 import eu.siacs.conversations.ui.ConversationsActivity;
 import eu.siacs.conversations.ui.EditAccountActivity;
@@ -1744,6 +1745,11 @@ public class NotificationService {
     private boolean wasHighlightedOrPrivate(final Message message) {
         if (message.getConversation() instanceof Conversation) {
             Conversation conversation = (Conversation) message.getConversation();
+            final MucOptions.User sender = conversation.getMucOptions().findUserByFullJid(message.getCounterpart());
+            if (sender != null && sender.getAffiliation().ranks(MucOptions.Affiliation.MEMBER) && message.isAttention()) {
+                return true;
+            }
+
             final String nick = conversation.getMucOptions().getActualNick();
             final Pattern highlight = generateNickHighlightPattern(nick);
             if (message.getBody() == null || nick == null) {