diff options
author | Dirk Klimpel <5740567+dklimpel@users.noreply.github.com> | 2022-02-21 17:03:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-21 16:03:06 +0000 |
commit | 7c82da27aa6acff3ac40343719b440133955c207 (patch) | |
tree | 04081331aad9eca8dc435db78c8d6341d2ac45ef /synapse/handlers/presence.py | |
parent | Advertise Matrix 1.2 in `/_matrix/client/versions` (#12022) (diff) | |
download | synapse-7c82da27aa6acff3ac40343719b440133955c207.tar.xz |
Add type hints to `synapse/storage/databases/main` (#11984)
Diffstat (limited to 'synapse/handlers/presence.py')
-rw-r--r-- | synapse/handlers/presence.py | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index 067c43ae47..b223b72623 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -204,25 +204,27 @@ class BasePresenceHandler(abc.ABC): Returns: dict: `user_id` -> `UserPresenceState` """ - states = { - user_id: self.user_to_current_state.get(user_id, None) - for user_id in user_ids - } + states = {} + missing = [] + for user_id in user_ids: + state = self.user_to_current_state.get(user_id, None) + if state: + states[user_id] = state + else: + missing.append(user_id) - missing = [user_id for user_id, state in states.items() if not state] if missing: # There are things not in our in memory cache. Lets pull them out of # the database. res = await self.store.get_presence_for_users(missing) states.update(res) - missing = [user_id for user_id, state in states.items() if not state] - if missing: - new = { - user_id: UserPresenceState.default(user_id) for user_id in missing - } - states.update(new) - self.user_to_current_state.update(new) + for user_id in missing: + # if user has no state in database, create the state + if not res.get(user_id, None): + new_state = UserPresenceState.default(user_id) + states[user_id] = new_state + self.user_to_current_state[user_id] = new_state return states |