diff options
author | Kegan Dougal <kegan@matrix.org> | 2014-11-03 13:48:08 +0000 |
---|---|---|
committer | Kegan Dougal <kegan@matrix.org> | 2014-11-03 13:48:08 +0000 |
commit | 92e2ff49853922a5e81ac67ccf1a95f2278d5415 (patch) | |
tree | e6126f057efc19ad61ec2f3fba5d1ac4b6df05b3 | |
parent | Fix bug which prevented the number of users being visible on the recents view. (diff) | |
download | synapse-92e2ff49853922a5e81ac67ccf1a95f2278d5415.tar.xz |
Fix bug which prevented room name invites appearing correctly.
-rw-r--r-- | webclient/components/matrix/event-handler-service.js | 4 | ||||
-rw-r--r-- | webclient/components/matrix/matrix-filter.js | 127 | ||||
-rw-r--r-- | webclient/recents/recents.html | 2 |
3 files changed, 47 insertions, 86 deletions
diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js index 953ce839ea..a872e3f435 100644 --- a/webclient/components/matrix/event-handler-service.js +++ b/webclient/components/matrix/event-handler-service.js @@ -408,7 +408,7 @@ function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService } } console.log("Unable to handle event type " + event.type); - console.log(JSON.stringify(event, undefined, 4)); + // console.log(JSON.stringify(event, undefined, 4)); break; } } @@ -475,7 +475,7 @@ function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService room.state = []; } room.state.push(fakeEvent); - console.log("RECV /initialSync invite >> "+JSON.stringify(fakeEvent)); + console.log("RECV /initialSync invite >> "+room.room_id); } // ========================================= diff --git a/webclient/components/matrix/matrix-filter.js b/webclient/components/matrix/matrix-filter.js index e4b42a2edb..4d264e93f3 100644 --- a/webclient/components/matrix/matrix-filter.js +++ b/webclient/components/matrix/matrix-filter.js @@ -19,6 +19,8 @@ angular.module('matrixFilter', []) // Compute the room name according to information we have +// TODO: It would be nice if this was stateless and had no dependencies. That would +// make the business logic here a lot easier to see. .filter('mRoomName', ['$rootScope', 'matrixService', 'eventHandlerService', 'modelService', function($rootScope, matrixService, eventHandlerService, modelService) { return function(room_id) { @@ -29,93 +31,60 @@ function($rootScope, matrixService, eventHandlerService, modelService) { var alias = matrixService.getRoomIdToAliasMapping(room_id); var room = modelService.getRoom(room_id).current_room_state; - if (room) { - // Get name from room state date - var room_name_event = room.state("m.room.name"); + var room_name_event = room.state("m.room.name"); - // Determine if it is a public room - var isPublicRoom = false; - if (room.state("m.room.join_rules") && room.state("m.room.join_rules").content) { - isPublicRoom = ("public" === room.state("m.room.join_rules").content.join_rule); - } + // Determine if it is a public room + var isPublicRoom = false; + if (room.state("m.room.join_rules") && room.state("m.room.join_rules").content) { + isPublicRoom = ("public" === room.state("m.room.join_rules").content.join_rule); + } - if (room_name_event) { - roomName = room_name_event.content.name; - } - else if (alias) { - roomName = alias; - } - else if (room.members.length > 0 && !isPublicRoom) { // Do not rename public room + if (room_name_event) { + roomName = room_name_event.content.name; + } + else if (alias) { + roomName = alias; + } + else if (Object.keys(room.members).length > 0 && !isPublicRoom) { // Do not rename public room + var user_id = matrixService.config().user_id; - var user_id = matrixService.config().user_id; - // Else, build the name from its users - // Limit the room renaming to 1:1 room - if (2 === Object.keys(room.members).length) { - for (var i in room.members) { - if (!room.members.hasOwnProperty(i)) continue; - - var member = room.members[i]; - if (member.state_key !== user_id) { - roomName = eventHandlerService.getUserDisplayName(room_id, member.state_key); - break; - } + // this is a "one to one" room and should have the name of the other user. + if (Object.keys(room.members).length === 2) { + for (var i in room.members) { + if (!room.members.hasOwnProperty(i)) continue; + + var member = room.members[i]; + if (member.state_key !== user_id) { + roomName = eventHandlerService.getUserDisplayName(room_id, member.state_key); + break; } } - else if (Object.keys(room.members).length <= 1) { - - var otherUserId; - - if (Object.keys(room.members)[0]) { - otherUserId = Object.keys(room.members)[0]; - // this could be an invite event (from event stream) - if (otherUserId === user_id && - room.members[user_id].content.membership === "invite") { - // this is us being invited to this room, so the - // *user_id* is the other user ID and not the state - // key. - otherUserId = room.members[user_id].user_id; - } + } + else if (Object.keys(room.members).length === 1) { + // this could be just us (self-chat) or could be the other person + // in a room if they have invited us to the room. Find out which. + var otherUserId = Object.keys(room.members)[0]; + if (otherUserId === user_id) { + // it's us, we may have been invited to this room or it could + // be a self chat. + if (room.members[otherUserId].content.membership === "invite") { + // someone invited us, use the right ID. + roomName = eventHandlerService.getUserDisplayName(room_id, room.members[otherUserId].user_id); } else { - // it's got to be an invite, or failing that a self-chat; - otherUserId = room.inviter || user_id; -/* - // XXX: This should all be unnecessary now thanks to using the /rooms/<room>/roomid API - - // The other member may be in the invite list, get all invited users - var invitedUserIDs = []; - - // XXX: *SURELY* we shouldn't have to trawl through the whole messages list to - // find invite - surely the other user should be in room.members with state invited? :/ --Matthew - for (var i in room.messages) { - var message = room.messages[i]; - if ("m.room.member" === message.type && "invite" === message.content.membership) { - // Filter out the current user - var member_id = message.state_key; - if (member_id === user_id) { - member_id = message.user_id; - } - if (member_id !== user_id) { - // Make sure there is no duplicate user - if (-1 === invitedUserIDs.indexOf(member_id)) { - invitedUserIDs.push(member_id); - } - } - } - } - - // For now, only 1:1 room needs to be renamed. It means only 1 invited user - if (1 === invitedUserIDs.length) { - otherUserId = invitedUserIDs[0]; - } -*/ + roomName = eventHandlerService.getUserDisplayName(room_id, otherUserId); } - - // Get the user display name + } + else { // it isn't us, so use their name if we know it. roomName = eventHandlerService.getUserDisplayName(room_id, otherUserId); } } + else if (Object.keys(room.members).length === 0) { + // this shouldn't be possible + console.error("0 members in room >> " + room_id); + } } + // Always show the alias in the room displayed name if (roomName && alias && alias !== roomName) { @@ -125,14 +94,6 @@ function($rootScope, matrixService, eventHandlerService, modelService) { if (undefined === roomName) { // By default, use the room ID roomName = room_id; - - // XXX: this is *INCREDIBLY* heavy logging for a function that calls every single - // time any kind of digest runs which refreshes a room name... - // commenting it out for now. - - // Log some information that lead to this leak - // console.log("Room ID leak for " + room_id); - // console.log("room object: " + JSON.stringify(room, undefined, 4)); } return roomName; diff --git a/webclient/recents/recents.html b/webclient/recents/recents.html index a11e6be532..7297e23703 100644 --- a/webclient/recents/recents.html +++ b/webclient/recents/recents.html @@ -27,7 +27,7 @@ <tr> <td colspan="3" class="recentsRoomSummary"> - <div ng-show="room.recent.me.membership === 'invite'"> + <div ng-show="room.recent.me.content.membership === 'invite'"> {{ room.recent.inviter | mUserDisplayName: room.room_id }} invited you </div> |