1
0

Compare commits

...

4 Commits

Author SHA1 Message Date
Amber Brown
ea708efedd Merge branch 'develop' into matthew/heroes-for-avatars 2018-11-03 01:12:37 +11:00
Matthew Hodgson
9faf54649c changelog 2018-09-18 11:31:15 +01:00
Matthew Hodgson
7c8ea6b1d4 oops 2018-09-18 11:25:52 +01:00
Matthew Hodgson
5aaa252eb3 always calculate heroes for rooms without avatars
so that clients can synthesise a room avatar from the
heroes' one(s) if needed.
2018-09-18 10:58:04 +01:00
2 changed files with 24 additions and 15 deletions

1
changelog.d/3898.bugfix Normal file
View File

@@ -0,0 +1 @@
Always calculate heroes for rooms without avatars

View File

@@ -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)
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)
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)
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