فهرست منبع

Add command and API to request sync from signal

Tulir Asokan 2 سال پیش
والد
کامیت
36251bf3eb
3فایلهای تغییر یافته به همراه34 افزوده شده و 1 حذف شده
  1. 17 0
      mausignald/signald.py
  2. 11 1
      mautrix_signal/commands/signal.py
  3. 6 0
      mautrix_signal/web/provisioning_api.py

+ 17 - 0
mausignald/signald.py

@@ -346,6 +346,23 @@ class SignaldClient(SignaldRPCClient):
     async def remove_linked_device(self, username: str, device_id: int) -> None:
         await self.request_v1("remove_linked_device", account=username, deviceId=device_id)
 
+    async def request_sync(
+        self,
+        username: str,
+        blocked: bool = True,
+        configuration: bool = True,
+        contacts: bool = True,
+        groups: bool = True,
+    ) -> None:
+        await self.request_v1(
+            "request_sync",
+            account=username,
+            blocked=blocked,
+            configuration=configuration,
+            contacts=contacts,
+            groups=groups,
+        )
+
     async def list_contacts(self, username: str, use_cache: bool = False) -> list[Profile]:
         kwargs = {"async": use_cache}
         resp = await self.request_v1("list_contacts", account=username, **kwargs)

+ 11 - 1
mautrix_signal/commands/signal.py

@@ -257,13 +257,23 @@ async def mark_trusted(evt: CommandEvent) -> EventID:
     needs_admin=False,
     needs_auth=True,
     help_section=SECTION_SIGNAL,
-    help_text="Sync data from Signal",
+    help_text="Sync data from signald",
 )
 async def sync(evt: CommandEvent) -> None:
     await evt.sender.sync()
     await evt.reply("Sync complete")
 
 
+@command_handler(
+    needs_admin=False,
+    needs_auth=True,
+    help_section=SECTION_SIGNAL,
+    help_text="Request your phone to re-send data like contacts and group info",
+)
+async def request_sync(evt: CommandEvent) -> None:
+    await evt.bridge.signal.request_sync(evt.sender.username)
+
+
 @command_handler(
     needs_admin=True,
     needs_auth=False,

+ 6 - 0
mautrix_signal/web/provisioning_api.py

@@ -85,6 +85,7 @@ class ProvisioningAPI:
 
         # Start new chat API
         self.app.router.add_get("/v2/contacts", self.list_contacts)
+        self.app.router.add_get("/v2/sync", self.request_sync)
         self.app.router.add_get("/v2/resolve_identifier/{number}", self.resolve_identifier)
         self.app.router.add_post("/v2/pm/{number}", self.start_pm)
 
@@ -395,6 +396,11 @@ class ProvisioningAPI:
             headers=self._acao_headers,
         )
 
+    async def request_sync(self, request: web.Request) -> web.Response:
+        user = await self.check_token_and_logged_in(request)
+        await self.bridge.signal.request_sync(user.username)
+        return web.json_response({}, headers=self._acao_headers)
+
     async def _resolve_identifier(self, number: str, user: u.User) -> pu.Puppet:
         try:
             number = normalize_number(number)