diff --git a/syweb/webclient/components/matrix/event-handler-service.js b/syweb/webclient/components/matrix/event-handler-service.js
index 7b2a75507d..6645d20374 100644
--- a/syweb/webclient/components/matrix/event-handler-service.js
+++ b/syweb/webclient/components/matrix/event-handler-service.js
@@ -95,14 +95,22 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
modelService.createRoomIdToAliasMapping(event.room_id, event.content.aliases[0]);
};
+ var containsBingWord = function(event) {
+ if (!event.content || !event.content.body) {
+ return false;
+ }
+
+ return notificationService.containsBingWord(
+ matrixService.config().user_id,
+ matrixService.config().display_name,
+ matrixService.config().bingWords,
+ event.content.body
+ );
+ };
+
var displayNotification = function(event) {
if (window.Notification && event.user_id != matrixService.config().user_id) {
- var shouldBing = notificationService.containsBingWord(
- matrixService.config().user_id,
- matrixService.config().display_name,
- matrixService.config().bingWords,
- event.content.body
- );
+ var shouldBing = containsBingWord(event);
// Ideally we would notify only when the window is hidden (i.e. document.hidden = true).
//
@@ -529,6 +537,10 @@ function(matrixService, $rootScope, $q, $timeout, $filter, mPresence, notificati
resetRoomMessages(room_id);
},
+ eventContainsBingWord: function(event) {
+ return containsBingWord(event);
+ },
+
/**
* Return the last message event of a room
* @param {String} room_id the room id
diff --git a/syweb/webclient/components/matrix/recents-service.js b/syweb/webclient/components/matrix/recents-service.js
index 237f1e3912..3d82b8218b 100644
--- a/syweb/webclient/components/matrix/recents-service.js
+++ b/syweb/webclient/components/matrix/recents-service.js
@@ -38,9 +38,22 @@ angular.module('recentsService', [])
// room_id: <number>
};
+ var BROADCAST_UNREAD_BING_MESSAGES = "recentsService:BROADCAST_UNREAD_BING_MESSAGES(room_id, event)";
+ var unreadBingMessages = {
+ // room_id: bingEvent
+ };
+
// listen for new unread messages
$rootScope.$on(eventHandlerService.MSG_EVENT, function(ngEvent, event, isLive) {
if (isLive && event.room_id !== selectedRoomId) {
+ if (eventHandlerService.eventContainsBingWord(event)) {
+ if (!unreadBingMessages[event.room_id]) {
+ unreadBingMessages[event.room_id] = {};
+ }
+ unreadBingMessages[event.room_id] = event;
+ $rootScope.$broadcast(BROADCAST_UNREAD_BING_MESSAGES, event.room_id, event);
+ }
+
if (!unreadMessages[event.room_id]) {
unreadMessages[event.room_id] = 0;
}
@@ -66,11 +79,19 @@ angular.module('recentsService', [])
return unreadMessages;
},
+ getUnreadBingMessages: function() {
+ return unreadBingMessages;
+ },
+
markAsRead: function(room_id) {
if (unreadMessages[room_id]) {
unreadMessages[room_id] = 0;
}
+ if (unreadBingMessages[room_id]) {
+ unreadBingMessages[room_id] = undefined;
+ }
$rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, room_id, 0);
+ $rootScope.$broadcast(BROADCAST_UNREAD_BING_MESSAGES, room_id, undefined);
}
};
|