Move the notification logic out of an individual room controller and into the general event handler, so we can notify for >1 room.
This commit is contained in:
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.
|
if typically all the $on method would do is update its own $scope.
|
||||||
*/
|
*/
|
||||||
angular.module('eventHandlerService', [])
|
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 ROOM_CREATE_EVENT = "ROOM_CREATE_EVENT";
|
||||||
var MSG_EVENT = "MSG_EVENT";
|
var MSG_EVENT = "MSG_EVENT";
|
||||||
var MEMBER_EVENT = "MEMBER_EVENT";
|
var MEMBER_EVENT = "MEMBER_EVENT";
|
||||||
|
@ -137,6 +138,23 @@ angular.module('eventHandlerService', [])
|
||||||
else {
|
else {
|
||||||
$rootScope.events.rooms[event.room_id].messages.push(event);
|
$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 {
|
else {
|
||||||
$rootScope.events.rooms[event.room_id].messages.unshift(event);
|
$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) {
|
if (isLive && event.room_id === $scope.room_id) {
|
||||||
|
|
||||||
scrollToBottom();
|
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