Move the notification logic out of an individual room controller and into the general event handler, so we can notify for >1 room.
parent
b170fe921e
commit
660364d6a7
|
@ -27,7 +27,8 @@ Typically, this service will store events or broadcast them to any listeners
|
|||
if typically all the $on method would do is update its own $scope.
|
||||
*/
|
||||
angular.module('eventHandlerService', [])
|
||||
.factory('eventHandlerService', ['matrixService', '$rootScope', '$q', function(matrixService, $rootScope, $q) {
|
||||
.factory('eventHandlerService', ['matrixService', '$rootScope', '$q', '$timeout', 'mPresence',
|
||||
function(matrixService, $rootScope, $q, $timeout, mPresence) {
|
||||
var ROOM_CREATE_EVENT = "ROOM_CREATE_EVENT";
|
||||
var MSG_EVENT = "MSG_EVENT";
|
||||
var MEMBER_EVENT = "MEMBER_EVENT";
|
||||
|
@ -137,6 +138,23 @@ angular.module('eventHandlerService', [])
|
|||
else {
|
||||
$rootScope.events.rooms[event.room_id].messages.push(event);
|
||||
}
|
||||
|
||||
if (window.Notification) {
|
||||
// Show notification when the window is hidden, or the user is idle
|
||||
if (document.hidden || matrixService.presence.unavailable === mPresence.getState()) {
|
||||
console.log("Displaying notification for "+JSON.stringify(event));
|
||||
var notification = new window.Notification(
|
||||
($rootScope.events.rooms[event.room_id].members[event.user_id].displayname || event.user_id) +
|
||||
" (" + (matrixService.getRoomIdToAliasMapping(event.room_id) || event.room_id) + ")", // FIXME: don't leak room_ids here
|
||||
{
|
||||
"body": event.content.body,
|
||||
"icon": $rootScope.events.rooms[event.room_id].members[event.user_id].avatar_url
|
||||
});
|
||||
$timeout(function() {
|
||||
notification.close();
|
||||
}, 5 * 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$rootScope.events.rooms[event.room_id].messages.unshift(event);
|
||||
|
|
|
@ -139,22 +139,6 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
|
|||
if (isLive && event.room_id === $scope.room_id) {
|
||||
|
||||
scrollToBottom();
|
||||
|
||||
if (window.Notification) {
|
||||
// Show notification when the window is hidden, or the user is idle
|
||||
if (document.hidden || matrixService.presence.unavailable === mPresence.getState()) {
|
||||
var notification = new window.Notification(
|
||||
($scope.members[event.user_id].displayname || event.user_id) +
|
||||
" (" + ($scope.room_alias || $scope.room_id) + ")", // FIXME: don't leak room_ids here
|
||||
{
|
||||
"body": event.content.body,
|
||||
"icon": $scope.members[event.user_id].avatar_url
|
||||
});
|
||||
$timeout(function() {
|
||||
notification.close();
|
||||
}, 5 * 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue