Skip to content
Snippets Groups Projects
Commit 99c445a6 authored by Kegan Dougal's avatar Kegan Dougal
Browse files

Migrate unread messages logic to recentsService.

parent 96cd467c
No related branches found
No related tags found
No related merge requests found
......@@ -27,15 +27,31 @@ This is preferable to polluting the $rootScope with recents specific info, and
makes the dependency on this shared state *explicit*.
*/
angular.module('recentsService', [])
.factory('recentsService', ['$rootScope', function($rootScope) {
.factory('recentsService', ['$rootScope', 'eventHandlerService', function($rootScope, eventHandlerService) {
// notify listeners when variables in the service are updated. We need to do
// this since we do not tie them to any scope.
var BROADCAST_SELECTED_ROOM_ID = "recentsService:BROADCAST_SELECTED_ROOM_ID";
var BROADCAST_SELECTED_ROOM_ID = "recentsService:BROADCAST_SELECTED_ROOM_ID(room_id)";
var selectedRoomId = undefined;
var BROADCAST_UNREAD_MESSAGES = "recentsService:BROADCAST_UNREAD_MESSAGES(room_id, unreadCount)";
var unreadMessages = {
// room_id: <number>
};
// listen for new unread messages
$rootScope.$on(eventHandlerService.MSG_EVENT, function(ngEvent, event, isLive) {
if (isLive && event.room_id !== selectedRoomId) {
if (!unreadMessages[event.room_id]) {
unreadMessages[event.room_id] = 0;
}
unreadMessages[event.room_id] += 1;
$rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, event.room_id, unreadMessages[event.room_id]);
}
});
return {
BROADCAST_SELECTED_ROOM_ID: BROADCAST_SELECTED_ROOM_ID,
BROADCAST_UNREAD_MESSAGES: BROADCAST_UNREAD_MESSAGES,
getSelectedRoomId: function() {
return selectedRoomId;
......@@ -44,6 +60,17 @@ angular.module('recentsService', [])
setSelectedRoomId: function(room_id) {
selectedRoomId = room_id;
$rootScope.$broadcast(BROADCAST_SELECTED_ROOM_ID, room_id);
},
getUnreadMessages: function() {
return unreadMessages;
},
markAsRead: function(room_id) {
if (unreadMessages[room_id]) {
unreadMessages[room_id] = 0;
}
$rootScope.$broadcast(BROADCAST_UNREAD_MESSAGES, room_id, 0);
}
};
......
......@@ -26,34 +26,22 @@ angular.module('RecentsController', ['matrixService', 'matrixFilter'])
// retrieve all rooms and expose them
$scope.rooms = modelService.getRooms();
if (!$rootScope.unreadMessages) {
$rootScope.unreadMessages = {
// room_id: <number>
};
}
// track the selected room ID: the html will use this
$scope.recentsSelectedRoomID = recentsService.getSelectedRoomId();
$scope.$on(recentsService.BROADCAST_SELECTED_ROOM_ID, function(ngEvent, room_id) {
$scope.recentsSelectedRoomID = room_id;
});
// track the list of unread messages: the html will use this
$scope.unreadMessages = recentsService.getUnreadMessages();
$scope.$on(recentsService.BROADCAST_UNREAD_MESSAGES, function(ngEvent, room_id, unreadCount) {
$scope.unreadMessages = recentsService.getUnreadMessages();
});
$scope.selectRoom = function(room) {
if ($rootScope.unreadMessages[room.room_id]) {
$rootScope.unreadMessages[room.room_id] = 0;
}
recentsService.markAsRead(room.room_id);
$rootScope.goToPage('room/' + (room.room_alias ? room.room_alias : room.room_id) );
};
$scope.$on(eventHandlerService.MSG_EVENT, function(ngEvent, event, isLive) {
if (isLive && event.room_id !== $scope.recentsSelectedRoomID) {
if (!$rootScope.unreadMessages[event.room_id]) {
$rootScope.unreadMessages[event.room_id] = 0;
}
$rootScope.unreadMessages[event.room_id] += 1;
console.log("sel="+$scope.recentsSelectedRoomID+" unread:"+JSON.stringify($rootScope.unreadMessages, undefined, 2));
}
});
}]);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment