Store thread data on incoming messages

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 |  4 +
2 files changed, 16 insertions(+)

Detailed changes

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

@@ -418,6 +418,18 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
         this.subject = subject;
     }
 
+    public Element getThread() {
+        if (this.payloads == null) return null;
+
+        for (Element el : this.payloads) {
+            if (el.getName().equals("thread") && el.getNamespace().equals("jabber:client")) {
+                return el;
+            }
+        }
+
+        return null;
+    }
+
     public void setMucUser(MucOptions.User user) {
         this.user = new WeakReference<>(user);
     }

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

@@ -610,6 +610,10 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
                 if (el.getName().equals("query") && el.getNamespace().equals("http://jabber.org/protocol/disco#items") && el.getAttribute("node").equals("http://jabber.org/protocol/commands")) {
                     message.addPayload(el);
                 }
+                if (el.getName().equals("thread") && (el.getNamespace() == null || el.getNamespace().equals("jabber:client"))) {
+                    el.setAttribute("xmlns", "jabber:client");
+                    message.addPayload(el);
+                }
             }
             if (conversationMultiMode) {
                 message.setMucUser(conversation.getMucOptions().findUserByFullJid(counterpart));