From a9514343799bab3cb33811e01efd5a750db5c63b Mon Sep 17 00:00:00 2001 From: Ben Vreeland Date: Mon, 29 Jan 2024 19:57:12 -0500 Subject: [PATCH] Only conditionally show 'Trailers' tab. Addresses #4375 (and by extension #2963). --- src/controllers/movies/moviesrecommended.js | 90 +++++++++++++-------- 1 file changed, 55 insertions(+), 35 deletions(-) diff --git a/src/controllers/movies/moviesrecommended.js b/src/controllers/movies/moviesrecommended.js index 37c4896c8d..f79edf6ee4 100644 --- a/src/controllers/movies/moviesrecommended.js +++ b/src/controllers/movies/moviesrecommended.js @@ -20,6 +20,15 @@ import 'elements/emby-itemscontainer/emby-itemscontainer'; import 'elements/emby-tabs/emby-tabs'; import 'elements/emby-button/emby-button'; +const TAB_INDEX_MAPPING = { + [LibraryTab.Movies]: 0, + [LibraryTab.Suggestions]: 1, + [LibraryTab.Trailers]: 2, + [LibraryTab.Favorites]: 3, + [LibraryTab.Collections]: 4, + [LibraryTab.Genres]: 5 +}; + function enableScrollX() { return !layoutManager.desktop; } @@ -96,6 +105,21 @@ function loadResume(page, userId, parentId) { }); } +function enableTrailerTabIfTrailersExist() { + const options = { + IncludeItemTypes: 'Trailer', + Limit: 1, + Recursive: true + }; + ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) { + if (result.TotalRecordCount) { + document.querySelector( + `.emby-button[data-index='${TAB_INDEX_MAPPING[LibraryTab.Trailers]}']` + )?.classList.remove('hide'); + } + }); +} + function getRecommendationHtml(recommendation) { let html = ''; let title = ''; @@ -232,7 +256,9 @@ function getTabs() { }, { name: globalize.translate('Suggestions') }, { - name: globalize.translate('Trailers') + name: globalize.translate('Trailers'), + // Disable trailers tab by default, we will re-enable if trailers exist + enabled: false }, { name: globalize.translate('Favorites') }, { @@ -243,22 +269,7 @@ function getTabs() { } function getDefaultTabIndex(folderId) { - switch (userSettings.get('landing-' + folderId)) { - case LibraryTab.Suggestions: - return 1; - - case LibraryTab.Favorites: - return 3; - - case LibraryTab.Collections: - return 4; - - case LibraryTab.Genres: - return 5; - - default: - return 0; - } + return TAB_INDEX_MAPPING[userSettings.get('landing-' + folderId)] ?? 0; } export default function (view, params) { @@ -277,33 +288,35 @@ export default function (view, params) { function initTabs() { mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange); + + enableTrailerTabIfTrailersExist(); } const getTabController = (page, index, callback) => { let depends = ''; switch (index) { - case 0: + case TAB_INDEX_MAPPING[LibraryTab.Movies]: depends = 'movies'; break; - case 1: + case TAB_INDEX_MAPPING[LibraryTab.Suggestions]: depends = 'moviesrecommended.js'; break; - case 2: + case TAB_INDEX_MAPPING[LibraryTab.Trailers]: depends = 'movietrailers'; break; - case 3: + case TAB_INDEX_MAPPING[LibraryTab.Favorites]: depends = 'movies'; break; - case 4: + case TAB_INDEX_MAPPING[LibraryTab.Collections]: depends = 'moviecollections'; break; - case 5: + case TAB_INDEX_MAPPING[LibraryTab.Genres]: depends = 'moviegenres'; break; } @@ -311,7 +324,7 @@ export default function (view, params) { import(`../movies/${depends}`).then(({ default: ControllerFactory }) => { let tabContent; - if (index === suggestionsTabIndex) { + if (index === TAB_INDEX_MAPPING[LibraryTab.Suggestions]) { tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); this.tabContent = tabContent; } @@ -321,14 +334,22 @@ export default function (view, params) { if (!controller) { tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); - if (index === suggestionsTabIndex) { - controller = this; - } else if (index == 0 || index == 3) { - controller = new ControllerFactory(view, params, tabContent, { - mode: index ? 'favorites' : 'movies' - }); - } else { - controller = new ControllerFactory(view, params, tabContent); + switch (index) { + case TAB_INDEX_MAPPING[LibraryTab.Suggestions]: + controller = this; + break; + case TAB_INDEX_MAPPING[LibraryTab.Movies]: + controller = new ControllerFactory( + view, params, tabContent, { mode: 'movies' } + ); + break; + case TAB_INDEX_MAPPING[LibraryTab.Favorites]: + controller = new ControllerFactory( + view, params, tabContent, { mode: 'favorites' } + ); + break; + default: + controller = new ControllerFactory(view, params, tabContent); } tabControllers[index] = controller; @@ -375,15 +396,14 @@ export default function (view, params) { } let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId), 10); - const suggestionsTabIndex = 1; this.initTab = function () { - const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']"); + const tabContent = view.querySelector(".pageTabContent[data-index='" + TAB_INDEX_MAPPING[LibraryTab.Suggestions] + "']"); initSuggestedTab(view, tabContent); }; this.renderTab = function () { - const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']"); + const tabContent = view.querySelector(".pageTabContent[data-index='" + TAB_INDEX_MAPPING[LibraryTab.Suggestions] + "']"); loadSuggestionsTab(view, params, tabContent); };