diff options
author | Kegan Dougal <kegan@matrix.org> | 2014-11-03 17:58:11 +0000 |
---|---|---|
committer | Kegan Dougal <kegan@matrix.org> | 2014-11-03 17:58:11 +0000 |
commit | 43e7ad1b1c2ed2b23e928175d29dfcd8a2b00c76 (patch) | |
tree | b13a52e7a5b336483d9f85a522c57a619c9a8cb9 /webclient | |
parent | Fix off-by-one bug when displaying display names / avatar urls when paginating. (diff) | |
download | synapse-43e7ad1b1c2ed2b23e928175d29dfcd8a2b00c76.tar.xz |
Rejig order of checks/state updates/message insertions for m.room.member. Mark known issue.
Diffstat (limited to 'webclient')
-rw-r--r-- | webclient/components/matrix/event-handler-service.js | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js index 1b9a99eaa4..bba24cfaa9 100644 --- a/webclient/components/matrix/event-handler-service.js +++ b/webclient/components/matrix/event-handler-service.js @@ -193,6 +193,22 @@ function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService var handleRoomMember = function(event, isLiveEvent, isStateEvent) { var room = modelService.getRoom(event.room_id); + // did something change? + var memberChanges = undefined; + if (!isStateEvent) { + // could be a membership change, display name change, etc. + // Find out which one. + if ((event.prev_content === undefined && event.content.membership) || (event.prev_content && (event.prev_content.membership !== event.content.membership))) { + memberChanges = "membership"; + } + else if (event.prev_content && (event.prev_content.displayname !== event.content.displayname)) { + memberChanges = "displayname"; + } + // mark the key which changed + event.changedKey = memberChanges; + } + + // modify state before adding the message so it points to the right thing. // The events are copied to avoid referencing the same event when adding // the message (circular json structures) @@ -206,36 +222,17 @@ function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService // the m.room.member event we are handling is the NEW event. When // we keep going back in time, we want the PREVIOUS value for displaying // names/etc, hence the clobber here. + // FIXME TODO: We can't be doing this, we should have separate keys for + // avatar_url and displayname. event.content = event.prev_content; } - room.old_room_state.storeStateEvent(angular.copy(event)); + room.old_room_state.storeStateEvent(oldEvent); } - - // add membership changes as if they were a room message if something interesting changed - // Exception: Do not do this if the event is a room state event because such events already come - // as room messages events. Moreover, when they come as room messages events, they are relatively ordered - // with other other room messages - // FIXME this isn't true anymore, work out what this is doing. - if (!isStateEvent) { - // could be a membership change, display name change, etc. - // Find out which one. - var memberChanges = undefined; - if ((event.prev_content === undefined && event.content.membership) || (event.prev_content && (event.prev_content.membership !== event.content.membership))) { - memberChanges = "membership"; - } - else if (event.prev_content && (event.prev_content.displayname !== event.content.displayname)) { - memberChanges = "displayname"; - } - - // mark the key which changed - event.changedKey = memberChanges; - - // If there was a change we want to display, dump it in the message - // list. - if (memberChanges) { - room.addMessageEvent(event, !isLiveEvent); - } + // If there was a change we want to display, dump it in the message + // list. This has to be done after room state is updated. + if (memberChanges) { + room.addMessageEvent(event, !isLiveEvent); } |