+
-
diff --git a/src/controllers/shows/tvrecommended.js b/src/controllers/shows/tvrecommended.js
index c58a2faad..db7bef2d5 100644
--- a/src/controllers/shows/tvrecommended.js
+++ b/src/controllers/shows/tvrecommended.js
@@ -20,8 +20,6 @@ import 'emby-button';
name: globalize.translate('Shows')
}, {
name: globalize.translate('Suggestions')
- }, {
- name: globalize.translate('TabLatest')
}, {
name: globalize.translate('TabUpcoming')
}, {
@@ -38,15 +36,18 @@ import 'emby-button';
case 'suggestions':
return 1;
- case 'latest':
+ case 'upcoming':
return 2;
- case 'favorites':
- return 1;
-
case 'genres':
+ return 3;
+
+ case 'networks':
return 4;
+ case 'episodes':
+ return 5;
+
default:
return 0;
}
@@ -70,102 +71,159 @@ import 'emby-button';
}
}
+ function initSuggestedTab(page, tabContent) {
+ const containers = tabContent.querySelectorAll('.itemsContainer');
+
+ for (let i = 0, length = containers.length; i < length; i++) {
+ setScrollClasses(containers[i], enableScrollX());
+ }
+ }
+
+ function loadSuggestionsTab(view, params, tabContent) {
+ const parentId = params.topParentId;
+ const userId = ApiClient.getCurrentUserId();
+ console.debug('loadSuggestionsTab');
+ loadResume(tabContent, userId, parentId);
+ loadLatest(tabContent, userId, parentId);
+ loadNextUp(tabContent, userId, parentId);
+ }
+
+ function loadResume(view, userId, parentId) {
+ const screenWidth = dom.getWindowSize().innerWidth;
+ const options = {
+ SortBy: 'DatePlayed',
+ SortOrder: 'Descending',
+ IncludeItemTypes: 'Episode',
+ Filters: 'IsResumable',
+ Limit: screenWidth >= 1920 ? 5 : screenWidth >= 1600 ? 5 : 3,
+ Recursive: true,
+ Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
+ CollapseBoxSetItems: false,
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
+ EnableTotalRecordCount: false
+ };
+ ApiClient.getItems(userId, options).then(function (result) {
+ if (result.Items.length) {
+ view.querySelector('#resumableSection').classList.remove('hide');
+ } else {
+ view.querySelector('#resumableSection').classList.add('hide');
+ }
+
+ const allowBottomPadding = !enableScrollX();
+ const container = view.querySelector('#resumableItems');
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: container,
+ preferThumb: true,
+ shape: getThumbShape(),
+ scalable: true,
+ overlayPlayButton: true,
+ allowBottomPadding: allowBottomPadding,
+ cardLayout: false,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ loading.hide();
+
+ import('autoFocuser').then(({default: autoFocuser}) => {
+ autoFocuser.autoFocus(view);
+ });
+ });
+ }
+
+ function loadLatest(view, userId, parentId) {
+ const options = {
+ userId: userId,
+ IncludeItemTypes: 'Episode',
+ Limit: 30,
+ Fields: 'PrimaryImageAspectRatio,BasicSyncInfo',
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ EnableImageTypes: 'Primary,Backdrop,Thumb'
+ };
+ ApiClient.getLatestItems(options).then(function (items) {
+ const section = view.querySelector('#latestItemsSection');
+ const allowBottomPadding = !enableScrollX();
+ const container = section.querySelector('#latestEpisodesItems');
+ cardBuilder.buildCards(items, {
+ parentContainer: section,
+ itemsContainer: container,
+ items: items,
+ shape: 'backdrop',
+ preferThumb: true,
+ showTitle: true,
+ showSeriesYear: true,
+ showParentTitle: true,
+ overlayText: false,
+ cardLayout: false,
+ allowBottomPadding: allowBottomPadding,
+ showUnplayedIndicator: false,
+ showChildCountIndicator: true,
+ centerText: true,
+ lazy: true,
+ overlayPlayButton: true,
+ lines: 2
+ });
+ loading.hide();
+
+ import('autoFocuser').then(({default: autoFocuser}) => {
+ autoFocuser.autoFocus(view);
+ });
+ });
+ }
+
+ function loadNextUp(view, userId, parentId) {
+ const query = {
+ userId: userId,
+ Limit: 24,
+ Fields: 'PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo',
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ EnableImageTypes: 'Primary,Backdrop,Thumb',
+ EnableTotalRecordCount: false
+ };
+ query.ParentId = libraryMenu.getTopParentId();
+ ApiClient.getNextUpEpisodes(query).then(function (result) {
+ if (result.Items.length) {
+ view.querySelector('.noNextUpItems').classList.add('hide');
+ } else {
+ view.querySelector('.noNextUpItems').classList.remove('hide');
+ }
+
+ const section = view.querySelector('#nextUpItemsSection');
+ const container = section.querySelector('#nextUpItems');
+ cardBuilder.buildCards(result.Items, {
+ parentContainer: section,
+ itemsContainer: container,
+ preferThumb: true,
+ shape: 'backdrop',
+ scalable: true,
+ showTitle: true,
+ showParentTitle: true,
+ overlayText: false,
+ centerText: true,
+ overlayPlayButton: true,
+ cardLayout: false
+ });
+ loading.hide();
+
+ import('autoFocuser').then(({default: autoFocuser}) => {
+ autoFocuser.autoFocus(view);
+ });
+ });
+ }
+
+ function enableScrollX() {
+ return !layoutManager.desktop;
+ }
+
+ function getThumbShape() {
+ return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
+ }
+
export default function (view, params) {
- function reload() {
- loading.show();
- loadResume();
- loadNextUp();
- }
-
- function loadNextUp() {
- const query = {
- Limit: 24,
- Fields: 'PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo',
- UserId: ApiClient.getCurrentUserId(),
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Thumb',
- EnableTotalRecordCount: false
- };
- query.ParentId = libraryMenu.getTopParentId();
- ApiClient.getNextUpEpisodes(query).then(function (result) {
- if (result.Items.length) {
- view.querySelector('.noNextUpItems').classList.add('hide');
- } else {
- view.querySelector('.noNextUpItems').classList.remove('hide');
- }
-
- const container = view.querySelector('#nextUpItems');
- cardBuilder.buildCards(result.Items, {
- itemsContainer: container,
- preferThumb: true,
- shape: 'backdrop',
- scalable: true,
- showTitle: true,
- showParentTitle: true,
- overlayText: false,
- centerText: true,
- overlayPlayButton: true,
- cardLayout: false
- });
- loading.hide();
-
- import('autoFocuser').then(({default: autoFocuser}) => {
- autoFocuser.autoFocus(view);
- });
- });
- }
-
- function enableScrollX() {
- return !layoutManager.desktop;
- }
-
- function getThumbShape() {
- return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
- }
-
- function loadResume() {
- const parentId = libraryMenu.getTopParentId();
- const screenWidth = dom.getWindowSize().innerWidth;
- const limit = screenWidth >= 1600 ? 5 : 6;
- const options = {
- SortBy: 'DatePlayed',
- SortOrder: 'Descending',
- IncludeItemTypes: 'Episode',
- Filters: 'IsResumable',
- Limit: limit,
- Recursive: true,
- Fields: 'PrimaryImageAspectRatio,SeriesInfo,UserData,BasicSyncInfo',
- ExcludeLocationTypes: 'Virtual',
- ParentId: parentId,
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Thumb',
- EnableTotalRecordCount: false
- };
- ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
- if (result.Items.length) {
- view.querySelector('#resumableSection').classList.remove('hide');
- } else {
- view.querySelector('#resumableSection').classList.add('hide');
- }
-
- const allowBottomPadding = !enableScrollX();
- const container = view.querySelector('#resumableItems');
- cardBuilder.buildCards(result.Items, {
- itemsContainer: container,
- preferThumb: true,
- shape: getThumbShape(),
- scalable: true,
- showTitle: true,
- showParentTitle: true,
- overlayText: false,
- centerText: true,
- overlayPlayButton: true,
- allowBottomPadding: allowBottomPadding,
- cardLayout: false
- });
- });
- }
-
function onBeforeTabChange(e) {
preLoadTab(view, parseInt(e.detail.selectedTabIndex));
}
@@ -196,22 +254,18 @@ import 'emby-button';
break;
case 2:
- depends = 'controllers/shows/tvlatest';
- break;
-
- case 3:
depends = 'controllers/shows/tvupcoming';
break;
- case 4:
+ case 3:
depends = 'controllers/shows/tvgenres';
break;
- case 5:
+ case 4:
depends = 'controllers/shows/tvstudios';
break;
- case 6:
+ case 5:
depends = 'controllers/shows/episodes';
break;
}
@@ -231,11 +285,6 @@ import 'emby-button';
if (index === 1) {
controller = self;
- } else if (index === 7) {
- controller = new controllerFactory(view, tabContent, {
- collectionType: 'tvshows',
- parentId: params.topParentId
- });
} else {
controller = new controllerFactory(view, params, tabContent);
}
@@ -294,19 +343,20 @@ import 'emby-button';
const self = this;
let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
+ const suggestionsTabIndex = 1;
self.initTab = function () {
- const tabContent = self.tabContent;
- setScrollClasses(tabContent.querySelector('#resumableItems'), enableScrollX());
+ const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
+ initSuggestedTab(view, tabContent);
};
self.renderTab = function () {
- reload();
+ const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
+ loadSuggestionsTab(view, params, tabContent);
};
const tabControllers = [];
let renderedTabs = [];
- setScrollClasses(view.querySelector('#resumableItems'), enableScrollX());
view.addEventListener('viewshow', function (e) {
initTabs();
if (!view.getAttribute('data-title')) {