Browse Source

Parse thread remove events properly

Tulir Asokan 2 years ago
parent
commit
bbe4bfb9d0
3 changed files with 29 additions and 7 deletions
  1. 19 7
      mauigpapi/mqtt/conn.py
  2. 1 0
      mauigpapi/types/__init__.py
  3. 9 0
      mauigpapi/types/mqtt.py

+ 19 - 7
mauigpapi/mqtt/conn.py

@@ -23,7 +23,6 @@ import json
 import logging
 import re
 import time
-import urllib.request
 import zlib
 
 from yarl import URL
@@ -57,6 +56,7 @@ from ..types import (
     RealtimeZeroProvisionPayload,
     ThreadAction,
     ThreadItemType,
+    ThreadRemoveEvent,
     ThreadSyncEvent,
     TypingStatus,
 )
@@ -370,12 +370,24 @@ class AndroidMQTT:
             message = MessageSyncMessage.deserialize(raw_message)
             evt = MessageSyncEvent(iris=parsed_item, message=message)
         elif part.path.startswith("/direct_v2/inbox/threads/"):
-            raw_message = {
-                "path": part.path,
-                "op": part.op,
-                **json.loads(part.value),
-            }
-            evt = ThreadSyncEvent.deserialize(raw_message)
+            if part.op == Operation.REMOVE:
+                blank, direct_v2, inbox, threads, thread_id, *_ = part.path.split("/")
+                evt = ThreadRemoveEvent.deserialize(
+                    {
+                        "thread_id": thread_id,
+                        "path": part.path,
+                        "op": part.op,
+                        **json.loads(part.value),
+                    }
+                )
+            else:
+                evt = ThreadSyncEvent.deserialize(
+                    {
+                        "path": part.path,
+                        "op": part.op,
+                        **json.loads(part.value),
+                    }
+                )
         else:
             self.log.warning(f"Unsupported path {part.path}")
             return False

+ 1 - 0
mauigpapi/types/__init__.py

@@ -57,6 +57,7 @@ from .mqtt import (
     RealtimeDirectEvent,
     RealtimeZeroProvisionPayload,
     ThreadAction,
+    ThreadRemoveEvent,
     ThreadSyncEvent,
     TypingStatus,
     ZeroProductProvisioningEvent,

+ 9 - 0
mauigpapi/types/mqtt.py

@@ -126,6 +126,15 @@ class ThreadSyncEvent(Thread, SerializableAttrs):
     op: Operation
 
 
+@dataclass
+class ThreadRemoveEvent(SerializableAttrs):
+    thread_id: str
+
+    path: str
+    op: Operation
+    data: Any
+
+
 @dataclass(kw_only=True)
 class PubsubPublishMetadata(SerializableAttrs):
     publish_time_ms: str