From d0858070703706d6938c5af9d273c90fcffd06ce Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Thu, 13 Nov 2014 15:21:42 +0000 Subject: [PATCH] Migrate random bits of desktop notification logic out of roomController and into eventHandlerService where everything else is. --- .../matrix/event-handler-service.js | 42 ++++++++++++++----- syweb/webclient/room/room-controller.js | 23 +--------- 2 files changed, 33 insertions(+), 32 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); + } } diff --git a/syweb/webclient/room/room-controller.js b/syweb/webclient/room/room-controller.js index 7094a703f0..f68a2b504d 100644 --- a/syweb/webclient/room/room-controller.js +++ b/syweb/webclient/room/room-controller.js @@ -15,8 +15,8 @@ limitations under the License. */ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput', 'angular-peity']) -.controller('RoomController', ['$modal', '$filter', '$scope', '$timeout', '$routeParams', '$location', '$rootScope', 'matrixService', 'mPresence', 'eventHandlerService', 'mFileUpload', 'matrixPhoneService', 'MatrixCall', 'notificationService', 'modelService', 'recentsService', 'commandsService', - function($modal, $filter, $scope, $timeout, $routeParams, $location, $rootScope, matrixService, mPresence, eventHandlerService, mFileUpload, matrixPhoneService, MatrixCall, notificationService, modelService, recentsService, commandsService) { +.controller('RoomController', ['$modal', '$filter', '$scope', '$timeout', '$routeParams', '$location', '$rootScope', 'matrixService', 'mPresence', 'eventHandlerService', 'mFileUpload', 'matrixPhoneService', 'MatrixCall', 'modelService', 'recentsService', 'commandsService', + function($modal, $filter, $scope, $timeout, $routeParams, $location, $rootScope, matrixService, mPresence, eventHandlerService, mFileUpload, matrixPhoneService, MatrixCall, modelService, recentsService, commandsService) { 'use strict'; var MESSAGES_PER_PAGINATION = 30; var THUMBNAIL_SIZE = 320; @@ -185,25 +185,6 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput', 'a else { scrollToBottom(); updateMemberList(event); - - // Notify when a user joins - if ((document.hidden || matrixService.presence.unavailable === mPresence.getState()) - && event.state_key !== $scope.state.user_id && "join" === event.membership) { - var userName = event.content.displayname; - if (!userName) { - userName = event.state_key; - } - notificationService.showNotification( - userName + - " (" + $filter("mRoomName")(event.room_id) + ")", - userName + " 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); - } - ); - } } } });