summary refs log tree commit diff
path: root/webclient/components
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-08-15 12:51:20 +0100
committerKegan Dougal <kegan@matrix.org>2014-08-15 14:06:56 +0100
commitc51cf4efcaad26695382924e142d9a1ad2658754 (patch)
tree51b1aa02354c5c4d8975c7aa33ec059866ab294e /webclient/components
parentAdded event handler service which.. handles events. More specifically, it $br... (diff)
downloadsynapse-c51cf4efcaad26695382924e142d9a1ad2658754.tar.xz
Store messages in $rootScope so they can be accessed from multiple controllers without duplicated storage for each. This also gives updates.
Diffstat (limited to 'webclient/components')
-rw-r--r--webclient/components/matrix/event-handler-service.js26
1 files changed, 24 insertions, 2 deletions
diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js
index 30d7ab35ca..f7411fd80a 100644
--- a/webclient/components/matrix/event-handler-service.js
+++ b/webclient/components/matrix/event-handler-service.js
@@ -32,15 +32,37 @@ angular.module('eventHandlerService', [])
     var MEMBER_EVENT = "MEMBER_EVENT";
     var PRESENCE_EVENT = "PRESENCE_EVENT";
     
+    $rootScope.events = {
+        rooms: {}, // will contain roomId: { messages:[], members:[] }
+    };
+    
+    var initRoom = function(room_id) {
+        console.log("Creating new handler entry for " + room_id);
+        $rootScope.events.rooms[room_id] = {};
+        $rootScope.events.rooms[room_id].messages = [];
+        $rootScope.events.rooms[room_id].members = [];
+    }
+    
     var handleMessage = function(event, isLiveEvent) {
         if ("membership_target" in event.content) {
-            // event.user_id = event.content.membership_target;
+            event.user_id = event.content.membership_target;
+        }
+        if (!(event.room_id in $rootScope.events.rooms)) {
+            initRoom(event.room_id);
         }
         
+        if (isLiveEvent) {
+            $rootScope.events.rooms[event.room_id].messages.push(event);
+        }
+        else {
+            $rootScope.events.rooms[event.room_id].messages.unshift(event);
+        }
+        
+        // TODO send delivery receipt if isLiveEvent
+        
         // $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);
     };