Use exceptions for get_profile
This commit is contained in:
parent
6558bdc87f
commit
4cc2ebf6e3
|
@ -8,12 +8,11 @@ import nio
|
||||||
|
|
||||||
from . import utils
|
from . import utils
|
||||||
from .app import App
|
from .app import App
|
||||||
from .matrix_client import MatrixClient, MatrixError
|
from .errors import MatrixError
|
||||||
|
from .matrix_client import MatrixClient
|
||||||
from .models.items import Account, Device, Event, Member, Room, Upload
|
from .models.items import Account, Device, Event, Member, Room, Upload
|
||||||
from .models.model_store import ModelStore
|
from .models.model_store import ModelStore
|
||||||
|
|
||||||
ProfileResponse = Union[nio.ProfileGetResponse, nio.ProfileGetError]
|
|
||||||
|
|
||||||
|
|
||||||
class Backend:
|
class Backend:
|
||||||
def __init__(self, app: App) -> None:
|
def __init__(self, app: App) -> None:
|
||||||
|
@ -169,7 +168,7 @@ class Backend:
|
||||||
return (settings, ui_state, theme)
|
return (settings, ui_state, theme)
|
||||||
|
|
||||||
|
|
||||||
async def get_profile(self, user_id: str) -> ProfileResponse:
|
async def get_profile(self, user_id: str) -> nio.ProfileGetResponse:
|
||||||
if user_id in self.profile_cache:
|
if user_id in self.profile_cache:
|
||||||
return self.profile_cache[user_id]
|
return self.profile_cache[user_id]
|
||||||
|
|
||||||
|
@ -185,7 +184,7 @@ class Backend:
|
||||||
response = await client.get_profile(user_id)
|
response = await client.get_profile(user_id)
|
||||||
|
|
||||||
if isinstance(response, nio.ProfileGetError):
|
if isinstance(response, nio.ProfileGetError):
|
||||||
log.warning("%s: %s", user_id, response)
|
raise MatrixError.from_nio(response)
|
||||||
|
|
||||||
self.profile_cache[user_id] = response
|
self.profile_cache[user_id] = response
|
||||||
return response
|
return response
|
||||||
|
|
|
@ -130,8 +130,10 @@ class MatrixClient(nio.AsyncClient):
|
||||||
|
|
||||||
async def start(self) -> None:
|
async def start(self) -> None:
|
||||||
def on_profile_response(future) -> None:
|
def on_profile_response(future) -> None:
|
||||||
|
if future.exception():
|
||||||
|
return
|
||||||
|
|
||||||
resp = future.result()
|
resp = future.result()
|
||||||
if isinstance(resp, nio.ProfileGetResponse):
|
|
||||||
account = self.models[Account][self.user_id]
|
account = self.models[Account][self.user_id]
|
||||||
account.profile_updated = datetime.now()
|
account.profile_updated = datetime.now()
|
||||||
account.display_name = resp.displayname or ""
|
account.display_name = resp.displayname or ""
|
||||||
|
@ -409,7 +411,9 @@ class MatrixClient(nio.AsyncClient):
|
||||||
if invite == self.user_id:
|
if invite == self.user_id:
|
||||||
raise InvalidUserInContext(invite)
|
raise InvalidUserInContext(invite)
|
||||||
|
|
||||||
if isinstance(await self.get_profile(invite), nio.ProfileGetError):
|
try:
|
||||||
|
await self.get_profile(invite)
|
||||||
|
except MatrixError:
|
||||||
raise UserNotFound(invite)
|
raise UserNotFound(invite)
|
||||||
|
|
||||||
response = await super().room_create(
|
response = await super().room_create(
|
||||||
|
@ -786,11 +790,11 @@ class MatrixClient(nio.AsyncClient):
|
||||||
try:
|
try:
|
||||||
item = self.models[Member, room_id][user_id]
|
item = self.models[Member, room_id][user_id]
|
||||||
except KeyError: # e.g. user is not anymore in the room
|
except KeyError: # e.g. user is not anymore in the room
|
||||||
|
try:
|
||||||
info = await self.backend.get_profile(user_id)
|
info = await self.backend.get_profile(user_id)
|
||||||
|
return (info.displayname or "", info.avatar_url or "")
|
||||||
return (info.displayname or "", info.avatar_url or "") \
|
except MatrixError:
|
||||||
if isinstance(info, nio.ProfileGetResponse) else \
|
return ("", "")
|
||||||
("", "")
|
|
||||||
else:
|
else:
|
||||||
return (item.display_name, item.avatar_url)
|
return (item.display_name, item.avatar_url)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user