(function () { "use strict"; angular.module('laz.videoLibrary') .provider('videos', function() { var preloadedCurrentVideo = null; var preloadedCategories = null; var currentVideoId = null; var groupType = 'videolibrary'; function videosFactory(videoApi, $q, EventEmitter){ var eventEmitter = new EventEmitter(); var CURRENT_VIDEO_CHANGE_EVENT = 'currentVideoChange'; var videoPromisesByVideoId = {}; var videoCategoriesPromise = null; if(preloadedCurrentVideo){ currentVideoId = preloadedCurrentVideo.id; videoPromisesByVideoId[currentVideoId] = $q.resolve(preloadedCurrentVideo); } if(preloadedCategories){ videoCategoriesPromise = $q.resolve(preloadedCategories); } return { getCurrentVideoId: getCurrentVideoId, setCurrentVideo: setCurrentVideo, getCurrentVideo: getCurrentVideo, onCurrentVideoChanged: onCurrentVideoChanged, getVideoCardCategories: getVideoCardCategories, clearCache: clearCache, setVideoGroupType: setVideoGroupType, }; function getCurrentVideoId(){ return currentVideoId; } function setCurrentVideo(videoId){ if(videoId && (isNaN(parseInt(videoId)) || parseInt(currentVideoId) === parseInt(videoId))){ return; } console.debug("current: " + currentVideoId + " => new: " + videoId); currentVideoId = videoId || undefined; eventEmitter.emit(CURRENT_VIDEO_CHANGE_EVENT, currentVideoId); } function getCurrentVideo(){ var FEATURED_SENTINEL_ID = videoApi.FEATURED_SENTINEL_ID; var FEATURED_GETTING_STARTED_ID = videoApi.FEATURED_GETTING_STARTED_ID; if (groupType == 'gettingstarted') { var idToSearch = currentVideoId || FEATURED_GETTING_STARTED_ID } else { var idToSearch = currentVideoId || FEATURED_SENTINEL_ID; } if (!videoPromisesByVideoId[idToSearch]){ var videoPromise = videoApi.findById(idToSearch, videoApi.VIEW_TYPES.PLAYABLE); if (idToSearch === FEATURED_SENTINEL_ID){ videoPromise = videoPromise.then(function(video){ videoPromisesByVideoId[video.id] = videoPromisesByVideoId[video.id] || videoPromisesByVideoId[FEATURED_SENTINEL_ID]; return video; }); } else { videoPromise = videoPromise.then(function(video){ videoPromisesByVideoId[video.id] = videoPromisesByVideoId[video.id] || videoPromisesByVideoId[FEATURED_GETTING_STARTED_ID]; return video; }); } videoPromisesByVideoId[idToSearch] = videoPromise; } console.debug(videoPromisesByVideoId); return videoPromisesByVideoId[idToSearch]; } function onCurrentVideoChanged(callback){ eventEmitter.on(CURRENT_VIDEO_CHANGE_EVENT, callback); return function(){ eventEmitter.off(CURRENT_VIDEO_CHANGE_EVENT, callback); }; } function getVideoCardCategories(){ if (!videoCategoriesPromise){ if (groupType == 'gettingstarted') { videoCategoriesPromise = videoApi.findGettingStartedCategories(videoApi.VIEW_TYPES.CARD); } else { videoCategoriesPromise = videoApi.findCategories(videoApi.VIEW_TYPES.CARD); } } return videoCategoriesPromise; } function clearCache(){ videoPromisesByVideoId = {}; videoCategoriesPromise = null; } } function loadCurrentVideo(video){ preloadedCurrentVideo = video; } function loadVideoCardCategories(categories){ preloadedCategories = categories; } function setVideoGroupType(type) { groupType = type; } return { loadCurrentVideo: loadCurrentVideo, loadVideoCardCategories: loadVideoCardCategories, $get: ['videoApi', '$q', 'EventEmitter', videosFactory ] }; }) })();