Browse Source

provisioning/contacts: send avatar URL

Sumner Evans 3 years ago
parent
commit
2f4d5ccd6a
1 changed files with 14 additions and 6 deletions
  1. 14 6
      mautrix_signal/web/provisioning_api.py

+ 14 - 6
mautrix_signal/web/provisioning_api.py

@@ -28,8 +28,8 @@ from mausignald.errors import (
     TimeoutException,
     UnregisteredUserError,
 )
-from mausignald.types import Account, Address
-from mautrix.types import UserID
+from mausignald.types import Account, Address, Profile
+from mautrix.types import JSON, UserID
 from mautrix.util.logging import TraceLogger
 
 from .. import portal as po, puppet as pu, user as u
@@ -371,12 +371,20 @@ class ProvisioningAPI:
     async def list_contacts(self, request: web.Request) -> web.Response:
         user = await self.check_token_and_logged_in(request)
         contacts = await self.bridge.signal.list_contacts(user.username, use_cache=True)
+
+        async def transform(profile: Profile) -> JSON:
+            assert profile.address
+            puppet = await pu.Puppet.get_by_address(profile.address, False)
+            avatar_url = puppet.avatar_url if puppet else None
+            return {
+                "name": profile.name,
+                "avatar_url": avatar_url,
+                "address": profile.address.serialize(),
+            }
+
         return web.json_response(
             {
-                c.address.number: {
-                    "name": c.name,
-                    "address": c.address.serialize(),
-                }
+                c.address.number: await transform(c)
                 for c in contacts
                 if c.address and c.address.number
             },