diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js
deleted file mode 100644
index d1b909511f..0000000000
--- a/src/controllers/movies/moviecollections.js
+++ /dev/null
@@ -1,267 +0,0 @@
-import loading from '../../components/loading/loading';
-import libraryBrowser from '../../scripts/libraryBrowser';
-import imageLoader from '../../components/images/imageLoader';
-import listView from '../../components/listview/listview';
-import cardBuilder from '../../components/cardbuilder/cardBuilder';
-import * as userSettings from '../../scripts/settings/userSettings';
-import globalize from '../../scripts/globalize';
-import '../../elements/emby-itemscontainer/emby-itemscontainer';
-
-/* eslint-disable indent */
-
- export default function (view, params, tabContent) {
- function getPageData(context) {
- const key = getSavedQueryKey(context);
- let pageData = data[key];
-
- if (!pageData) {
- pageData = data[key] = {
- query: {
- SortBy: 'SortName',
- SortOrder: 'Ascending',
- IncludeItemTypes: 'BoxSet',
- Recursive: true,
- Fields: 'PrimaryImageAspectRatio,SortName',
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
- StartIndex: 0
- },
- view: libraryBrowser.getSavedView(key) || 'Poster'
- };
-
- if (userSettings.libraryPageSize() > 0) {
- pageData.query['Limit'] = userSettings.libraryPageSize();
- }
-
- pageData.query.ParentId = params.topParentId;
- libraryBrowser.loadSavedQueryValues(key, pageData.query);
- }
-
- return pageData;
- }
-
- function getQuery(context) {
- return getPageData(context).query;
- }
-
- function getSavedQueryKey(context) {
- if (!context.savedQueryKey) {
- context.savedQueryKey = libraryBrowser.getSavedQueryKey('moviecollections');
- }
-
- return context.savedQueryKey;
- }
-
- const onViewStyleChange = () => {
- const viewStyle = this.getCurrentViewStyle();
- const itemsContainer = tabContent.querySelector('.itemsContainer');
-
- if (viewStyle == 'List') {
- itemsContainer.classList.add('vertical-list');
- itemsContainer.classList.remove('vertical-wrap');
- } else {
- itemsContainer.classList.remove('vertical-list');
- itemsContainer.classList.add('vertical-wrap');
- }
-
- itemsContainer.innerHTML = '';
- };
-
- const reloadItems = (page) => {
- loading.show();
- isLoading = true;
- const query = getQuery(page);
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then((result) => {
- function onNextPageClick() {
- if (isLoading) {
- return;
- }
-
- if (userSettings.libraryPageSize() > 0) {
- query.StartIndex += query.Limit;
- }
- reloadItems(tabContent);
- }
-
- function onPreviousPageClick() {
- if (isLoading) {
- return;
- }
-
- if (userSettings.libraryPageSize() > 0) {
- query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
- }
- reloadItems(tabContent);
- }
-
- window.scrollTo(0, 0);
- let html;
- const pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: false,
- updatePageSizeSetting: false,
- addLayoutButton: false,
- sortButton: false,
- filterButton: false
- });
- const viewStyle = this.getCurrentViewStyle();
- if (viewStyle == 'Thumb') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'backdrop',
- preferThumb: true,
- context: 'movies',
- overlayPlayButton: true,
- centerText: true,
- showTitle: true
- });
- } else if (viewStyle == 'ThumbCard') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'backdrop',
- preferThumb: true,
- context: 'movies',
- lazy: true,
- cardLayout: true,
- showTitle: true
- });
- } else if (viewStyle == 'Banner') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'banner',
- preferBanner: true,
- context: 'movies',
- lazy: true
- });
- } else if (viewStyle == 'List') {
- html = listView.getListViewHtml({
- items: result.Items,
- context: 'movies',
- sortBy: query.SortBy
- });
- } else if (viewStyle == 'PosterCard') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'auto',
- context: 'movies',
- showTitle: true,
- centerText: false,
- cardLayout: true
- });
- } else {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'auto',
- context: 'movies',
- centerText: true,
- overlayPlayButton: true,
- showTitle: true
- });
- }
-
- let elems = tabContent.querySelectorAll('.paging');
-
- for (const elem of elems) {
- elem.innerHTML = pagingHtml;
- }
-
- elems = tabContent.querySelectorAll('.btnNextPage');
- for (const elem of elems) {
- elem.addEventListener('click', onNextPageClick);
- }
-
- elems = tabContent.querySelectorAll('.btnPreviousPage');
- for (const elem of elems) {
- elem.addEventListener('click', onPreviousPageClick);
- }
-
- if (!result.Items.length) {
- html = '';
-
- html += '
';
- html += '
';
- if (enableScrollX()) {
- let scrollXClass = 'scrollX hiddenScrollX';
-
- if (layoutManager.tv) {
- scrollXClass += 'smoothScrollX padded-top-focusscale padded-bottom-focusscale';
- }
-
- html += '
';
- }
-
- if (!result.Items.length) {
- html = '';
-
- html += '
';
- html += '
' + globalize.translate('MessageNothingHere') + '
';
- html += '
' + globalize.translate('MessageNoGenresAvailable') + '
';
- html += '
';
- }
-
- elem.innerHTML = html;
- lazyLoader.lazyChildren(elem, fillItemsContainer);
- libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
- loading.hide();
- });
- }
-
- const fullyReload = () => {
- this.preRender();
- this.renderTab();
- };
-
- const data = {};
-
- this.getViewStyles = function () {
- return 'Poster,PosterCard,Thumb,ThumbCard'.split(',');
- };
-
- this.getCurrentViewStyle = function () {
- return getPageData().view;
- };
-
- this.setCurrentViewStyle = function (viewStyle) {
- getPageData().view = viewStyle;
- libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle);
- fullyReload();
- };
-
- this.enableViewSelection = true;
- let promise;
-
- this.preRender = function () {
- promise = getPromise();
- };
-
- this.renderTab = function () {
- reloadItems(tabContent, promise);
- };
- }
-
-/* eslint-enable indent */
diff --git a/src/controllers/movies/movies.html b/src/controllers/movies/movies.html
deleted file mode 100644
index 7a08694b2a..0000000000
--- a/src/controllers/movies/movies.html
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
${HeaderContinueWatching}
-
-
-
-
-
-
-
-
-
${HeaderLatestMovies}
-
-
-
-
-
-
-
-
-
-
-
${MessageNoMovieSuggestionsAvailable}
-
-
-
-
-
-
-
diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js
deleted file mode 100644
index 89e086ce7e..0000000000
--- a/src/controllers/movies/movies.js
+++ /dev/null
@@ -1,327 +0,0 @@
-import loading from '../../components/loading/loading';
-import * as userSettings from '../../scripts/settings/userSettings';
-import libraryBrowser from '../../scripts/libraryBrowser';
-import { AlphaPicker } from '../../components/alphaPicker/alphaPicker';
-import listView from '../../components/listview/listview';
-import cardBuilder from '../../components/cardbuilder/cardBuilder';
-import globalize from '../../scripts/globalize';
-import Events from '../../utils/events.ts';
-import { playbackManager } from '../../components/playback/playbackmanager';
-
-import '../../elements/emby-itemscontainer/emby-itemscontainer';
-
-/* eslint-disable indent */
-
- export default function (view, params, tabContent, options) {
- const onViewStyleChange = () => {
- if (this.getCurrentViewStyle() == 'List') {
- itemsContainer.classList.add('vertical-list');
- itemsContainer.classList.remove('vertical-wrap');
- } else {
- itemsContainer.classList.remove('vertical-list');
- itemsContainer.classList.add('vertical-wrap');
- }
-
- itemsContainer.innerHTML = '';
- };
-
- function fetchData() {
- isLoading = true;
- loading.show();
- return ApiClient.getItems(ApiClient.getCurrentUserId(), query);
- }
-
- function shuffle() {
- ApiClient.getItem(
- ApiClient.getCurrentUserId(),
- params.topParentId
- ).then((item) => {
- playbackManager.shuffle(item);
- });
- }
-
- const afterRefresh = (result) => {
- function onNextPageClick() {
- if (isLoading) {
- return;
- }
-
- if (userSettings.libraryPageSize() > 0) {
- query.StartIndex += query.Limit;
- }
- itemsContainer.refreshItems();
- }
-
- function onPreviousPageClick() {
- if (isLoading) {
- return;
- }
-
- if (userSettings.libraryPageSize() > 0) {
- query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
- }
- itemsContainer.refreshItems();
- }
-
- window.scrollTo(0, 0);
- this.alphaPicker?.updateControls(query);
- const pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: false,
- updatePageSizeSetting: false,
- addLayoutButton: false,
- sortButton: false,
- filterButton: false
- });
-
- for (const elem of tabContent.querySelectorAll('.paging')) {
- elem.innerHTML = pagingHtml;
- }
-
- for (const elem of tabContent.querySelectorAll('.btnNextPage')) {
- elem.addEventListener('click', onNextPageClick);
- }
-
- for (const elem of tabContent.querySelectorAll('.btnPreviousPage')) {
- elem.addEventListener('click', onPreviousPageClick);
- }
-
- tabContent.querySelector('.btnShuffle').classList.toggle('hide', result.TotalRecordCount < 1);
-
- isLoading = false;
- loading.hide();
-
- import('../../components/autoFocuser').then(({default: autoFocuser}) => {
- autoFocuser.autoFocus(tabContent);
- });
- };
-
- const getItemsHtml = (items) => {
- let html;
- const viewStyle = this.getCurrentViewStyle();
-
- if (viewStyle == 'Thumb') {
- html = cardBuilder.getCardsHtml({
- items: items,
- shape: 'backdrop',
- preferThumb: true,
- context: 'movies',
- lazy: true,
- overlayPlayButton: true,
- showTitle: true,
- showYear: true,
- centerText: true
- });
- } else if (viewStyle == 'ThumbCard') {
- html = cardBuilder.getCardsHtml({
- items: items,
- shape: 'backdrop',
- preferThumb: true,
- context: 'movies',
- lazy: true,
- cardLayout: true,
- showTitle: true,
- showYear: true,
- centerText: true
- });
- } else if (viewStyle == 'Banner') {
- html = cardBuilder.getCardsHtml({
- items: items,
- shape: 'banner',
- preferBanner: true,
- context: 'movies',
- lazy: true
- });
- } else if (viewStyle == 'List') {
- html = listView.getListViewHtml({
- items: items,
- context: 'movies',
- sortBy: query.SortBy
- });
- } else if (viewStyle == 'PosterCard') {
- html = cardBuilder.getCardsHtml({
- items: items,
- shape: 'portrait',
- context: 'movies',
- showTitle: true,
- showYear: true,
- centerText: true,
- lazy: true,
- cardLayout: true
- });
- } else {
- html = cardBuilder.getCardsHtml({
- items: items,
- shape: 'portrait',
- context: 'movies',
- overlayPlayButton: true,
- showTitle: true,
- showYear: true,
- centerText: true
- });
- }
-
- return html;
- };
-
- const initPage = (tabElement) => {
- itemsContainer.fetchData = fetchData;
- itemsContainer.getItemsHtml = getItemsHtml;
- itemsContainer.afterRefresh = afterRefresh;
- const alphaPickerElement = tabElement.querySelector('.alphaPicker');
-
- if (alphaPickerElement) {
- alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
- const newValue = e.detail.value;
- if (newValue === '#') {
- query.NameLessThan = 'A';
- delete query.NameStartsWith;
- } else {
- query.NameStartsWith = newValue;
- delete query.NameLessThan;
- }
- query.StartIndex = 0;
- itemsContainer.refreshItems();
- });
- this.alphaPicker = new AlphaPicker({
- element: alphaPickerElement,
- valueChangeEvent: 'click'
- });
-
- tabElement.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
- alphaPickerElement.classList.add('alphaPicker-fixed-right');
- itemsContainer.classList.add('padded-right-withalphapicker');
- }
-
- const btnFilter = tabElement.querySelector('.btnFilter');
-
- if (btnFilter) {
- btnFilter.addEventListener('click', () => {
- this.showFilterMenu();
- });
- }
- const btnSort = tabElement.querySelector('.btnSort');
-
- if (btnSort) {
- btnSort.addEventListener('click', function (e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: globalize.translate('Name'),
- id: 'SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionRandom'),
- id: 'Random'
- }, {
- name: globalize.translate('OptionImdbRating'),
- id: 'CommunityRating,SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionCriticRating'),
- id: 'CriticRating,SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionDateAdded'),
- id: 'DateCreated,SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionDatePlayed'),
- id: 'DatePlayed,SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionParentalRating'),
- id: 'OfficialRating,SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionPlayCount'),
- id: 'PlayCount,SortName,ProductionYear'
- }, {
- name: globalize.translate('OptionReleaseDate'),
- id: 'PremiereDate,SortName,ProductionYear'
- }, {
- name: globalize.translate('Runtime'),
- id: 'Runtime,SortName,ProductionYear'
- }],
- callback: function () {
- query.StartIndex = 0;
- userSettings.saveQuerySettings(savedQueryKey, query);
- itemsContainer.refreshItems();
- },
- query: query,
- button: e.target
- });
- });
- }
- const btnSelectView = tabElement.querySelector('.btnSelectView');
- btnSelectView.addEventListener('click', (e) => {
- libraryBrowser.showLayoutMenu(e.target, this.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(','));
- });
- btnSelectView.addEventListener('layoutchange', function (e) {
- const viewStyle = e.detail.viewStyle;
- userSettings.set(savedViewKey, viewStyle);
- query.StartIndex = 0;
- onViewStyleChange();
- itemsContainer.refreshItems();
- });
-
- tabElement.querySelector('.btnShuffle').addEventListener('click', shuffle);
- };
-
- let itemsContainer = tabContent.querySelector('.itemsContainer');
- const savedQueryKey = params.topParentId + '-' + options.mode;
- const savedViewKey = savedQueryKey + '-view';
- let query = {
- SortBy: 'SortName,ProductionYear',
- SortOrder: 'Ascending',
- IncludeItemTypes: 'Movie',
- Recursive: true,
- Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
- StartIndex: 0,
- ParentId: params.topParentId
- };
-
- if (userSettings.libraryPageSize() > 0) {
- query['Limit'] = userSettings.libraryPageSize();
- }
-
- let isLoading = false;
-
- if (options.mode === 'favorites') {
- query.IsFavorite = true;
- }
-
- query = userSettings.loadQuerySettings(savedQueryKey, query);
-
- this.showFilterMenu = function () {
- import('../../components/filterdialog/filterdialog').then(({default: filterDialogFactory}) => {
- const filterDialog = new filterDialogFactory({
- query: query,
- mode: 'movies',
- serverId: ApiClient.serverId()
- });
- Events.on(filterDialog, 'filterchange', () => {
- query.StartIndex = 0;
- itemsContainer.refreshItems();
- });
- filterDialog.show();
- });
- };
-
- this.getCurrentViewStyle = function () {
- return userSettings.get(savedViewKey) || 'Poster';
- };
-
- this.initTab = function () {
- initPage(tabContent);
- onViewStyleChange();
- };
-
- this.renderTab = () => {
- itemsContainer.refreshItems();
- this.alphaPicker?.updateControls(query);
- };
-
- this.destroy = function () {
- itemsContainer = null;
- };
- }
-
-/* eslint-enable indent */
diff --git a/src/controllers/movies/moviesrecommended.js b/src/controllers/movies/moviesrecommended.js
deleted file mode 100644
index b1b0103311..0000000000
--- a/src/controllers/movies/moviesrecommended.js
+++ /dev/null
@@ -1,428 +0,0 @@
-import escapeHtml from 'escape-html';
-import layoutManager from '../../components/layoutManager';
-import inputManager from '../../scripts/inputManager';
-import * as userSettings from '../../scripts/settings/userSettings';
-import libraryMenu from '../../scripts/libraryMenu';
-import * as mainTabsManager from '../../components/maintabsmanager';
-import cardBuilder from '../../components/cardbuilder/cardBuilder';
-import dom from '../../scripts/dom';
-import imageLoader from '../../components/images/imageLoader';
-import { playbackManager } from '../../components/playback/playbackmanager';
-import globalize from '../../scripts/globalize';
-import Dashboard from '../../utils/dashboard';
-import Events from '../../utils/events.ts';
-
-import '../../elements/emby-scroller/emby-scroller';
-import '../../elements/emby-itemscontainer/emby-itemscontainer';
-import '../../elements/emby-tabs/emby-tabs';
-import '../../elements/emby-button/emby-button';
-
-/* eslint-disable indent */
-
- function enableScrollX() {
- return !layoutManager.desktop;
- }
-
- function getPortraitShape() {
- return enableScrollX() ? 'overflowPortrait' : 'portrait';
- }
-
- function getThumbShape() {
- return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
- }
-
- function loadLatest(page, userId, parentId) {
- const options = {
- IncludeItemTypes: 'Movie',
- Limit: 18,
- Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
- ParentId: parentId,
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
- EnableTotalRecordCount: false
- };
- ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) {
- const allowBottomPadding = !enableScrollX();
- const container = page.querySelector('#recentlyAddedItems');
- cardBuilder.buildCards(items, {
- itemsContainer: container,
- shape: getPortraitShape(),
- scalable: true,
- overlayPlayButton: true,
- allowBottomPadding: allowBottomPadding,
- showTitle: true,
- showYear: true,
- centerText: true
- });
-
- // FIXME: Wait for all sections to load
- autoFocus(page);
- });
- }
-
- function loadResume(page, userId, parentId) {
- const screenWidth = dom.getWindowSize().innerWidth;
- const options = {
- SortBy: 'DatePlayed',
- SortOrder: 'Descending',
- IncludeItemTypes: 'Movie',
- Filters: 'IsResumable',
- Limit: 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) {
- page.querySelector('#resumableSection').classList.remove('hide');
- } else {
- page.querySelector('#resumableSection').classList.add('hide');
- }
-
- const allowBottomPadding = !enableScrollX();
- const container = page.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
- });
-
- // FIXME: Wait for all sections to load
- autoFocus(page);
- });
- }
-
- function getRecommendationHtml(recommendation) {
- let html = '';
- let title = '';
-
- switch (recommendation.RecommendationType) {
- case 'SimilarToRecentlyPlayed':
- title = globalize.translate('RecommendationBecauseYouWatched', recommendation.BaselineItemName);
- break;
-
- case 'SimilarToLikedItem':
- title = globalize.translate('RecommendationBecauseYouLike', recommendation.BaselineItemName);
- break;
-
- case 'HasDirectorFromRecentlyPlayed':
- case 'HasLikedDirector':
- title = globalize.translate('RecommendationDirectedBy', recommendation.BaselineItemName);
- break;
-
- case 'HasActorFromRecentlyPlayed':
- case 'HasLikedActor':
- title = globalize.translate('RecommendationStarring', recommendation.BaselineItemName);
- break;
- }
-
- html += '
';
- html += '
' + escapeHtml(title) + '
';
- const allowBottomPadding = true;
-
- if (enableScrollX()) {
- html += '
';
- html += '
';
- html += '
';
- return html;
- }
-
- function loadSuggestions(page, userId) {
- const screenWidth = dom.getWindowSize().innerWidth;
- let itemLimit = 5;
- if (screenWidth >= 1600) {
- itemLimit = 8;
- } else if (screenWidth >= 1200) {
- itemLimit = 6;
- }
-
- const url = ApiClient.getUrl('Movies/Recommendations', {
- userId: userId,
- categoryLimit: 6,
- ItemLimit: itemLimit,
- Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Banner,Thumb'
- });
- ApiClient.getJSON(url).then(function (recommendations) {
- if (!recommendations.length) {
- page.querySelector('.noItemsMessage').classList.remove('hide');
- page.querySelector('.recommendations').innerHTML = '';
- return;
- }
-
- const html = recommendations.map(getRecommendationHtml).join('');
- page.querySelector('.noItemsMessage').classList.add('hide');
- const recs = page.querySelector('.recommendations');
- recs.innerHTML = html;
- imageLoader.lazyChildren(recs);
-
- // FIXME: Wait for all sections to load
- autoFocus(page);
- });
- }
-
- function autoFocus(page) {
- import('../../components/autoFocuser').then(({default: autoFocuser}) => {
- autoFocuser.autoFocus(page);
- });
- }
-
- function setScrollClasses(elem, scrollX) {
- if (scrollX) {
- elem.classList.add('hiddenScrollX');
-
- if (layoutManager.tv) {
- elem.classList.add('smoothScrollX');
- elem.classList.add('padded-top-focusscale');
- elem.classList.add('padded-bottom-focusscale');
- }
-
- elem.classList.add('scrollX');
- elem.classList.remove('vertical-wrap');
- } else {
- elem.classList.remove('hiddenScrollX');
- elem.classList.remove('smoothScrollX');
- elem.classList.remove('scrollX');
- elem.classList.add('vertical-wrap');
- }
- }
-
- function initSuggestedTab(page, tabContent) {
- const containers = tabContent.querySelectorAll('.itemsContainer');
-
- for (const container of containers) {
- setScrollClasses(container, enableScrollX());
- }
- }
-
- function loadSuggestionsTab(view, params, tabContent) {
- const parentId = params.topParentId;
- const userId = ApiClient.getCurrentUserId();
- loadResume(tabContent, userId, parentId);
- loadLatest(tabContent, userId, parentId);
- loadSuggestions(tabContent, userId);
- }
-
- function getTabs() {
- return [{
- name: globalize.translate('Movies')
- }, {
- name: globalize.translate('Suggestions')
- }, {
- name: globalize.translate('Trailers')
- }, {
- name: globalize.translate('Favorites')
- }, {
- name: globalize.translate('Collections')
- }, {
- name: globalize.translate('Genres')
- }];
- }
-
- function getDefaultTabIndex(folderId) {
- switch (userSettings.get('landing-' + folderId)) {
- case 'suggestions':
- return 1;
-
- case 'favorites':
- return 3;
-
- case 'collections':
- return 4;
-
- case 'genres':
- return 5;
-
- default:
- return 0;
- }
- }
-
- export default function (view, params) {
- function onBeforeTabChange(e) {
- preLoadTab(view, parseInt(e.detail.selectedTabIndex));
- }
-
- function onTabChange(e) {
- const newIndex = parseInt(e.detail.selectedTabIndex);
- loadTab(view, newIndex);
- }
-
- function getTabContainers() {
- return view.querySelectorAll('.pageTabContent');
- }
-
- function initTabs() {
- mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange);
- }
-
- const getTabController = (page, index, callback) => {
- let depends = '';
-
- switch (index) {
- case 0:
- depends = 'movies';
- break;
-
- case 1:
- depends = 'moviesrecommended.js';
- break;
-
- case 2:
- depends = 'movietrailers';
- break;
-
- case 3:
- depends = 'movies';
- break;
-
- case 4:
- depends = 'moviecollections';
- break;
-
- case 5:
- depends = 'moviegenres';
- break;
- }
-
- import(`../movies/${depends}`).then(({default: controllerFactory}) => {
- let tabContent;
-
- if (index === suggestionsTabIndex) {
- tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
- this.tabContent = tabContent;
- }
-
- let controller = tabControllers[index];
-
- 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);
- }
-
- tabControllers[index] = controller;
-
- if (controller.initTab) {
- controller.initTab();
- }
- }
-
- callback(controller);
- });
- };
-
- function preLoadTab(page, index) {
- getTabController(page, index, function (controller) {
- if (renderedTabs.indexOf(index) == -1 && controller.preRender) {
- controller.preRender();
- }
- });
- }
-
- function loadTab(page, index) {
- currentTabIndex = index;
- getTabController(page, index, ((controller) => {
- if (renderedTabs.indexOf(index) == -1) {
- renderedTabs.push(index);
- controller.renderTab();
- }
- }));
- }
-
- function onPlaybackStop(e, state) {
- if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
- renderedTabs = [];
- mainTabsManager.getTabsElement().triggerTabChange();
- }
- }
-
- function onInputCommand(e) {
- if (e.detail.command === 'search') {
- e.preventDefault();
- Dashboard.navigate('search.html?collectionType=movies&parentId=' + params.topParentId);
- }
- }
-
- let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
- const suggestionsTabIndex = 1;
-
- this.initTab = function () {
- const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
- initSuggestedTab(view, tabContent);
- };
-
- this.renderTab = function () {
- const tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
- loadSuggestionsTab(view, params, tabContent);
- };
-
- const tabControllers = [];
- let renderedTabs = [];
- view.addEventListener('viewshow', function () {
- initTabs();
- if (!view.getAttribute('data-title')) {
- const parentId = params.topParentId;
-
- if (parentId) {
- ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
- view.setAttribute('data-title', item.Name);
- libraryMenu.setTitle(item.Name);
- });
- } else {
- view.setAttribute('data-title', globalize.translate('Movies'));
- libraryMenu.setTitle(globalize.translate('Movies'));
- }
- }
-
- Events.on(playbackManager, 'playbackstop', onPlaybackStop);
- inputManager.on(window, onInputCommand);
- });
- view.addEventListener('viewbeforehide', function () {
- inputManager.off(window, onInputCommand);
- });
- for (const tabController of tabControllers) {
- if (tabController.destroy) {
- tabController.destroy();
- }
- }
- }
-
-/* eslint-enable indent */
diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js
deleted file mode 100644
index 2e55e6eea8..0000000000
--- a/src/controllers/movies/movietrailers.js
+++ /dev/null
@@ -1,279 +0,0 @@
-import loading from '../../components/loading/loading';
-import libraryBrowser from '../../scripts/libraryBrowser';
-import imageLoader from '../../components/images/imageLoader';
-import { AlphaPicker } from '../../components/alphaPicker/alphaPicker';
-import listView from '../../components/listview/listview';
-import cardBuilder from '../../components/cardbuilder/cardBuilder';
-import * as userSettings from '../../scripts/settings/userSettings';
-import globalize from '../../scripts/globalize';
-import Events from '../../utils/events.ts';
-
-import '../../elements/emby-itemscontainer/emby-itemscontainer';
-
-/* eslint-disable indent */
-
- export default function (view, params, tabContent) {
- function getPageData(context) {
- const key = getSavedQueryKey(context);
- let pageData = data[key];
-
- if (!pageData) {
- pageData = data[key] = {
- query: {
- SortBy: 'SortName',
- SortOrder: 'Ascending',
- IncludeItemTypes: 'Trailer',
- Recursive: true,
- Fields: 'PrimaryImageAspectRatio,SortName,BasicSyncInfo',
- ImageTypeLimit: 1,
- EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
- StartIndex: 0
- },
- view: libraryBrowser.getSavedView(key) || 'Poster'
- };
-
- if (userSettings.libraryPageSize() > 0) {
- pageData.query['Limit'] = userSettings.libraryPageSize();
- }
-
- libraryBrowser.loadSavedQueryValues(key, pageData.query);
- }
-
- return pageData;
- }
-
- function getQuery(context) {
- return getPageData(context).query;
- }
-
- function getSavedQueryKey(context) {
- if (!context.savedQueryKey) {
- context.savedQueryKey = libraryBrowser.getSavedQueryKey('trailers');
- }
-
- return context.savedQueryKey;
- }
-
- const reloadItems = () => {
- loading.show();
- isLoading = true;
- const query = getQuery(tabContent);
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then((result) => {
- function onNextPageClick() {
- if (isLoading) {
- return;
- }
-
- if (userSettings.libraryPageSize() > 0) {
- query.StartIndex += query.Limit;
- }
- reloadItems();
- }
-
- function onPreviousPageClick() {
- if (isLoading) {
- return;
- }
-
- if (userSettings.libraryPageSize() > 0) {
- query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
- }
- reloadItems();
- }
-
- window.scrollTo(0, 0);
- this.alphaPicker?.updateControls(query);
- const pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: false,
- updatePageSizeSetting: false,
- addLayoutButton: false,
- sortButton: false,
- filterButton: false
- });
- let html;
- const viewStyle = this.getCurrentViewStyle();
-
- if (viewStyle == 'Thumb') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'backdrop',
- preferThumb: true,
- context: 'movies',
- overlayPlayButton: true
- });
- } else if (viewStyle == 'ThumbCard') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'backdrop',
- preferThumb: true,
- context: 'movies',
- cardLayout: true,
- showTitle: true,
- showYear: true,
- centerText: true
- });
- } else if (viewStyle == 'Banner') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'banner',
- preferBanner: true,
- context: 'movies'
- });
- } else if (viewStyle == 'List') {
- html = listView.getListViewHtml({
- items: result.Items,
- context: 'movies',
- sortBy: query.SortBy
- });
- } else if (viewStyle == 'PosterCard') {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'portrait',
- context: 'movies',
- showTitle: true,
- showYear: true,
- cardLayout: true,
- centerText: true
- });
- } else {
- html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: 'portrait',
- context: 'movies',
- centerText: true,
- overlayPlayButton: true,
- showTitle: true,
- showYear: true
- });
- }
-
- let elems = tabContent.querySelectorAll('.paging');
-
- for (const elem of elems) {
- elem.innerHTML = pagingHtml;
- }
-
- elems = tabContent.querySelectorAll('.btnNextPage');
- for (const elem of elems) {
- elem.addEventListener('click', onNextPageClick);
- }
-
- elems = tabContent.querySelectorAll('.btnPreviousPage');
- for (const elem of elems) {
- elem.addEventListener('click', onPreviousPageClick);
- }
-
- if (!result.Items.length) {
- html = '';
-
- html += '
';
- html += '
' + globalize.translate('MessageNothingHere') + '
';
- html += '
' + globalize.translate('MessageNoTrailersFound') + '
';
- html += '
';
- }
-
- const itemsContainer = tabContent.querySelector('.itemsContainer');
- itemsContainer.innerHTML = html;
- imageLoader.lazyChildren(itemsContainer);
- libraryBrowser.saveQueryValues(getSavedQueryKey(tabContent), query);
- loading.hide();
- isLoading = false;
- });
- };
-
- const data = {};
- let isLoading = false;
-
- this.showFilterMenu = function () {
- import('../../components/filterdialog/filterdialog').then(({default: filterDialogFactory}) => {
- const filterDialog = new filterDialogFactory({
- query: getQuery(tabContent),
- mode: 'movies',
- serverId: ApiClient.serverId()
- });
- Events.on(filterDialog, 'filterchange', function () {
- getQuery(tabContent).StartIndex = 0;
- reloadItems();
- });
- filterDialog.show();
- });
- };
-
- this.getCurrentViewStyle = function () {
- return getPageData(tabContent).view;
- };
-
- const initPage = (tabElement) => {
- const alphaPickerElement = tabElement.querySelector('.alphaPicker');
- const itemsContainer = tabElement.querySelector('.itemsContainer');
- alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
- const newValue = e.detail.value;
- const query = getQuery(tabElement);
- if (newValue === '#') {
- query.NameLessThan = 'A';
- delete query.NameStartsWith;
- } else {
- query.NameStartsWith = newValue;
- delete query.NameLessThan;
- }
- query.StartIndex = 0;
- reloadItems();
- });
- this.alphaPicker = new AlphaPicker({
- element: alphaPickerElement,
- valueChangeEvent: 'click'
- });
-
- tabElement.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
- alphaPickerElement.classList.add('alphaPicker-fixed-right');
- itemsContainer.classList.add('padded-right-withalphapicker');
-
- tabElement.querySelector('.btnFilter').addEventListener('click', () => {
- this.showFilterMenu();
- });
- tabElement.querySelector('.btnSort').addEventListener('click', function (e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: globalize.translate('Name'),
- id: 'SortName'
- }, {
- name: globalize.translate('OptionImdbRating'),
- id: 'CommunityRating,SortName'
- }, {
- name: globalize.translate('OptionDateAdded'),
- id: 'DateCreated,SortName'
- }, {
- name: globalize.translate('OptionDatePlayed'),
- id: 'DatePlayed,SortName'
- }, {
- name: globalize.translate('OptionParentalRating'),
- id: 'OfficialRating,SortName'
- }, {
- name: globalize.translate('OptionPlayCount'),
- id: 'PlayCount,SortName'
- }, {
- name: globalize.translate('OptionReleaseDate'),
- id: 'PremiereDate,SortName'
- }],
- callback: function () {
- getQuery(tabElement).StartIndex = 0;
- reloadItems();
- },
- query: getQuery(tabElement),
- button: e.target
- });
- });
- };
-
- initPage(tabContent);
-
- this.renderTab = () => {
- reloadItems();
- this.alphaPicker?.updateControls(getQuery(tabContent));
- };
- }
-
-/* eslint-enable indent */