summary refs log tree commit diff
path: root/syweb/webclient/components
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2014-11-13 15:21:42 +0000
committerKegan Dougal <kegan@matrix.org>2014-11-13 15:21:50 +0000
commitd0858070703706d6938c5af9d273c90fcffd06ce (patch)
tree022fc19b446c899165be8ea15f273bbd6a9ea8e6 /syweb/webclient/components
parentremove stray unmatched css comment (diff)
downloadsynapse-d0858070703706d6938c5af9d273c90fcffd06ce.tar.xz
Migrate random bits of desktop notification logic out of roomController and into eventHandlerService where everything else is.
Diffstat (limited to '')
-rw-r--r--syweb/webclient/components/matrix/event-handler-service.js42
1 files changed, 31 insertions, 11 deletions
diff --git a/syweb/webclient/components/matrix/event-handler-service.js b/syweb/webclient/components/matrix/event-handler-service.js
index 6645d20374..e97350005e 100644
--- a/syweb/webclient/components/matrix/event-handler-service.js
+++ b/syweb/webclient/components/matrix/event-handler-service.js
@@ -110,7 +110,33 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
     
     var displayNotification = function(event) {
         if (window.Notification && event.user_id != matrixService.config().user_id) {
-            var shouldBing = containsBingWord(event);
+            var member = modelService.getMember(event.room_id, event.user_id);
+            var displayname = getUserDisplayName(event.room_id, event.user_id);
+            var message;
+            var shouldBing = false;
+            
+            if (event.type === "m.room.message") {
+                shouldBing = containsBingWord(event);
+                message = event.content.body;
+                if (event.content.msgtype === "m.emote") {
+                    message = "* " + displayname + " " + message;
+                }
+                else if (event.content.msgtype === "m.image") {
+                    message = displayname + " sent an image.";
+                }
+            }
+            else if (event.type == "m.room.member") {
+                // Notify when another user joins only
+                if (event.state_key !== matrixService.config().user_id  && "join" === event.content.membership) {
+                    member = modelService.getMember(event.room_id, event.state_key);
+                    displayname = getUserDisplayName(event.room_id, event.state_key);
+                    message = displayname + " joined";
+                    shouldBing = true;
+                }
+                else {
+                    return;
+                }
+            }
 
             // Ideally we would notify only when the window is hidden (i.e. document.hidden = true).
             //
@@ -133,17 +159,7 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
             
             if (shouldBing && isIdle) {
                 console.log("Displaying notification for "+JSON.stringify(event));
-                var member = modelService.getMember(event.room_id, event.user_id);
-                var displayname = getUserDisplayName(event.room_id, event.user_id);
 
-                var message = event.content.body;
-                if (event.content.msgtype === "m.emote") {
-                    message = "* " + displayname + " " + message;
-                }
-                else if (event.content.msgtype === "m.image") {
-                    message = displayname + " sent an image.";
-                }
-                
                 var roomTitle = $filter("mRoomName")(event.room_id);
                 
                 notificationService.showNotification(
@@ -240,6 +256,10 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
         // list. This has to be done after room state is updated.
         if (memberChanges) {
             room.addMessageEvent(event, !isLiveEvent);
+            
+            if (memberChanges === "membership" && isLiveEvent) {
+                displayNotification(event);
+            }
         }