define(['components/categorysyncbuttons', 'cardBuilder', 'scripts/livetvcomponents', 'emby-button', 'listViewStyle', 'emby-itemscontainer'], function (categorysyncbuttons, cardBuilder) { function getRecordingGroupHtml(group) { var html = ''; html += '
'; html += ''; html += '
'; html += ''; html += '
'; html += group.Name; html += '
'; html += '
'; if (group.RecordingCount == 1) { html += Globalize.translate('ValueItemCount', group.RecordingCount); } else { html += Globalize.translate('ValueItemCountPlural', group.RecordingCount); } html += '
'; html += '
'; html += '
'; html += '
'; return html; } function renderRecordingGroups(context, groups) { if (groups.length) { context.querySelector('#recordingGroups').classList.remove('hide'); } else { context.querySelector('#recordingGroups').classList.add('hide'); } var html = ''; html += '
'; for (var i = 0, length = groups.length; i < length; i++) { html += getRecordingGroupHtml(groups[i]); } html += '
'; context.querySelector('#recordingGroupItems').innerHTML = html; Dashboard.hideLoadingMsg(); } function enableScrollX() { return browserInfo.mobile && AppInfo.enableAppLayouts; } function renderRecordings(elem, recordings, cardOptions) { if (recordings.length) { elem.classList.remove('hide'); } else { elem.classList.add('hide'); } var recordingItems = elem.querySelector('.recordingItems'); if (enableScrollX()) { recordingItems.classList.add('hiddenScrollX'); recordingItems.classList.remove('vertical-wrap'); } else { recordingItems.classList.remove('hiddenScrollX'); recordingItems.classList.add('vertical-wrap'); } recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({ items: recordings, shape: (enableScrollX() ? 'autooverflow' : 'auto'), showTitle: true, showParentTitle: true, coverImage: true, lazy: true, cardLayout: true, vibrant: true, allowBottomPadding: !enableScrollX(), preferThumb: 'auto' }, cardOptions || {})); ImageLoader.lazyChildren(recordingItems); } function renderActiveRecordings(context, promise) { promise.then(function (result) { // The IsActive param is new, so handle older servers that don't support it if (result.Items.length && result.Items[0].Status != 'InProgress') { result.Items = []; } renderTimers(context.querySelector('#activeRecordings'), result.Items, { indexByDate: false }); }); } function renderLatestRecordings(context, promise) { promise.then(function (result) { renderRecordings(context.querySelector('#latestRecordings'), result.Items); Dashboard.hideLoadingMsg(); }); } function renderMovieRecordings(context, promise) { promise.then(function (result) { renderRecordings(context.querySelector('#movieRecordings'), result.Items, { showYear: true, showParentTitle: false }); }); } function renderEpisodeRecordings(context, promise) { promise.then(function (result) { renderRecordings(context.querySelector('#episodeRecordings'), result.Items, { showItemCounts: true, showParentTitle: false }); }); } function renderSportsRecordings(context, promise) { promise.then(function (result) { renderRecordings(context.querySelector('#sportsRecordings'), result.Items, { showYear: true, showParentTitle: false }); }); } function renderKidsRecordings(context, promise) { promise.then(function (result) { renderRecordings(context.querySelector('#kidsRecordings'), result.Items, { showYear: true, showParentTitle: false }); }); } function renderTimers(context, timers, options) { LiveTvHelpers.getTimersHtml(timers, options).then(function (html) { var elem = context; if (html) { elem.classList.remove('hide'); } else { elem.classList.add('hide'); } elem.querySelector('.recordingItems').innerHTML = html; ImageLoader.lazyChildren(elem); }); } function onMoreClick(e) { var type = this.getAttribute('data-type'); switch(type) { case 'latest': Dashboard.navigate('livetvitems.html?type=Recordings'); break; case 'movies': Dashboard.navigate('livetvitems.html?type=Recordings&IsMovie=true'); break; case 'episodes': Dashboard.navigate('livetvitems.html?type=RecordingSeries'); break; case 'programs': Dashboard.navigate('livetvitems.html?type=Recordings&IsSeries=false&IsMovie=false'); break; case 'kids': Dashboard.navigate('livetvitems.html?type=Recordings&IsKids=true'); break; case 'sports': Dashboard.navigate('livetvitems.html?type=Recordings&IsSports=true'); break; default: break; } } return function (view, params, tabContent) { var self = this; var activeRecordingsPromise; var sportsPromise; var kidsPromise; var moviesPromise; var seriesPromise; var latestPromise; categorysyncbuttons.init(tabContent); var moreButtons = tabContent.querySelectorAll('.more'); for (var i = 0, length = moreButtons.length; i < length; i++) { moreButtons[i].addEventListener('click', onMoreClick); } tabContent.querySelector('#activeRecordings .recordingItems').addEventListener('timercancelled', function () { self.preRender(); self.renderTab(); }); self.preRender = function () { activeRecordingsPromise = ApiClient.getLiveTvTimers({ IsActive: true }); latestPromise = ApiClient.getLiveTvRecordings({ UserId: Dashboard.getCurrentUserId(), Limit: enableScrollX() ? 12 : 8, IsInProgress: false, Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo', EnableTotalRecordCount: false, EnableImageTypes: "Primary,Thumb,Backdrop" }); moviesPromise = ApiClient.getLiveTvRecordings({ UserId: Dashboard.getCurrentUserId(), Limit: enableScrollX() ? 12 : 8, IsInProgress: false, Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo', EnableTotalRecordCount: false, IsMovie: true }); seriesPromise = ApiClient.getLiveTvRecordingSeries({ UserId: Dashboard.getCurrentUserId(), Limit: enableScrollX() ? 12 : 8, IsInProgress: false, Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo', EnableTotalRecordCount: false, IsSeries: true }); kidsPromise = ApiClient.getLiveTvRecordings({ UserId: Dashboard.getCurrentUserId(), Limit: enableScrollX() ? 12 : 8, IsInProgress: false, Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo', EnableTotalRecordCount: false, IsKids: true }); sportsPromise = ApiClient.getLiveTvRecordings({ UserId: Dashboard.getCurrentUserId(), Limit: enableScrollX() ? 12 : 8, IsInProgress: false, Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo', EnableTotalRecordCount: false, IsSports: true }); }; self.renderTab = function () { Dashboard.showLoadingMsg(); renderActiveRecordings(tabContent, activeRecordingsPromise); renderLatestRecordings(tabContent, latestPromise); renderMovieRecordings(tabContent, moviesPromise); renderEpisodeRecordings(tabContent, seriesPromise); renderSportsRecordings(tabContent, sportsPromise); renderKidsRecordings(tabContent, kidsPromise); ApiClient.getLiveTvRecordingGroups({ userId: Dashboard.getCurrentUserId() }).then(function (result) { renderRecordingGroups(tabContent, result.Items); }); }; }; });