diff --git a/webclient/components/matrix/event-handler-service.js b/webclient/components/matrix/event-handler-service.js
index bcf805fc73..e63584510b 100644
--- a/webclient/components/matrix/event-handler-service.js
+++ b/webclient/components/matrix/event-handler-service.js
@@ -212,22 +212,15 @@ function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService
roomTitle = event.room_id;
}
- var notification = new window.Notification(
- displayname +
- " (" + roomTitle + ")",
- {
- "body": message,
- "icon": member ? member.avatar_url : undefined
- });
-
- notification.onclick = function() {
- console.log("notification.onclick() room=" + event.room_id);
- $rootScope.goToPage('room/' + (event.room_id));
- };
-
- $timeout(function() {
- notification.close();
- }, 5 * 1000);
+ notificationService.showNotification(
+ displayname + " (" + roomTitle + ")",
+ message,
+ member ? member.avatar_url : undefined,
+ function() {
+ console.log("notification.onclick() room=" + event.room_id);
+ $rootScope.goToPage('room/' + event.room_id);
+ }
+ );
}
}
}
diff --git a/webclient/components/matrix/notification-service.js b/webclient/components/matrix/notification-service.js
index 7821248846..9a911413c3 100644
--- a/webclient/components/matrix/notification-service.js
+++ b/webclient/components/matrix/notification-service.js
@@ -21,7 +21,7 @@ This service manages notifications: enabling, creating and showing them. This
also contains 'bing word' logic.
*/
angular.module('notificationService', [])
-.factory('notificationService', function($rootScope) {
+.factory('notificationService', ['$timeout', function($timeout) {
var getLocalPartFromUserId = function(user_id) {
if (!user_id) {
@@ -80,7 +80,25 @@ angular.module('notificationService', [])
}
}
return false;
+ },
+
+ showNotification: function(title, body, icon, onclick) {
+ var notification = new window.Notification(
+ title,
+ {
+ "body": body,
+ "icon": icon
+ }
+ );
+
+ if (onclick) {
+ notification.onclick = onclick;
+ }
+
+ $timeout(function() {
+ notification.close();
+ }, 5 * 1000);
}
};
-});
+}]);
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index 2af1e8ae29..45638acaa6 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -201,16 +201,17 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
// Notify when a user joins
if ((document.hidden || matrixService.presence.unavailable === mPresence.getState())
&& event.state_key !== $scope.state.user_id && "join" === event.membership) {
- var notification = new window.Notification(
+
+ notificationService.showNotification(
event.content.displayname +
- " (" + (matrixService.getRoomIdToAliasMapping(event.room_id) || event.room_id) + ")", // FIXME: don't leak room_ids here
- {
- "body": event.content.displayname + " joined",
- "icon": event.content.avatar_url ? event.content.avatar_url : undefined
- });
- $timeout(function() {
- notification.close();
- }, 5 * 1000);
+ " (" + (matrixService.getRoomIdToAliasMapping(event.room_id) || event.room_id) + ")",
+ event.content.displayname + " 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);
+ }
+ );
}
}
}
|