From 1b7a10218ab360bd7c32388b111af4fe32026f44 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 5 Aug 2018 22:53:15 +0300 Subject: [PATCH] Fix logging out if portal was deleted/unbridged. Fixes #173 --- mautrix_telegram/portal.py | 2 ++ mautrix_telegram/user.py | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index 143c93b1..234c0dc3 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -90,6 +90,7 @@ class Portal: self.about = about # type: str self.photo_id = photo_id # type: str self._db_instance = db_instance # type: DBPortal + self.deleted = False # type: bool self._main_intent = None # type: IntentAPI self._room_create_lock = asyncio.Lock() # type: asyncio.Lock @@ -1632,6 +1633,7 @@ class Portal: if self._db_instance: self.db.delete(self._db_instance) self.db.commit() + self.deleted = True @classmethod def from_db(cls, db_portal: DBPortal) -> "Portal": diff --git a/mautrix_telegram/user.py b/mautrix_telegram/user.py index e42e1071..c8a28131 100644 --- a/mautrix_telegram/user.py +++ b/mautrix_telegram/user.py @@ -98,7 +98,7 @@ class User(AbstractUser): @property def db_portals(self) -> List[DBPortal]: - return [portal.db_instance for portal in self.portals.values()] + return [portal.db_instance for portal in self.portals.values() if not portal.deleted] @db_portals.setter def db_portals(self, portals: List[DBPortal]): @@ -214,8 +214,11 @@ class User(AbstractUser): self.save() async def log_out(self): + puppet = pu.Puppet.get(self.tgid) + if puppet.is_real_user: + await puppet.switch_mxid(None, None) for _, portal in self.portals.items(): - if portal.has_bot: + if not portal.mxid or portal.has_bot: continue try: await portal.main_intent.kick(portal.mxid, self.mxid, "Logged out of Telegram.")