Show room name updates in room history and recents.

Update it with the latest value
This commit is contained in:
Emmanuel ROHEE 2014-09-12 10:12:56 +02:00
parent 8b3ce85183
commit 6ea20f3503
4 changed files with 50 additions and 38 deletions

View File

@ -60,7 +60,7 @@ angular.module('eventHandlerService', [])
// Pagination information // Pagination information
$rootScope.events.rooms[room_id].pagination = { $rootScope.events.rooms[room_id].pagination = {
earliest_token: "END" // how far back we've paginated earliest_token: "END" // how far back we've paginated
} };
} }
}; };
@ -70,6 +70,36 @@ angular.module('eventHandlerService', [])
} }
}; };
// Generic method to handle events data
var handleRoomDateEvent = function(event, isLiveEvent, addToRoomMessages) {
// Add topic changes as if they were a room message
if (addToRoomMessages) {
if (isLiveEvent) {
$rootScope.events.rooms[event.room_id].messages.push(event);
}
else {
$rootScope.events.rooms[event.room_id].messages.unshift(event);
}
}
// live events always update, but non-live events only update if the
// ts is later.
var latestData = true;
if (!isLiveEvent) {
var eventTs = event.ts;
var storedEvent = $rootScope.events.rooms[event.room_id][event.type];
if (storedEvent) {
if (storedEvent.ts > eventTs) {
// ignore it, we have a newer one already.
latestData = false;
}
}
}
if (latestData) {
$rootScope.events.rooms[event.room_id][event.type] = event;
}
};
var handleRoomCreate = function(event, isLiveEvent) { var handleRoomCreate = function(event, isLiveEvent) {
// For now, we do not use the event data. Simply signal it to the app controllers // For now, we do not use the event data. Simply signal it to the app controllers
$rootScope.$broadcast(ROOM_CREATE_EVENT, event, isLiveEvent); $rootScope.$broadcast(ROOM_CREATE_EVENT, event, isLiveEvent);
@ -153,44 +183,16 @@ angular.module('eventHandlerService', [])
} }
}; };
var handleRoomName = function(event, isLiveEvent) { var handleRoomName = function(event, isLiveEvent, isStateEvent) {
console.log("handleRoomName " + isLiveEvent); console.log("handleRoomName room_id: " + event.room_id + " - isLiveEvent: " + isLiveEvent + " - name: " + event.content.name);
handleRoomDateEvent(event, isLiveEvent, !isStateEvent);
$rootScope.events.rooms[event.room_id][event.type] = event;
$rootScope.$broadcast(NAME_EVENT, event, isLiveEvent); $rootScope.$broadcast(NAME_EVENT, event, isLiveEvent);
}; };
// TODO: Can this just be a generic "I am a room state event, can haz store?"
var handleRoomTopic = function(event, isLiveEvent, isStateEvent) { var handleRoomTopic = function(event, isLiveEvent, isStateEvent) {
console.log("handleRoomTopic live="+isLiveEvent); console.log("handleRoomTopic room_id: " + event.room_id + " - isLiveEvent: " + isLiveEvent + " - topic: " + event.content.topic);
handleRoomDateEvent(event, isLiveEvent, !isStateEvent);
// Add topic changes as if they were a room message
if (!isStateEvent) {
if (isLiveEvent) {
$rootScope.events.rooms[event.room_id].messages.push(event);
}
else {
$rootScope.events.rooms[event.room_id].messages.unshift(event);
}
}
// live events always update, but non-live events only update if the
// ts is later.
var latestData = true;
if (!isLiveEvent) {
var eventTs = event.ts;
var storedEvent = $rootScope.events.rooms[event.room_id][event.type];
if (storedEvent) {
if (storedEvent.ts > eventTs) {
// ignore it, we have a newer one already.
latestData = false;
}
}
}
if (latestData) {
$rootScope.events.rooms[event.room_id][event.type] = event;
}
$rootScope.$broadcast(TOPIC_EVENT, event, isLiveEvent); $rootScope.$broadcast(TOPIC_EVENT, event, isLiveEvent);
}; };
@ -286,7 +288,7 @@ angular.module('eventHandlerService', [])
handlePowerLevels(event, isLiveEvent); handlePowerLevels(event, isLiveEvent);
break; break;
case 'm.room.name': case 'm.room.name':
handleRoomName(event, isLiveEvent); handleRoomName(event, isLiveEvent, isStateEvent);
break; break;
case 'm.room.topic': case 'm.room.topic':
handleRoomTopic(event, isLiveEvent, isStateEvent); handleRoomTopic(event, isLiveEvent, isStateEvent);

View File

@ -31,15 +31,17 @@ angular.module('matrixFilter', [])
} }
if (undefined === roomName) { if (undefined === roomName) {
// Else, build the name from its users
var room = $rootScope.events.rooms[room_id]; var room = $rootScope.events.rooms[room_id];
if (room) { if (room) {
// Get name from room state date
var room_name_event = room["m.room.name"]; var room_name_event = room["m.room.name"];
if (room_name_event) { if (room_name_event) {
roomName = room_name_event.content.name; roomName = room_name_event.content.name;
} }
else if (room.members) { else if (room.members) {
// Else, build the name from its users
// FIXME: Is it still required?
// Limit the room renaming to 1:1 room // Limit the room renaming to 1:1 room
if (2 === Object.keys(room.members).length) { if (2 === Object.keys(room.members).length) {
for (var i in room.members) { for (var i in room.members) {

View File

@ -80,6 +80,10 @@
{{ room.lastMsg.user_id | mUserDisplayName: room.room_id }} changed the topic to: {{ room.lastMsg.content.topic }} {{ room.lastMsg.user_id | mUserDisplayName: room.room_id }} changed the topic to: {{ room.lastMsg.content.topic }}
</div> </div>
<div ng-switch-when="m.room.name">
{{ room.lastMsg.user_id | mUserDisplayName: room.room_id }} changed the room name to: {{ room.lastMsg.content.name }}
</div>
<div ng-switch-default> <div ng-switch-default>
<div ng-if="room.lastMsg.type.indexOf('m.call.') === 0"> <div ng-if="room.lastMsg.type.indexOf('m.call.') === 0">
Call Call

View File

@ -118,6 +118,10 @@
{{ members[msg.user_id].displayname || msg.user_id }} changed the topic to: {{ msg.content.topic }} {{ members[msg.user_id].displayname || msg.user_id }} changed the topic to: {{ msg.content.topic }}
</span> </span>
<span ng-if="'m.room.name' === msg.type">
{{ members[msg.user_id].displayname || msg.user_id }} changed the room name to: {{ msg.content.name }}
</span>
</div> </div>
</td> </td>
<td class="rightBlock"> <td class="rightBlock">