define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'layoutManager', 'imageLoader', 'globalize', 'itemShortcuts', 'itemHelper', 'appRouter', 'scripts/imagehelper','paper-icon-button-light', 'emby-itemscontainer', 'emby-scroller', 'emby-button', 'css!./homesections'], function (connectionManager, cardBuilder, appSettings, dom, appHost, layoutManager, imageLoader, globalize, itemShortcuts, itemHelper, appRouter, imageHelper) { 'use strict'; function getDefaultSection(index) { switch (index) { case 0: return 'smalllibrarytiles'; case 1: return 'resume'; case 2: return 'resumeaudio'; case 3: return 'livetv'; case 4: return 'nextup'; case 5: return 'latestmedia'; case 6: return 'none'; default: return ''; } } function getAllSectionsToShow(userSettings, sectionCount) { var sections = []; for (var i = 0, length = sectionCount; i < length; i++) { var section = userSettings.get('homesection' + i) || getDefaultSection(i); if (section === 'folders') { section = getDefaultSection(0); } sections.push(section); } return sections; } function loadSections(elem, apiClient, user, userSettings) { return getUserViews(apiClient, user.Id).then(function (userViews) { var html = ''; var sectionCount = 7; for (var i = 0; i < sectionCount; i++) { html += '
'; } elem.innerHTML = html; elem.classList.add('homeSectionsContainer'); var promises = []; var sections = getAllSectionsToShow(userSettings, sectionCount); for (var i = 0; i < sections.length; i++) { promises.push(loadSection(elem, apiClient, user, userSettings, userViews, sections, i)); } return Promise.all(promises).then(function () { return resume(elem, { refresh: true, returnPromise: false }); }); }); } function destroySections(elem) { var elems = elem.querySelectorAll('.itemsContainer'); for (var i = 0; i < elems.length; i++) { elems[i].fetchData = null; elems[i].parentContainer = null; elems[i].getItemsHtml = null; } elem.innerHTML = ''; } function pause(elem) { var elems = elem.querySelectorAll('.itemsContainer'); for (var i = 0; i < elems.length; i++) { elems[i].pause(); } } function resume(elem, options) { var elems = elem.querySelectorAll('.itemsContainer'); var i, length; var promises = []; for (i = 0, length = elems.length; i < length; i++) { promises.push(elems[i].resume(options)); } var promise = Promise.all(promises); if (!options || options.returnPromise !== false) { return promise; } } function loadSection(page, apiClient, user, userSettings, userViews, allSections, index) { var section = allSections[index]; var userId = user.Id; var elem = page.querySelector('.section' + index); if (section === 'latestmedia') { loadRecentlyAdded(elem, apiClient, user, userViews); } else if (section === 'librarytiles' || section === 'smalllibrarytiles' || section === 'smalllibrarytiles-automobile' || section === 'librarytiles-automobile') { loadLibraryTiles(elem, apiClient, user, userSettings, 'smallBackdrop', userViews, allSections); } else if (section === 'librarybuttons') { loadlibraryButtons(elem, apiClient, user, userSettings, userViews, allSections); } else if (section === 'resume') { loadResumeVideo(elem, apiClient, userId); } else if (section === 'resumeaudio') { loadResumeAudio(elem, apiClient, userId); } else if (section === 'activerecordings') { loadLatestLiveTvRecordings(elem, true, apiClient, userId); } else if (section === 'nextup') { loadNextUp(elem, apiClient, userId); } else if (section === 'onnow' || section === 'livetv') { return loadOnNow(elem, apiClient, user); } else { elem.innerHTML = ''; return Promise.resolve(); } return Promise.resolve(); } function getUserViews(apiClient, userId) { return apiClient.getUserViews({}, userId || apiClient.getCurrentUserId()).then(function (result) { return result.Items; }); } function enableScrollX() { return true; } function getSquareShape() { return enableScrollX() ? 'overflowSquare' : 'square'; } function getThumbShape() { return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; } function getPortraitShape() { return enableScrollX() ? 'autooverflow' : 'auto'; } function getLibraryButtonsHtml(items) { var html = ""; html += '