diff options
author | Mark Haines <mark.haines@matrix.org> | 2015-05-22 16:11:17 +0100 |
---|---|---|
committer | Mark Haines <mark.haines@matrix.org> | 2015-05-22 16:11:17 +0100 |
commit | 1a9a9abcc73ebbd14fce0f45689e4648a71d55bc (patch) | |
tree | bf41cf9fbb090dea8a69c3d86ff9e73ee2dc54b9 /synapse/handlers | |
parent | Merge pull request #156 from matrix-org/erikj/join_perf (diff) | |
download | synapse-1a9a9abcc73ebbd14fce0f45689e4648a71d55bc.tar.xz |
Add a cache for getting the presence list for a user
Diffstat (limited to 'synapse/handlers')
-rw-r--r-- | synapse/handlers/presence.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index 670c1d353f..023ad33ab0 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -521,20 +521,26 @@ class PresenceHandler(BaseHandler): if not self.hs.is_mine(observer_user): raise SynapseError(400, "User is not hosted on this Home Server") - presence = yield self.store.get_presence_list( + presence_list = yield self.store.get_presence_list( observer_user.localpart, accepted=accepted ) - for p in presence: - observed_user = UserID.from_string(p.pop("observed_user_id")) - p["observed_user"] = observed_user - p.update(self._get_or_offline_usercache(observed_user).get_state()) - if "last_active" in p: - p["last_active_ago"] = int( - self.clock.time_msec() - p.pop("last_active") + results = [] + for row in presence_list: + observed_user = UserID.from_string(row["observed_user_id"]) + result = { + "observed_user": observed_user, "accepted": row["accepted"] + } + result.update( + self._get_or_offline_usercache(observed_user).get_state() + ) + if "last_active" in result: + result["last_active_ago"] = int( + self.clock.time_msec() - result.pop("last_active") ) + results.append(result) - defer.returnValue(presence) + defer.returnValue(results) @defer.inlineCallbacks @log_function |