Sfoglia il codice sorgente

sync groups on storage change

Signed-off-by: Sumner Evans <sumner@beeper.com>
Sumner Evans 3 anni fa
parent
commit
dc7780a025
3 ha cambiato i file con 27 aggiunte e 0 eliminazioni
  1. 7 0
      mausignald/signald.py
  2. 13 0
      mausignald/types.py
  3. 7 0
      mautrix_signal/signal.py

+ 7 - 0
mausignald/signald.py

@@ -34,6 +34,7 @@ from .types import (
     Quote,
     Reaction,
     SendMessageResponse,
+    StorageChange,
     TrustLevel,
     WebsocketConnectionState,
     WebsocketConnectionStateChangeEvent,
@@ -60,6 +61,7 @@ class SignaldClient(SignaldRPCClient):
         self.add_rpc_handler("ProtocolInvalidMessageError", self._parse_error)
         self.add_rpc_handler("WebSocketConnectionState", self._websocket_connection_state_change)
         self.add_rpc_handler("version", self._log_version)
+        self.add_rpc_handler("StorageChange", self._parse_storage_change)
         self.add_rpc_handler(CONNECT_EVENT, self._resubscribe)
         self.add_rpc_handler(DISCONNECT_EVENT, self._on_disconnect)
 
@@ -86,6 +88,11 @@ class SignaldClient(SignaldRPCClient):
             return
         await self._run_event_handler(ErrorMessage.deserialize(data))
 
+    async def _parse_storage_change(self, data: dict[str, Any]) -> None:
+        if data["type"] != "StorageChange":
+            return
+        await self._run_event_handler(StorageChange.deserialize(data))
+
     async def _parse_message(self, data: dict[str, Any]) -> None:
         event_type = data["type"]
         event_data = data["data"]

+ 13 - 0
mausignald/types.py

@@ -616,6 +616,19 @@ class ErrorMessage(SerializableAttrs):
     account: str
 
 
+@dataclass(kw_only=True)
+class StorageChangeData(SerializableAttrs):
+    version: int
+
+
+@dataclass(kw_only=True)
+class StorageChange(SerializableAttrs):
+    type: str
+    version: str
+    data: StorageChangeData
+    account: str
+
+
 class WebsocketConnectionState(SerializableEnum):
     # States from signald itself
     DISCONNECTED = "DISCONNECTED"

+ 7 - 0
mautrix_signal/signal.py

@@ -29,6 +29,7 @@ from mausignald.types import (
     OwnReadReceipt,
     ReceiptMessage,
     ReceiptType,
+    StorageChange,
     TypingAction,
     TypingMessage,
     WebsocketConnectionStateChangeEvent,
@@ -60,6 +61,7 @@ class SignalHandler(SignaldClient):
         self.error_message_events = {}
         self.add_event_handler(IncomingMessage, self.on_message)
         self.add_event_handler(ErrorMessage, self.on_error_message)
+        self.add_event_handler(StorageChange, self.on_storage_change)
         self.add_event_handler(
             WebsocketConnectionStateChangeEvent, self.on_websocket_connection_state_change
         )
@@ -143,6 +145,11 @@ class SignalHandler(SignaldClient):
             finally:
                 fut.set_result(event_id)
 
+    async def on_storage_change(self, storage_change: StorageChange) -> None:
+        self.log.info("Handling StorageChange %s", str(storage_change))
+        if user := await u.User.get_by_username(storage_change.account):
+            await user.sync()
+
     @staticmethod
     async def on_websocket_connection_state_change(
         evt: WebsocketConnectionStateChangeEvent,