From 5bf1a902425907fea8aa3432974176613c8f5e1a Mon Sep 17 00:00:00 2001 From: miruka Date: Tue, 2 Jun 2020 20:40:17 -0400 Subject: [PATCH] Separate MatrixClient function to get our profile Side-effect: don't endlessly retry anymore when getting the profile fails for some reason --- src/backend/matrix_client.py | 40 +++++++++++++----------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/src/backend/matrix_client.py b/src/backend/matrix_client.py index 97d98b8d..87e96261 100644 --- a/src/backend/matrix_client.py +++ b/src/backend/matrix_client.py @@ -275,28 +275,6 @@ class MatrixClient(nio.AsyncClient): async def _start(self) -> None: """Fetch our user profile, server config and enter the sync loop.""" - def on_profile_response(future) -> None: - """Update our model `Account` with the received profile details.""" - - if future.cancelled(): # Account logged out - return - - try: - resp = future.result() - except Exception: - trace = traceback.format_exc().rstrip() - log.warn("On %s profile retrieval: %s", self.user_id, trace) - self.profile_task = asyncio.ensure_future( - self.backend.get_profile(self.user_id), - ) - self.profile_task.add_done_callback(on_profile_response) - return - - account = self.models["accounts"][self.user_id] - account.profile_updated = datetime.now() - account.display_name = resp.displayname or "" - account.avatar_url = resp.avatar_url or "" - def on_server_config_response(future) -> None: """Update our model `Account` with the received config details.""" @@ -319,10 +297,7 @@ class MatrixClient(nio.AsyncClient): on_server_config_response, ) - self.profile_task = asyncio.ensure_future( - self.backend.get_profile(self.user_id), - ) - self.profile_task.add_done_callback(on_profile_response) + self.profile_task = asyncio.ensure_future(self.update_own_profile()) self.server_config_task = asyncio.ensure_future( self.get_server_config(), @@ -366,6 +341,19 @@ class MatrixClient(nio.AsyncClient): await asyncio.sleep(5) + async def update_own_profile(self) -> None: + """Fetch our profile from server and Update our model `Account`.""" + + # XXX: verify this works when logging out quickly + + resp = await self.backend.get_profile(self.user_id) + + account = self.models["accounts"][self.user_id] + account.profile_updated = datetime.now() + account.display_name = resp.displayname or "" + account.avatar_url = resp.avatar_url or "" + + async def get_server_config(self) -> int: """Return the maximum upload size on this server""" return (await self.content_repository_config()).upload_size