mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-04 13:44:58 -04:00
Added event handler service which.. handles events. More specifically, it $broadcasts events depending on their type, and does processing on events (shuffling keys, adding events to $rootScope so displays will automatically update, sending delivery receipts, and so on). Some of this logic was previously contained in the RoomController, which fails the moment you add >1 room into the mix, hence requiring a Service to handle events, rather than having each individual controller maintain their part of the world.
This commit is contained in:
parent
8bf3994c2e
commit
5dbceaf5a4
5 changed files with 124 additions and 32 deletions
87
webclient/components/matrix/event-handler-service.js
Normal file
87
webclient/components/matrix/event-handler-service.js
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
Copyright 2014 matrix.org
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
This service handles what should happen when you get an event. This service does
|
||||
not care where the event came from, it only needs enough context to be able to
|
||||
process them. Events may be coming from the event stream, the REST API (via
|
||||
direct GETs or via a pagination stream API), etc.
|
||||
|
||||
Typically, this service will store events or broadcast them to any listeners
|
||||
(e.g. controllers) via $broadcast. Alternatively, it may update the $rootScope
|
||||
if typically all the $on method would do is update its own $scope.
|
||||
*/
|
||||
angular.module('eventHandlerService', [])
|
||||
.factory('eventHandlerService', ['matrixService', '$rootScope', function(matrixService, $rootScope) {
|
||||
var MSG_EVENT = "MSG_EVENT";
|
||||
var MEMBER_EVENT = "MEMBER_EVENT";
|
||||
var PRESENCE_EVENT = "PRESENCE_EVENT";
|
||||
|
||||
var handleMessage = function(event, isLiveEvent) {
|
||||
if ("membership_target" in event.content) {
|
||||
// event.user_id = event.content.membership_target;
|
||||
}
|
||||
|
||||
// $broadcast this, as controllers may want to do funky things such as
|
||||
// scroll to the bottom, etc which cannot be expressed via simple $scope
|
||||
// updates.
|
||||
console.log("Bcast " + JSON.stringify(event));
|
||||
$rootScope.$broadcast(MSG_EVENT, event, isLiveEvent);
|
||||
};
|
||||
|
||||
var handleRoomMember = function(event, isLiveEvent) {
|
||||
$rootScope.$broadcast(MEMBER_EVENT, event, isLiveEvent);
|
||||
};
|
||||
|
||||
var handlePresence = function(event, isLiveEvent) {
|
||||
$rootScope.$broadcast(PRESENCE_EVENT, event, isLiveEvent);
|
||||
};
|
||||
|
||||
|
||||
return {
|
||||
MSG_EVENT: MSG_EVENT,
|
||||
MEMBER_EVENT: MEMBER_EVENT,
|
||||
PRESENCE_EVENT: PRESENCE_EVENT,
|
||||
|
||||
|
||||
handleEvent: function(event, isLiveEvent) {
|
||||
switch(event.type) {
|
||||
case "m.room.message":
|
||||
handleMessage(event, isLiveEvent);
|
||||
break;
|
||||
case "m.room.member":
|
||||
handleRoomMember(event, isLiveEvent);
|
||||
break;
|
||||
case "m.presence":
|
||||
handlePresence(event, isLiveEvent);
|
||||
break;
|
||||
default:
|
||||
console.log("Unable to handle event type " + event.type);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
// isLiveEvents determines whether notifications should be shown, whether
|
||||
// messages get appended to the start/end of lists, etc.
|
||||
handleEvents: function(events, isLiveEvents) {
|
||||
for (var i=0; i<events.length; i++) {
|
||||
this.handleEvent(events[i], isLiveEvents);
|
||||
}
|
||||
}
|
||||
};
|
||||
}]);
|
Loading…
Add table
Add a link
Reference in a new issue