ソースを参照

bridge state: use new bridge state events

Sumner Evans 3 年 前
コミット
1958f5c663
3 ファイル変更8 行追加11 行削除
  1. 3 0
      mautrix_signal/__main__.py
  2. 4 10
      mautrix_signal/user.py
  3. 1 1
      requirements.txt

+ 3 - 0
mautrix_signal/__main__.py

@@ -136,5 +136,8 @@ class SignalBridge(Bridge):
     def is_bridge_ghost(self, user_id: UserID) -> bool:
         return bool(Puppet.get_id_from_mxid(user_id))
 
+    async def count_logged_in_users(self) -> int:
+        return len([user for user in User.by_username.values() if user.username])
+
 
 SignalBridge().run()

+ 4 - 10
mautrix_signal/user.py

@@ -20,6 +20,7 @@ import asyncio
 from mausignald.types import Account, Address, Profile, Group, GroupV2, ListenEvent, ListenAction
 from mautrix.bridge import BaseUser, BridgeState, AutologinError, async_getter_lock
 from mautrix.types import UserID, RoomID
+from mautrix.util.bridge_state import BridgeStateEvent
 from mautrix.appservice import AppService
 from mautrix.util.opt_prometheus import Gauge
 
@@ -98,7 +99,7 @@ class User(DBUser, BaseUser):
         await asyncio.sleep(1)
         await self.bridge.signal.delete_account(username)
         self._track_metric(METRIC_LOGGED_IN, False)
-        await self.push_bridge_state(ok=False, error="logged-out", remote_id=username)
+        await self.push_bridge_state(BridgeStateEvent.LOGGED_OUT)
 
     async def fill_bridge_state(self, state: BridgeState) -> None:
         await super().fill_bridge_state(state)
@@ -108,13 +109,6 @@ class User(DBUser, BaseUser):
             puppet = await self.get_puppet()
             state.remote_name = puppet.name or self.username
 
-    async def get_bridge_state(self) -> BridgeState:
-        if not self.username:
-            return BridgeState(ok=False, error="logged-out")
-        elif not self._connected:
-            return BridgeState(ok=False, error="signal-not-connected")
-        return BridgeState(ok=True)
-
     async def get_puppet(self) -> Optional['pu.Puppet']:
         if not self.address:
             return None
@@ -135,14 +129,14 @@ class User(DBUser, BaseUser):
             self._track_metric(METRIC_CONNECTED, True)
             self._track_metric(METRIC_LOGGED_IN, True)
             self._connected = True
-            asyncio.create_task(self.push_bridge_state(ok=True))
+            asyncio.create_task(self.push_bridge_state(BridgeStateEvent.CONNECTED))
         elif evt.action == ListenAction.STOPPED:
             if evt.exception:
                 self.log.warning(f"Disconnected from Signal: {evt.exception}")
             else:
                 self.log.info("Disconnected from Signal")
             self._track_metric(METRIC_CONNECTED, False)
-            asyncio.create_task(self.push_bridge_state(ok=False, error="signal-not-connected"))
+            asyncio.create_task(self.push_bridge_state(BridgeStateEvent.UNKNOWN_ERROR))
             self._connected = False
         else:
             self.log.warning(f"Unrecognized listen action {evt.action}")

+ 1 - 1
requirements.txt

@@ -4,5 +4,5 @@ commonmark>=0.8,<0.10
 aiohttp>=3,<4
 yarl>=1,<2
 attrs>=19.1
-mautrix>=0.9.8,<0.10
+mautrix>=0.10.2,<0.11
 asyncpg>=0.20,<0.24