From 9172cd010b4732d782fe3685b55589364869a5e3 Mon Sep 17 00:00:00 2001
From: Tulir Asokan <tulir@maunium.net>
Date: Thu, 11 Jun 2020 14:10:07 +0300
Subject: [PATCH] Don't send non-error refreshing notices if
 temporary_disconnect_notices is disabled

---
 mautrix_facebook/commands/conn.py |  2 +-
 mautrix_facebook/user.py          | 25 +++++++++++++++----------
 2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/mautrix_facebook/commands/conn.py b/mautrix_facebook/commands/conn.py
index 6135e2d..65b1b4f 100644
--- a/mautrix_facebook/commands/conn.py
+++ b/mautrix_facebook/commands/conn.py
@@ -67,4 +67,4 @@ async def ping(evt: CommandEvent) -> None:
 @command_handler(needs_auth=True, management_only=True, help_section=SECTION_CONNECTION,
                  help_text="\"Refresh\" the Facebook Messenger page")
 async def refresh(evt: CommandEvent) -> None:
-    await evt.sender.refresh()
+    await evt.sender.refresh(force_notice=True)
diff --git a/mautrix_facebook/user.py b/mautrix_facebook/user.py
index d67c805..352ec7f 100644
--- a/mautrix_facebook/user.py
+++ b/mautrix_facebook/user.py
@@ -38,6 +38,8 @@ config: Config
 
 
 class User(BaseUser):
+    temp_disconnect_notices: bool = True
+
     by_mxid: Dict[UserID, 'User'] = {}
     by_fbid: Dict[str, 'User'] = {}
 
@@ -229,16 +231,18 @@ class User(BaseUser):
             await self.send_bridge_notice("Fatal error while trying to refresh after connection "
                                           "error (see logs for more info)", important=True)
 
-    async def refresh(self) -> None:
+    async def refresh(self, force_notice: bool = False) -> None:
         event_id = None
         self._is_refreshing = True
         if self.listener:
-            event_id = await self.send_bridge_notice("Disconnecting Messenger MQTT connection "
-                                                     "for session refresh...")
+            if self.temp_disconnect_notices or force_notice:
+                event_id = await self.send_bridge_notice("Disconnecting Messenger MQTT connection "
+                                                         "for session refresh...")
             self.listener.disconnect()
             if self.listen_task:
                 await self.listen_task
-        event_id = await self.send_bridge_notice("Refreshing session...", edit=event_id)
+        if self.temp_disconnect_notices or force_notice:
+            event_id = await self.send_bridge_notice("Refreshing session...", edit=event_id)
         try:
             ok = await self.load_session(_override=True, _raise_errors=True)
         except fbchat.FacebookError as e:
@@ -248,12 +252,12 @@ class User(BaseUser):
             await self.send_bridge_notice("Failed to refresh Messenger session: unknown error "
                                           "(see logs for more details)", edit=event_id)
         else:
-            if ok:
-                await self.send_bridge_notice("Successfully refreshed Messenger session",
-                                              edit=event_id)
-            else:
+            if not ok:
                 await self.send_bridge_notice("Failed to refresh Messenger session: "
                                               "not logged in", edit=event_id)
+            elif self.temp_disconnect_notices or force_notice:
+                await self.send_bridge_notice("Successfully refreshed Messenger session",
+                                              edit=event_id)
         finally:
             self._is_refreshing = False
 
@@ -510,12 +514,12 @@ class User(BaseUser):
             await self.send_bridge_notice("Connected to Facebook Messenger after being "
                                           f"disconnected for {duration} seconds, syncing chats...")
             await self.sync_threads()
-        elif config["bridge.temporary_disconnect_notices"]:
+        elif self.temp_disconnect_notices:
             await self.send_bridge_notice("Connected to Facebook Messenger")
 
     async def on_disconnect(self, evt: fbchat.Disconnect) -> None:
         self.is_connected = False
-        if config["bridge.temporary_disconnect_notices"]:
+        if self.temp_disconnect_notices:
             await self.send_bridge_notice(f"Disconnected from Facebook Messenger: {evt.reason}")
 
     async def on_resync(self) -> None:
@@ -643,4 +647,5 @@ def init(context: 'Context') -> Iterable[Awaitable[bool]]:
     global config
     User.az, config, User.loop = context.core
     User._community_helper = CommunityHelper(User.az)
+    User.temp_disconnect_notices = config["bridge.temporary_disconnect_notices"]
     return (user.load_session() for user in User.get_all())
-- 
GitLab