summary refs log tree commit diff
path: root/syweb/webclient/components
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-11-12 15:11:34 +0000
committerKegan Dougal <kegan@matrix.org>2014-11-12 15:11:34 +0000
commit99c445a6d69f0560c08c0264d9b844a4b03599b6 (patch)
tree65b08409b51b5126c9c462f5b19d29240a253cce /syweb/webclient/components
parentAdd recents-service to store shared state between recents-controllers. (diff)
downloadsynapse-99c445a6d69f0560c08c0264d9b844a4b03599b6.tar.xz
Migrate unread messages logic to recentsService.
Diffstat (limited to 'syweb/webclient/components')
-rw-r--r--syweb/webclient/components/matrix/recents-service.js31
1 files changed, 29 insertions, 2 deletions
diff --git a/syweb/webclient/components/matrix/recents-service.js b/syweb/webclient/components/matrix/recents-service.js
index 64d1ab93b4..237f1e3912 100644
--- a/syweb/webclient/components/matrix/recents-service.js
+++ b/syweb/webclient/components/matrix/recents-service.js
@@ -27,15 +27,31 @@ This is preferable to polluting the $rootScope with recents specific info, and
 makes the dependency on this shared state *explicit*.
 */
 angular.module('recentsService', [])
-.factory('recentsService', ['$rootScope', function($rootScope) {
+.factory('recentsService', ['$rootScope', 'eventHandlerService', function($rootScope, eventHandlerService) {
     // notify listeners when variables in the service are updated. We need to do
     // this since we do not tie them to any scope.
-    var BROADCAST_SELECTED_ROOM_ID = "recentsService:BROADCAST_SELECTED_ROOM_ID";
+    var BROADCAST_SELECTED_ROOM_ID = "recentsService:BROADCAST_SELECTED_ROOM_ID(room_id)";
     var selectedRoomId = undefined;
     
+    var BROADCAST_UNREAD_MESSAGES = "recentsService:BROADCAST_UNREAD_MESSAGES(room_id, unreadCount)";
+    var unreadMessages = {
+        // room_id: <number>
+    };
+    
+    // listen for new unread messages
+    $rootScope.$on(eventHandlerService.MSG_EVENT, function(ngEvent, event, isLive) {
+        if (isLive && event.room_id !== selectedRoomId) {
+            if (!unreadMessages[event.room_id]) {
+                unreadMessages[event.room_id] = 0;
+            }
+            unreadMessages[event.room_id] += 1;
+            $rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, event.room_id, unreadMessages[event.room_id]);
+        }
+    });
     
     return {
         BROADCAST_SELECTED_ROOM_ID: BROADCAST_SELECTED_ROOM_ID,
+        BROADCAST_UNREAD_MESSAGES: BROADCAST_UNREAD_MESSAGES,
     
         getSelectedRoomId: function() {
             return selectedRoomId;
@@ -44,6 +60,17 @@ angular.module('recentsService', [])
         setSelectedRoomId: function(room_id) {
             selectedRoomId = room_id;
             $rootScope.$broadcast(BROADCAST_SELECTED_ROOM_ID, room_id);
+        },
+        
+        getUnreadMessages: function() {
+            return unreadMessages;
+        },
+        
+        markAsRead: function(room_id) {
+            if (unreadMessages[room_id]) {
+                unreadMessages[room_id] = 0;
+            }
+            $rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, room_id, 0);
         }
     
     };