Separate MatrixClient function to get our profile

Side-effect: don't endlessly retry anymore when getting the profile
fails for some reason
This commit is contained in:
miruka 2020-06-02 20:40:17 -04:00
parent 8ec715eab7
commit 5bf1a90242

View File

@ -275,28 +275,6 @@ class MatrixClient(nio.AsyncClient):
async def _start(self) -> None: async def _start(self) -> None:
"""Fetch our user profile, server config and enter the sync loop.""" """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: def on_server_config_response(future) -> None:
"""Update our model `Account` with the received config details.""" """Update our model `Account` with the received config details."""
@ -319,10 +297,7 @@ class MatrixClient(nio.AsyncClient):
on_server_config_response, on_server_config_response,
) )
self.profile_task = asyncio.ensure_future( self.profile_task = asyncio.ensure_future(self.update_own_profile())
self.backend.get_profile(self.user_id),
)
self.profile_task.add_done_callback(on_profile_response)
self.server_config_task = asyncio.ensure_future( self.server_config_task = asyncio.ensure_future(
self.get_server_config(), self.get_server_config(),
@ -366,6 +341,19 @@ class MatrixClient(nio.AsyncClient):
await asyncio.sleep(5) 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: async def get_server_config(self) -> int:
"""Return the maximum upload size on this server""" """Return the maximum upload size on this server"""
return (await self.content_repository_config()).upload_size return (await self.content_repository_config()).upload_size