Migrate unread messages logic to recentsService.

This commit is contained in:
Kegan Dougal 2014-11-12 15:11:34 +00:00
parent 96cd467cfa
commit 99c445a6d6
2 changed files with 36 additions and 21 deletions

View file

@ -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);
}
};