Merge pull request #2430 from matrix-org/erikj/groups_profile_cache

Add user profiles to summary from group server
This commit is contained in:
Erik Johnston 2017-08-25 16:48:58 +01:00 committed by GitHub
commit 7f0d0ba3bc
3 changed files with 30 additions and 2 deletions

View File

@ -45,6 +45,7 @@ class GroupsServerHandler(object):
self.server_name = hs.hostname self.server_name = hs.hostname
self.attestations = hs.get_groups_attestation_signing() self.attestations = hs.get_groups_attestation_signing()
self.transport_client = hs.get_federation_transport_client() self.transport_client = hs.get_federation_transport_client()
self.profile_handler = hs.get_profile_handler()
# Ensure attestations get renewed # Ensure attestations get renewed
hs.get_groups_attestation_renewer() hs.get_groups_attestation_renewer()
@ -128,6 +129,9 @@ class GroupsServerHandler(object):
group_id, user_id, group_id, user_id,
) )
user_profile = yield self.profile_handler.get_profile_from_cache(user_id)
entry.update(user_profile)
users.sort(key=lambda e: e.get("order", 0)) users.sort(key=lambda e: e.get("order", 0))
membership_info = yield self.store.get_users_membership_info_in_group( membership_info = yield self.store.get_users_membership_info_in_group(
@ -387,7 +391,8 @@ class GroupsServerHandler(object):
entry = {"user_id": g_user_id} entry = {"user_id": g_user_id}
# TODO: Get profile information profile = yield self.profile_handler.get_profile_from_cache(g_user_id)
entry.update(profile)
if not is_public: if not is_public:
entry["is_public"] = False entry["is_public"] = False

View File

@ -71,6 +71,29 @@ class ProfileHandler(BaseHandler):
raise raise
@defer.inlineCallbacks
def get_profile_from_cache(self, user_id):
"""Get the profile information from our local cache. If the user is
ours then the profile information will always be corect. Otherwise,
it may be out of date/missing.
"""
target_user = UserID.from_string(user_id)
if self.hs.is_mine(target_user):
displayname = yield self.store.get_profile_displayname(
target_user.localpart
)
avatar_url = yield self.store.get_profile_avatar_url(
target_user.localpart
)
defer.returnValue({
"displayname": displayname,
"avatar_url": avatar_url,
})
else:
profile = yield self.store.get_from_remote_profile_cache(user_id)
defer.returnValue(profile or {})
@defer.inlineCallbacks @defer.inlineCallbacks
def get_displayname(self, target_user): def get_displayname(self, target_user):
if self.hs.is_mine(target_user): if self.hs.is_mine(target_user):

View File

@ -62,7 +62,7 @@ class ProfileStore(SQLBaseStore):
return self._simple_select_one( return self._simple_select_one(
table="remote_profile_cache", table="remote_profile_cache",
keyvalues={"user_id": user_id}, keyvalues={"user_id": user_id},
retcols=("displayname", "avatar_url", "last_check"), retcols=("displayname", "avatar_url",),
allow_none=True, allow_none=True,
desc="get_from_remote_profile_cache", desc="get_from_remote_profile_cache",
) )