dedup all events

This commit is contained in:
Matthew Hodgson 2014-09-06 00:36:55 -07:00
parent a1bf28b7f0
commit 6e341aebab

View File

@ -41,6 +41,11 @@ angular.module('eventHandlerService', [])
$rootScope.events = { $rootScope.events = {
rooms: {} // will contain roomId: { messages:[], members:{userid1: event} } rooms: {} // will contain roomId: { messages:[], members:{userid1: event} }
}; };
// used for dedupping events - could be expanded in future...
// FIXME: means that we leak memory over time (along with lots of the rest
// of the app, given we never try to reap memory yet)
var eventMap = {};
$rootScope.presence = {}; $rootScope.presence = {};
@ -155,43 +160,49 @@ angular.module('eventHandlerService', [])
POWERLEVEL_EVENT: POWERLEVEL_EVENT, POWERLEVEL_EVENT: POWERLEVEL_EVENT,
CALL_EVENT: CALL_EVENT, CALL_EVENT: CALL_EVENT,
NAME_EVENT: NAME_EVENT, NAME_EVENT: NAME_EVENT,
handleEvent: function(event, isLiveEvent) { handleEvent: function(event, isLiveEvent) {
switch(event.type) { if (eventMap[event.event_id]) {
case "m.room.create": console.log("discarding duplicate event: " + JSON.stringify(event));
handleRoomCreate(event, isLiveEvent); return;
break;
case "m.room.aliases":
handleRoomAliases(event, isLiveEvent);
break;
case "m.room.message":
handleMessage(event, isLiveEvent);
break;
case "m.room.member":
handleRoomMember(event, isLiveEvent);
break;
case "m.presence":
handlePresence(event, isLiveEvent);
break;
case 'm.room.ops_levels':
case 'm.room.send_event_level':
case 'm.room.add_state_level':
case 'm.room.join_rules':
case 'm.room.power_levels':
handlePowerLevels(event, isLiveEvent);
break;
case 'm.room.name':
handleRoomName(event, isLiveEvent);
break;
default:
console.log("Unable to handle event type " + event.type);
console.log(JSON.stringify(event, undefined, 4));
break;
} }
if (event.type.indexOf('m.call.') === 0) { if (event.type.indexOf('m.call.') === 0) {
handleCallEvent(event, isLiveEvent); handleCallEvent(event, isLiveEvent);
} }
else {
switch(event.type) {
case "m.room.create":
handleRoomCreate(event, isLiveEvent);
break;
case "m.room.aliases":
handleRoomAliases(event, isLiveEvent);
break;
case "m.room.message":
handleMessage(event, isLiveEvent);
break;
case "m.room.member":
handleRoomMember(event, isLiveEvent);
break;
case "m.presence":
handlePresence(event, isLiveEvent);
break;
case 'm.room.ops_levels':
case 'm.room.send_event_level':
case 'm.room.add_state_level':
case 'm.room.join_rules':
case 'm.room.power_levels':
handlePowerLevels(event, isLiveEvent);
break;
case 'm.room.name':
handleRoomName(event, isLiveEvent);
break;
default:
console.log("Unable to handle event type " + event.type);
console.log(JSON.stringify(event, undefined, 4));
break;
}
}
}, },
// isLiveEvents determines whether notifications should be shown, whether // isLiveEvents determines whether notifications should be shown, whether