From 39927ac6c013ae658e480cc3231d3665bd1ba34c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 11 Dec 2019 10:01:47 +0200 Subject: [PATCH] Try to fix cleaning up rooms Not tested at all --- mautrix_telegram/commands/clean_rooms.py | 2 +- mautrix_telegram/commands/portal/bridge.py | 8 +++---- mautrix_telegram/portal/base.py | 22 +++++++++++-------- mautrix_telegram/web/provisioning/__init__.py | 8 +++---- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/mautrix_telegram/commands/clean_rooms.py b/mautrix_telegram/commands/clean_rooms.py index 93e3e649..b2262c23 100644 --- a/mautrix_telegram/commands/clean_rooms.py +++ b/mautrix_telegram/commands/clean_rooms.py @@ -169,7 +169,7 @@ async def execute_room_cleanup(evt, rooms_to_clean: List[Union[po.Portal, RoomID await room.cleanup_and_delete() cleaned += 1 else: - await po.Portal.cleanup_room(evt.az.intent, room, message="Room deleted") + await po.Portal.cleanup_room(evt.az.intent, room, "Room deleted") cleaned += 1 evt.sender.command_status = None await evt.reply(f"{cleaned} rooms cleaned up successfully.") diff --git a/mautrix_telegram/commands/portal/bridge.py b/mautrix_telegram/commands/portal/bridge.py index 6d02b1a5..206f33b9 100644 --- a/mautrix_telegram/commands/portal/bridge.py +++ b/mautrix_telegram/commands/portal/bridge.py @@ -113,12 +113,10 @@ async def cleanup_old_portal_while_bridging(evt: CommandEvent, portal: "po.Porta "Continuing without touching previous Matrix room...") return True, None elif evt.args[0] == "delete-and-continue": - return True, portal.cleanup_room(portal.main_intent, portal.mxid, - message="Portal deleted (moving to another room)") + return True, portal.cleanup_portal("Portal deleted (moving to another room)") elif evt.args[0] == "unbridge-and-continue": - return True, portal.cleanup_room(portal.main_intent, portal.mxid, - message="Room unbridged (portal moving to another room)", - puppets_only=True) + return True, portal.cleanup_portal("Room unbridged (portal moving to another room)", + puppets_only=True) else: await evt.reply( "The chat you were trying to bridge already has a Matrix portal room.\n\n" diff --git a/mautrix_telegram/portal/base.py b/mautrix_telegram/portal/base.py index d74bc7c4..89abf7cc 100644 --- a/mautrix_telegram/portal/base.py +++ b/mautrix_telegram/portal/base.py @@ -273,17 +273,13 @@ class BasePortal(ABC): authenticated.append(user) return authenticated - async def cleanup_room(self, intent: IntentAPI, room_id: RoomID, - message: str = "Portal deleted", puppets_only: bool = False) -> None: + @staticmethod + async def cleanup_room(intent: IntentAPI, room_id: RoomID, message: str, + puppets_only: bool = False) -> None: try: members = await intent.get_room_members(room_id) except MatrixRequestError: members = [] - if self.username: - try: - await intent.remove_room_alias(self.alias_localpart) - except (MatrixRequestError, IntentError): - self.log.warning("Failed to remove alias when cleaning up room", exc_info=True) for user in members: puppet = p.Puppet.get_by_mxid(UserID(user), create=False) if user != intent.mxid and (not puppets_only or puppet): @@ -299,12 +295,20 @@ class BasePortal(ABC): except (MatrixRequestError, IntentError): self.log.warning("Failed to leave room when cleaning up room", exc_info=True) + async def cleanup_portal(self, message: str, puppets_only: bool = False) -> None: + if self.username: + try: + await self.main_intent.remove_room_alias(self.alias_localpart) + except (MatrixRequestError, IntentError): + self.log.warning("Failed to remove alias when cleaning up room", exc_info=True) + await self.cleanup_room(self.main_intent, self.mxid, message, puppets_only) + async def unbridge(self) -> None: - await self.cleanup_room(self.main_intent, self.mxid, "Room unbridged", puppets_only=True) + await self.cleanup_portal("Room unbridged", puppets_only=True) self.delete() async def cleanup_and_delete(self) -> None: - await self.cleanup_room(self.main_intent, self.mxid) + await self.cleanup_portal("Portal deleted") self.delete() # endregion diff --git a/mautrix_telegram/web/provisioning/__init__.py b/mautrix_telegram/web/provisioning/__init__.py index 31b01a87..561981d6 100644 --- a/mautrix_telegram/web/provisioning/__init__.py +++ b/mautrix_telegram/web/provisioning/__init__.py @@ -149,11 +149,9 @@ class ProvisioningAPI(AuthAPI): force = request.query.get("force", None) if force in ("delete", "unbridge"): delete = force == "delete" - await portal.cleanup_room(portal.main_intent, portal.mxid, puppets_only=not delete, - message=("Portal deleted (moving to another room)" - if delete - else "Room unbridged (portal moving to another " - "room)")) + await portal.cleanup_portal("Portal deleted (moving to another room)" if delete + else "Room unbridged (portal moving to another room)", + puppets_only=not delete) else: return self.get_error_response(409, "chat_already_bridged", "Telegram chat is already bridged to another "