summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erikj@jki.re>2017-08-25 16:48:58 +0100
committerGitHub <noreply@github.com>2017-08-25 16:48:58 +0100
commit7f0d0ba3bcd3aa56cab0d16346e99ed6a60cc9eb (patch)
tree62e646b2c99919f1acb2c4eb21d25d4dd701685a
parentMerge pull request #2429 from matrix-org/erikj/groups_profile_cache (diff)
parentAdd user profiles to summary from group server (diff)
downloadsynapse-7f0d0ba3bcd3aa56cab0d16346e99ed6a60cc9eb.tar.xz
Merge pull request #2430 from matrix-org/erikj/groups_profile_cache
Add user profiles to summary from group server
-rw-r--r--synapse/groups/groups_server.py7
-rw-r--r--synapse/handlers/profile.py23
-rw-r--r--synapse/storage/profile.py2
3 files changed, 30 insertions, 2 deletions
diff --git a/synapse/groups/groups_server.py b/synapse/groups/groups_server.py
index 6bccae4bfb..94cf9788bb 100644
--- a/synapse/groups/groups_server.py
+++ b/synapse/groups/groups_server.py
@@ -45,6 +45,7 @@ class GroupsServerHandler(object):
         self.server_name = hs.hostname
         self.attestations = hs.get_groups_attestation_signing()
         self.transport_client = hs.get_federation_transport_client()
+        self.profile_handler = hs.get_profile_handler()
 
         # Ensure attestations get renewed
         hs.get_groups_attestation_renewer()
@@ -128,6 +129,9 @@ class GroupsServerHandler(object):
                     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))
 
         membership_info = yield self.store.get_users_membership_info_in_group(
@@ -387,7 +391,8 @@ class GroupsServerHandler(object):
 
             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:
                 entry["is_public"] = False
diff --git a/synapse/handlers/profile.py b/synapse/handlers/profile.py
index c3cee38a43..e56e0a52bf 100644
--- a/synapse/handlers/profile.py
+++ b/synapse/handlers/profile.py
@@ -72,6 +72,29 @@ class ProfileHandler(BaseHandler):
                 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
     def get_displayname(self, target_user):
         if self.hs.is_mine(target_user):
             displayname = yield self.store.get_profile_displayname(
diff --git a/synapse/storage/profile.py b/synapse/storage/profile.py
index dca6af8a77..beea3102fc 100644
--- a/synapse/storage/profile.py
+++ b/synapse/storage/profile.py
@@ -62,7 +62,7 @@ class ProfileStore(SQLBaseStore):
         return self._simple_select_one(
             table="remote_profile_cache",
             keyvalues={"user_id": user_id},
-            retcols=("displayname", "avatar_url", "last_check"),
+            retcols=("displayname", "avatar_url",),
             allow_none=True,
             desc="get_from_remote_profile_cache",
         )