summary refs log tree commit diff
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-10-31 11:54:04 +0000
committerKegan Dougal <kegan@matrix.org>2014-10-31 11:54:04 +0000
commit20cf0b7aeb42c49bce199206130b5498b0fc293c (patch)
treef5fc222e4aaff780e570bbd2ac38d60246f769d0
parentAdd notification-service.js to handle binging/notifications. Shift logic to t... (diff)
downloadsynapse-20cf0b7aeb42c49bce199206130b5498b0fc293c.tar.xz
Factor out notification logic.
Diffstat (limited to '')
-rw-r--r--webclient/components/matrix/event-handler-service.js25
-rw-r--r--webclient/components/matrix/notification-service.js22
-rw-r--r--webclient/room/room-controller.js19
3 files changed, 39 insertions, 27 deletions
diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js
index bcf805fc73..e63584510b 100644
--- a/webclient/components/matrix/event-handler-service.js
+++ b/webclient/components/matrix/event-handler-service.js
@@ -212,22 +212,15 @@ function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService
                         roomTitle = event.room_id;
                     }
                     
-                    var notification = new window.Notification(
-                        displayname +
-                        " (" + roomTitle + ")",
-                    {
-                        "body": message,
-                        "icon": member ? member.avatar_url : undefined
-                    });
-
-                    notification.onclick = function() {
-                        console.log("notification.onclick() room=" + event.room_id);
-                        $rootScope.goToPage('room/' + (event.room_id)); 
-                    };
-
-                    $timeout(function() {
-                        notification.close();
-                    }, 5 * 1000);
+                    notificationService.showNotification(
+                        displayname + " (" + roomTitle + ")",
+                        message,
+                        member ? member.avatar_url : undefined,
+                        function() {
+                            console.log("notification.onclick() room=" + event.room_id);
+                            $rootScope.goToPage('room/' + event.room_id); 
+                        }
+                    );
                 }
             }
         }
diff --git a/webclient/components/matrix/notification-service.js b/webclient/components/matrix/notification-service.js
index 7821248846..9a911413c3 100644
--- a/webclient/components/matrix/notification-service.js
+++ b/webclient/components/matrix/notification-service.js
@@ -21,7 +21,7 @@ This service manages notifications: enabling, creating and showing them. This
 also contains 'bing word' logic.
 */
 angular.module('notificationService', [])
-.factory('notificationService', function($rootScope) {
+.factory('notificationService', ['$timeout', function($timeout) {
 
     var getLocalPartFromUserId = function(user_id) {
         if (!user_id) {
@@ -80,7 +80,25 @@ angular.module('notificationService', [])
                 }
             }
             return false;
+        },
+        
+        showNotification: function(title, body, icon, onclick) {
+            var notification = new window.Notification(
+                title,
+                {
+                    "body": body,
+                    "icon": icon
+                }
+            );
+
+            if (onclick) {
+                notification.onclick = onclick;
+            }
+
+            $timeout(function() {
+                notification.close();
+            }, 5 * 1000);
         }
     };
 
-});
+}]);
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index 2af1e8ae29..45638acaa6 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -201,16 +201,17 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
                 // Notify when a user joins
                 if ((document.hidden  || matrixService.presence.unavailable === mPresence.getState())
                         && event.state_key !== $scope.state.user_id  && "join" === event.membership) {
-                    var notification = new window.Notification(
+                        
+                    notificationService.showNotification(
                         event.content.displayname +
-                        " (" + (matrixService.getRoomIdToAliasMapping(event.room_id) || event.room_id) + ")", // FIXME: don't leak room_ids here
-                    {
-                        "body": event.content.displayname + " joined",
-                        "icon": event.content.avatar_url ? event.content.avatar_url : undefined
-                    });
-                    $timeout(function() {
-                        notification.close();
-                    }, 5 * 1000);
+                        " (" + (matrixService.getRoomIdToAliasMapping(event.room_id) || event.room_id) + ")",
+                        event.content.displayname + " joined",
+                        event.content.avatar_url ? event.content.avatar_url : undefined,
+                        function() {
+                            console.log("notification.onclick() room=" + event.room_id);
+                            $rootScope.goToPage('room/' + event.room_id); 
+                        }
+                    );
                 }
             }
         }