FeedBunch-app/app/assets/javascripts/ng-services/ng-LoadFoldersSvc.js.coffee.erb
########################################################
# AngularJS service to load folders
########################################################
angular.module('feedbunch').service 'loadFoldersSvc',
['$rootScope', 'csrfTokenSvc', 'findSvc', 'cleanupSvc', 'timerFlagSvc',
($rootScope, csrfTokenSvc, findSvc, cleanupSvc, timerFlagSvc)->
# CSRF token
token = csrfTokenSvc.get_token()
# Web worker to load folders
worker = new Worker '<%= asset_path 'workers/load_folders_worker' %>'
worker.onmessage = (e) ->
if e.data.status == 200 || e.data.status == 304
folders_loaded e.data.response
else if e.data.status == 401 || e.data.status == 422
$window.location.href = '/login'
else
$rootScope.folders_loaded = true
timerFlagSvc.start 'error_loading_folders'
$rootScope.$digest()
#--------------------------------------------
# PRIVATE FUNCTION: Operations after folders have been loaded
#--------------------------------------------
folders_loaded = (response)->
# Remove folders no longer existing in the server
if $rootScope.folders? && $rootScope.folders?.length > 0
for folder in $rootScope.folders
existing_folder = findSvc.find_folder folder.id, response
if !existing_folder?
cleanupSvc.remove_folder folder.id
# Add new folders
if response? && response.length? > 0
for folder in response
add_folder folder
$rootScope.folders_loaded = true
#---------------------------------------------
# PRIVATE FUNCTION: Push a folder in the folders array if it isn't already present there.
#
# If the folders array has not been created in the root scope, create it.
#
# If the folder is already in the folders array, it is ignored
#---------------------------------------------
add_folder = (folder)->
if !$rootScope.folders || $rootScope.folders?.length == 0
$rootScope.folders = [folder]
else
old_folder = findSvc.find_folder folder.id
$rootScope.folders.push folder if !old_folder?
service =
#--------------------------------------------
# Load folders via AJAX into the root scope.
#--------------------------------------------
load_folders: ->
worker.postMessage {token: token}
#---------------------------------------------
# Push a folder in the folders array.
#---------------------------------------------
add_folder: add_folder
return service
]