Explorar el Código

Implement groupv2 avatars

Tulir Asokan hace 4 años
padre
commit
1463615233
Se han modificado 3 ficheros con 12 adiciones y 13 borrados
  1. 3 9
      ROADMAP.md
  2. 1 0
      mausignald/types.py
  3. 8 4
      mautrix_signal/portal.py

+ 3 - 9
ROADMAP.md

@@ -34,16 +34,10 @@
       * [x] Stickers
   * [x] Message reactions
   * [x] Remote deletions
-  * [ ] Initial profile info
-    * [x] User displayname
-    * [x] User avatar
-    * [x] Group name
-    * [ ] †Group avatar
+  * [x] Initial user and group profile info
   * [ ] Profile info changes
-    * [ ] User displayname
-    * [ ] †User avatar
-    * [x] Group name
-    * [x] Group avatar
+    * [x] When restarting bridge or syncing
+    * [ ] Real time
   * [x] Typing notifications
   * [x] Read receipts
   * [ ] Delivery receipts (there's no good way to bridge these)

+ 1 - 0
mausignald/types.py

@@ -130,6 +130,7 @@ class GroupV2ID(SerializableAttrs['GroupV2ID']):
 class GroupV2(GroupV2ID, SerializableAttrs['GroupV2']):
     title: str
     members: List[Address]
+    avatar: Optional[str] = None
     pending_members: List[Address] = attr.ib(factory=lambda: [],
                                              metadata={"json": "pendingMembers"})
     requesting_members: List[Address] = attr.ib(factory=lambda: [],

+ 8 - 4
mautrix_signal/portal.py

@@ -567,7 +567,7 @@ class Portal(DBPortal, BasePortal):
             return
         else:
             raise ValueError(f"Unexpected type for group update_info: {type(info)}")
-        changed = await self._update_avatar() or changed
+        changed = await self._update_avatar(info) or changed
         await self._update_participants(source, info.members)
         if changed:
             await self.update_bridge_info()
@@ -603,10 +603,14 @@ class Portal(DBPortal, BasePortal):
             return True
         return False
 
-    async def _update_avatar(self) -> bool:
-        if self.is_direct:
+    async def _update_avatar(self, info: ChatInfo) -> bool:
+        path = None
+        if isinstance(info, GroupV2):
+            path = info.avatar
+        elif isinstance(info, Group):
+            path = os.path.join(self.config["signal.avatar_dir"], f"group-{self.chat_id}")
+        if not path:
             return False
-        path = os.path.join(self.config["signal.avatar_dir"], f"group-{self.chat_id}")
         try:
             with open(path, "rb") as file:
                 data = file.read()