Skip to content

Commit

Permalink
Redacting membership events should immediately reset the displayname …
Browse files Browse the repository at this point in the history
…& avatar of room members.

#443

Refresh Room members list on state event redaction
  • Loading branch information
giomfo committed Aug 12, 2016
1 parent 550aeff commit 5009263
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Vector/ViewController/RoomParticipantsViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ @interface RoomParticipantsViewController ()

// Observe kMXSessionWillLeaveRoomNotification to be notified if the user leaves the current room.
id leaveRoomNotificationObserver;

// Observe kMXRoomDidFlushMessagesNotification to take into account the updated room members when the room history is flushed.
id roomDidFlushMessagesNotificationObserver;

RoomMemberDetailsViewController *memberDetailsViewController;

Expand Down Expand Up @@ -151,6 +154,12 @@ - (void)destroy
leaveRoomNotificationObserver = nil;
}

if (roomDidFlushMessagesNotificationObserver)
{
[[NSNotificationCenter defaultCenter] removeObserver:roomDidFlushMessagesNotificationObserver];
roomDidFlushMessagesNotificationObserver = nil;
}

if (membersListener)
{
[self.mxRoom.liveTimeline removeListener:membersListener];
Expand Down Expand Up @@ -257,6 +266,11 @@ - (void)setMxRoom:(MXRoom *)mxRoom
[[NSNotificationCenter defaultCenter] removeObserver:leaveRoomNotificationObserver];
leaveRoomNotificationObserver = nil;
}
if (roomDidFlushMessagesNotificationObserver)
{
[[NSNotificationCenter defaultCenter] removeObserver:roomDidFlushMessagesNotificationObserver];
roomDidFlushMessagesNotificationObserver = nil;
}
if (membersListener)
{
[_mxRoom.liveTimeline removeListener:membersListener];
Expand Down Expand Up @@ -285,6 +299,20 @@ - (void)setMxRoom:(MXRoom *)mxRoom
}
}];

// Observe room history flush (sync with limited timeline, or state event redaction)
roomDidFlushMessagesNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kMXRoomDidFlushMessagesNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {

MXRoom *room = notif.object;
if (_mxRoom.mxSession == room.mxSession && [_mxRoom.state.roomId isEqualToString:room.state.roomId])
{
// The existing room history has been flushed during server sync. Take into account the updated room members list.
[self refreshParticipantsFromRoomMembers];

[self.tableView reloadData];
}

}];

// Register a listener for events that concern room members
NSArray *mxMembersEvents = @[kMXEventTypeStringRoomMember, kMXEventTypeStringRoomThirdPartyInvite, kMXEventTypeStringRoomPowerLevels];
membersListener = [_mxRoom.liveTimeline listenToEventsOfTypes:mxMembersEvents onEvent:^(MXEvent *event, MXTimelineDirection direction, id customObject) {
Expand Down

0 comments on commit 5009263

Please # to comment.