diff options
-rw-r--r-- | changelog.d/3898.bugfix | 1 | ||||
-rw-r--r-- | synapse/handlers/sync.py | 40 |
2 files changed, 25 insertions, 16 deletions
diff --git a/changelog.d/3898.bugfix b/changelog.d/3898.bugfix new file mode 100644 index 0000000000..4d3601a8b4 --- /dev/null +++ b/changelog.d/3898.bugfix @@ -0,0 +1 @@ +Always calculate heroes for rooms without avatars diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 09739f2862..48b7431433 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -559,15 +559,13 @@ class SyncHandler(object): state_filter=StateFilter.from_types([ (EventTypes.Name, ''), (EventTypes.CanonicalAlias, ''), + (EventTypes.RoomAvatar, ''), ]), ) # this is heavily cached, thus: fast. details = yield self.store.get_room_summary(room_id) - name_id = state_ids.get((EventTypes.Name, '')) - canonical_alias_id = state_ids.get((EventTypes.CanonicalAlias, '')) - summary = {} empty_ms = MemberSummary([], 0) @@ -579,21 +577,31 @@ class SyncHandler(object): details.get(Membership.INVITE, empty_ms).count ) - # if the room has a name or canonical_alias set, we can skip - # calculating heroes. we assume that if the event has contents, it'll + # if the room has no avatar, we need to calculate heroes. + # otherwise, if the room has a name or canonical_alias set, we can skip + # calculating heroes. + # we assume that if the event has contents, it'll # be a valid name or canonical_alias - i.e. we're checking that they # haven't been "deleted" by blatting {} over the top. - if name_id: - name = yield self.store.get_event(name_id, allow_none=True) - if name and name.content: - defer.returnValue(summary) - - if canonical_alias_id: - canonical_alias = yield self.store.get_event( - canonical_alias_id, allow_none=True, - ) - if canonical_alias and canonical_alias.content: - defer.returnValue(summary) + room_avatar_id = state_ids.get((EventTypes.RoomAvatar, '')) + if room_avatar_id: + room_avatar = yield self.store.get_event(room_avatar_id, allow_none=True) + if room_avatar and room_avatar.content: + # we have a room avatar; check to see if we can skip heroes + # because the room has an explicit name or canonical alias: + name_id = state_ids.get((EventTypes.Name, '')) + if name_id: + name = yield self.store.get_event(name_id, allow_none=True) + if name and name.content: + defer.returnValue(summary) + + canonical_alias_id = state_ids.get((EventTypes.CanonicalAlias, '')) + if canonical_alias_id: + canonical_alias = yield self.store.get_event( + canonical_alias_id, allow_none=Tue, + ) + if canonical_alias and canonical_alias.content: + defer.returnValue(summary) joined_user_ids = [ r[0] for r in details.get(Membership.JOIN, empty_ms).members |