Răsfoiți Sursa

Simplify fetching group v2 info to create rooms

Tulir Asokan 4 ani în urmă
părinte
comite
1ca0db1cce
2 a modificat fișierele cu 14 adăugiri și 12 ștergeri
  1. 10 6
      mautrix_signal/portal.py
  2. 4 6
      mautrix_signal/signal.py

+ 10 - 6
mautrix_signal/portal.py

@@ -831,12 +831,16 @@ class Portal(DBPortal, BasePortal):
             groups = await self.signal.list_groups(source.username)
             info = next((g for g in groups
                          if isinstance(g, Group) and g.group_id == info.group_id), info)
-        elif isinstance(info, GroupV2ID):
-            groups = await self.signal.list_groups(source.username)
-            try:
-                info = next(g for g in groups if isinstance(g, GroupV2) and g.id == info.id)
-            except StopIteration as e:
-                raise ValueError("Couldn't get full group v2 info") from e
+        elif isinstance(info, GroupV2ID) and not isinstance(info, GroupV2):
+            self.log.debug(f"create_matrix_room() called with {info}, "
+                           "fetching full info from signald")
+            info = await self.signal.get_group(source.username, info.id,
+                                               info.revision or -1)
+            if not info:
+                self.log.warning(f"Full info not found, canceling room creation")
+                return None
+            else:
+                self.log.trace("get_group() returned full info: %s", info)
         if self.mxid:
             await self.update_matrix_room(source, info)
             return self.mxid

+ 4 - 6
mautrix_signal/signal.py

@@ -75,12 +75,6 @@ class SignalHandler(SignaldClient):
         group_v2_info = None
         if msg.group_v2:
             portal = await po.Portal.get_by_chat_id(msg.group_v2.id, create=True)
-            if not portal.mxid:
-                group_v2_info = await self.get_group(user.username, msg.group_v2.id,
-                                                     msg.group_v2.revision or -1)
-                if not group_v2_info:
-                    user.log.debug(f"Dropping message in unknown v2 group {msg.group_v2.id}")
-                    return
         elif msg.group:
             portal = await po.Portal.get_by_chat_id(msg.group.group_id, create=True)
         else:
@@ -93,6 +87,10 @@ class SignalHandler(SignaldClient):
         if not portal.mxid:
             await portal.create_matrix_room(user, (group_v2_info or msg.group
                                                    or addr_override or sender.address))
+            if not portal.mxid:
+                user.log.debug(f"Failed to create room for incoming message {msg.timestamp},"
+                               " dropping message")
+                return
         elif msg.group_v2 and msg.group_v2.revision > portal.revision:
             self.log.debug(f"Got new revision of {msg.group_v2.id}, updating info")
             await portal.update_info(user, group_v2_info or msg.group_v2, sender)