jellyfish-web/src/controllers/list.js

463 lines
31 KiB
JavaScript
Raw Normal View History

2018-10-23 01:05:09 +03:00
define(["globalize", "listView", "layoutManager", "userSettings", "focusManager", "cardBuilder", "loading", "connectionManager", "alphaNumericShortcuts", "scroller", "playbackManager", "alphaPicker", "emby-itemscontainer", "emby-scroller"], function(globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, scroller, playbackManager, alphaPicker) {
"use strict";
function getInitialLiveTvQuery(instance, params) {
var query = {
UserId: connectionManager.getApiClient(params.serverId).getCurrentUserId(),
StartIndex: 0,
Fields: "ChannelInfo,PrimaryImageAspectRatio",
Limit: 300
};
return "Recordings" === params.type ? query.IsInProgress = !1 : query.HasAired = !1, params.genreId && (query.GenreIds = params.genreId), "true" === params.IsMovie ? query.IsMovie = !0 : "false" === params.IsMovie && (query.IsMovie = !1), "true" === params.IsSeries ? query.IsSeries = !0 : "false" === params.IsSeries && (query.IsSeries = !1), "true" === params.IsNews ? query.IsNews = !0 : "false" === params.IsNews && (query.IsNews = !1), "true" === params.IsSports ? query.IsSports = !0 : "false" === params.IsSports && (query.IsSports = !1), "true" === params.IsKids ? query.IsKids = !0 : "false" === params.IsKids && (query.IsKids = !1), "true" === params.IsAiring ? query.IsAiring = !0 : "false" === params.IsAiring && (query.IsAiring = !1), modifyQueryWithFilters(instance, query)
}
function modifyQueryWithFilters(instance, query) {
var sortValues = instance.getSortValues();
query.SortBy || (query.SortBy = sortValues.sortBy, query.SortOrder = sortValues.sortOrder), query.Fields = query.Fields ? query.Fields + ",PrimaryImageAspectRatio" : "PrimaryImageAspectRatio", query.ImageTypeLimit = 1;
var hasFilters, queryFilters = [],
filters = instance.getFilters();
return filters.IsPlayed && (queryFilters.push("IsPlayed"), hasFilters = !0), filters.IsUnplayed && (queryFilters.push("IsUnplayed"), hasFilters = !0), filters.IsFavorite && (queryFilters.push("IsFavorite"), hasFilters = !0), filters.IsResumable && (queryFilters.push("IsResumable"), hasFilters = !0), filters.VideoTypes && (hasFilters = !0, query.VideoTypes = filters.VideoTypes), filters.GenreIds && (hasFilters = !0, query.GenreIds = filters.GenreIds), filters.Is4K && (query.Is4K = !0, hasFilters = !0), filters.IsHD && (query.IsHD = !0, hasFilters = !0), filters.IsSD && (query.IsHD = !1, hasFilters = !0), filters.Is3D && (query.Is3D = !0, hasFilters = !0), filters.HasSubtitles && (query.HasSubtitles = !0, hasFilters = !0), filters.HasTrailer && (query.HasTrailer = !0, hasFilters = !0), filters.HasSpecialFeature && (query.HasSpecialFeature = !0, hasFilters = !0), filters.HasThemeSong && (query.HasThemeSong = !0, hasFilters = !0), filters.HasThemeVideo && (query.HasThemeVideo = !0, hasFilters = !0), query.Filters = queryFilters.length ? queryFilters.join(",") : null, instance.setFilterStatus(hasFilters), instance.alphaPicker && (query.NameStartsWithOrGreater = instance.alphaPicker.value()), query
}
function updateSortText(instance) {
var btnSortText = instance.btnSortText;
if (btnSortText) {
for (var options = instance.getSortMenuOptions(), values = instance.getSortValues(), sortBy = values.sortBy, i = 0, length = options.length; i < length; i++)
if (sortBy === options[i].value) {
btnSortText.innerHTML = globalize.translate("SortByValue", options[i].name);
2018-10-23 01:05:09 +03:00
break
} var btnSortIcon = instance.btnSortIcon;
btnSortIcon && (btnSortIcon.innerHTML = "Descending" === values.sortOrder ? "&#xE5DB;" : "&#xE5D8;")
}
}
function updateItemsContainerForViewType(instance) {
"list" === instance.getViewSettings().imageType ? (instance.itemsContainer.classList.remove("vertical-wrap"), instance.itemsContainer.classList.add("vertical-list")) : (instance.itemsContainer.classList.add("vertical-wrap"), instance.itemsContainer.classList.remove("vertical-list"))
}
function updateAlphaPickerState(instance, numItems) {
if (instance.alphaPicker) {
var alphaPicker = instance.alphaPickerElement;
if (alphaPicker) {
var values = instance.getSortValues();
null == numItems && (numItems = 100), "SortName" === values.sortBy && "Ascending" === values.sortOrder && numItems > 40 ? (alphaPicker.classList.remove("hide"), layoutManager.tv ? instance.itemsContainer.parentNode.classList.add("padded-left-withalphapicker") : instance.itemsContainer.parentNode.classList.add("padded-right-withalphapicker")) : (alphaPicker.classList.add("hide"), instance.itemsContainer.parentNode.classList.remove("padded-left-withalphapicker"), instance.itemsContainer.parentNode.classList.remove("padded-right-withalphapicker"))
}
}
}
function getItems(instance, params, item, sortBy, startIndex, limit) {
var apiClient = connectionManager.getApiClient(params.serverId);
if (instance.queryRecursive = !1, "Recordings" === params.type) return apiClient.getLiveTvRecordings(getInitialLiveTvQuery(instance, params));
if ("Programs" === params.type) return "true" === params.IsAiring ? apiClient.getLiveTvRecommendedPrograms(getInitialLiveTvQuery(instance, params)) : apiClient.getLiveTvPrograms(getInitialLiveTvQuery(instance, params));
if ("nextup" === params.type) return apiClient.getNextUpEpisodes(modifyQueryWithFilters(instance, {
Limit: limit,
Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo",
UserId: apiClient.getCurrentUserId(),
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Thumb",
EnableTotalRecordCount: !1,
SortBy: sortBy
}));
if (!item) {
instance.queryRecursive = !0;
var method = "getItems";
return "MusicArtist" === params.type ? method = "getArtists" : "Person" === params.type && (method = "getPeople"), apiClient[method](apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, {
StartIndex: startIndex,
Limit: limit,
Fields: "PrimaryImageAspectRatio,SortName",
ImageTypeLimit: 1,
IncludeItemTypes: "MusicArtist" === params.type || "Person" === params.type ? null : params.type,
Recursive: !0,
IsFavorite: "true" === params.IsFavorite || null,
ArtistIds: params.artistId || null,
SortBy: sortBy
}))
}
2019-01-27 22:10:07 +01:00
if ("Genre" === item.Type || "MusicGenre" === item.Type || "Studio" === item.Type || "Person" === item.Type) {
2018-10-23 01:05:09 +03:00
instance.queryRecursive = !0;
var query = {
StartIndex: startIndex,
Limit: limit,
Fields: "PrimaryImageAspectRatio,SortName",
Recursive: !0,
parentId: params.parentId,
SortBy: sortBy
};
2019-01-27 22:10:07 +01:00
return "Studio" === item.Type ? query.StudioIds = item.Id : "Genre" === item.Type || "MusicGenre" === item.Type ? query.GenreIds = item.Id : "Person" === item.Type && (query.PersonIds = item.Id), "MusicGenre" === item.Type ? query.IncludeItemTypes = "MusicAlbum" : "GameGenre" === item.Type ? query.IncludeItemTypes = "Game" : "movies" === item.CollectionType ? query.IncludeItemTypes = "Movie" : "tvshows" === item.CollectionType ? query.IncludeItemTypes = "Series" : "Genre" === item.Type ? query.IncludeItemTypes = "Movie,Series,Video" : "Person" === item.Type && (query.IncludeItemTypes = params.type), apiClient.getItems(apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, query))
2018-10-23 01:05:09 +03:00
}
return apiClient.getItems(apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, {
StartIndex: startIndex,
Limit: limit,
Fields: "PrimaryImageAspectRatio,SortName",
ImageTypeLimit: 1,
ParentId: item.Id,
SortBy: sortBy
}))
}
function getItem(params) {
if ("Recordings" === params.type) return Promise.resolve(null);
if ("Programs" === params.type) return Promise.resolve(null);
if ("nextup" === params.type) return Promise.resolve(null);
var apiClient = connectionManager.getApiClient(params.serverId),
2019-01-27 22:10:07 +01:00
itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId;
2018-10-23 01:05:09 +03:00
return itemId ? apiClient.getItem(apiClient.getCurrentUserId(), itemId) : Promise.resolve(null)
}
function showViewSettingsMenu() {
var instance = this;
require(["viewSettings"], function(ViewSettings) {
(new ViewSettings).show({
settingsKey: instance.getSettingsKey(),
settings: instance.getViewSettings(),
visibleSettings: instance.getVisibleViewSettings()
}).then(function() {
updateItemsContainerForViewType(instance), instance.itemsContainer.refreshItems()
})
})
}
function showFilterMenu() {
var instance = this;
require(["filterMenu"], function(FilterMenu) {
(new FilterMenu).show({
settingsKey: instance.getSettingsKey(),
settings: instance.getFilters(),
visibleSettings: instance.getVisibleFilters(),
onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer),
parentId: instance.params.parentId,
itemTypes: instance.getItemTypes(),
serverId: instance.params.serverId,
filterMenuOptions: instance.getFilterMenuOptions()
}).then(function() {
instance.itemsContainer.refreshItems()
})
})
}
function showSortMenu() {
var instance = this;
require(["sortMenu"], function(SortMenu) {
(new SortMenu).show({
settingsKey: instance.getSettingsKey(),
settings: instance.getSortValues(),
onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer),
serverId: instance.params.serverId,
sortOptions: instance.getSortMenuOptions()
}).then(function() {
updateSortText(instance), updateAlphaPickerState(instance), instance.itemsContainer.refreshItems()
})
})
}
function onNewItemClick() {
var instance = this;
require(["playlistEditor"], function(playlistEditor) {
(new playlistEditor).show({
items: [],
serverId: instance.params.serverId
})
})
}
function hideOrShowAll(elems, hide) {
for (var i = 0, length = elems.length; i < length; i++) hide ? elems[i].classList.add("hide") : elems[i].classList.remove("hide")
}
function bindAll(elems, eventName, fn) {
for (var i = 0, length = elems.length; i < length; i++) elems[i].addEventListener(eventName, fn)
}
function ItemsView(view, params) {
function fetchData() {
return getItems(self, params, self.currentItem).then(function(result) {
return null == self.totalItemCount && (self.totalItemCount = result.Items ? result.Items.length : result.length), updateAlphaPickerState(self, self.totalItemCount), result
})
}
function getItemsHtml(items) {
var settings = self.getViewSettings();
if ("list" === settings.imageType) return listView.getListViewHtml({
items: items
});
var shape, preferThumb, preferDisc, preferLogo, defaultShape, item = self.currentItem,
lines = settings.showTitle ? 2 : 0;
"banner" === settings.imageType ? shape = "banner" : "disc" === settings.imageType ? (shape = "square", preferDisc = !0) : "logo" === settings.imageType ? (shape = "backdrop", preferLogo = !0) : "thumb" === settings.imageType ? (shape = "backdrop", preferThumb = !0) : "nextup" === params.type ? (shape = "backdrop", preferThumb = "thumb" === settings.imageType) : "Programs" === params.type || "Recordings" === params.type ? (shape = "true" === params.IsMovie ? "portrait" : "autoVertical", preferThumb = "true" !== params.IsMovie && "auto", defaultShape = "true" === params.IsMovie ? "portrait" : "backdrop") : shape = "autoVertical";
var posterOptions = {
shape: shape,
showTitle: settings.showTitle,
showYear: settings.showTitle,
centerText: !0,
coverImage: !0,
preferThumb: preferThumb,
preferDisc: preferDisc,
preferLogo: preferLogo,
overlayPlayButton: !1,
overlayMoreButton: !0,
overlayText: !settings.showTitle,
defaultShape: defaultShape,
action: "Audio" === params.type ? "playallfromhere" : null
};
if ("nextup" === params.type) posterOptions.showParentTitle = settings.showTitle;
else if ("Person" === params.type) posterOptions.showYear = !1, posterOptions.showParentTitle = !1, lines = 1;
else if ("Audio" === params.type) posterOptions.showParentTitle = settings.showTitle;
else if ("MusicAlbum" === params.type) posterOptions.showParentTitle = settings.showTitle;
else if ("Episode" === params.type) posterOptions.showParentTitle = settings.showTitle;
else if ("MusicArtist" === params.type) posterOptions.showYear = !1, lines = 1;
else if ("Programs" === params.type) {
lines = settings.showTitle ? 1 : 0;
var showParentTitle = settings.showTitle && "true" !== params.IsMovie;
showParentTitle && lines++;
var showAirTime = settings.showTitle && "Recordings" !== params.type;
showAirTime && lines++;
var showYear = settings.showTitle && "true" === params.IsMovie && "Recordings" === params.type;
showYear && lines++, posterOptions = Object.assign(posterOptions, {
inheritThumb: "Recordings" === params.type,
context: "livetv",
showParentTitle: showParentTitle,
showAirTime: showAirTime,
showAirDateTime: showAirTime,
overlayPlayButton: !1,
overlayMoreButton: !0,
showYear: showYear,
coverImage: !0
})
} else posterOptions.showParentTitle = settings.showTitle;
return posterOptions.lines = lines, posterOptions.items = items, item && "folders" === item.CollectionType && (posterOptions.context = "folders"), cardBuilder.getCardsHtml(posterOptions)
}
function initAlphaPicker() {
self.scroller = view.querySelector(".scrollFrameY");
var alphaPickerElement = self.alphaPickerElement;
layoutManager.tv ? (alphaPickerElement.classList.add("alphaPicker-fixed-left"), alphaPickerElement.classList.add("focuscontainer-left"), self.itemsContainer.parentNode.classList.add("padded-left-withalphapicker")) : (alphaPickerElement.classList.add("alphaPicker-fixed-right"), alphaPickerElement.classList.add("focuscontainer-right"), self.itemsContainer.parentNode.classList.add("padded-right-withalphapicker")), self.alphaPicker = new alphaPicker({
element: alphaPickerElement,
itemsContainer: layoutManager.tv ? self.itemsContainer : null,
itemClass: "card",
valueChangeEvent: layoutManager.tv ? null : "click"
}), self.alphaPicker.on("alphavaluechanged", onAlphaPickerValueChanged)
}
function onAlphaPickerValueChanged() {
self.alphaPicker.value();
self.itemsContainer.refreshItems()
}
function setTitle(item) {
Emby.Page.setTitle(getTitle(item) || ""), item && "playlists" === item.CollectionType ? hideOrShowAll(view.querySelectorAll(".btnNewItem"), !1) : hideOrShowAll(view.querySelectorAll(".btnNewItem"), !0)
}
function getTitle(item) {
return "Recordings" === params.type ? globalize.translate("Recordings") : "Programs" === params.type ? "true" === params.IsMovie ? globalize.translate("Movies") : "true" === params.IsSports ? globalize.translate("Sports") : "true" === params.IsKids ? globalize.translate("HeaderForKids") : "true" === params.IsAiring ? globalize.translate("HeaderOnNow") : "true" === params.IsSeries ? globalize.translate("Shows") : "true" === params.IsNews ? globalize.translate("News") : globalize.translate("Programs") : "nextup" === params.type ? globalize.translate("NextUp") : "favoritemovies" === params.type ? globalize.translate("FavoriteMovies") : item ? item.Name : "Movie" === params.type ? globalize.translate("Movies") : "Series" === params.type ? globalize.translate("Shows") : "Season" === params.type ? globalize.translate("Seasons") : "Episode" === params.type ? globalize.translate("Episodes") : "MusicArtist" === params.type ? globalize.translate("Artists") : "MusicAlbum" === params.type ? globalize.translate("Albums") : "Audio" === params.type ? globalize.translate("Songs") : "Video" === params.type ? globalize.translate("Videos") : void 0
2018-10-23 01:05:09 +03:00
}
function play() {
var currentItem = self.currentItem;
if (currentItem && !self.hasFilters) return void playbackManager.play({
items: [currentItem]
});
getItems(self, self.params, currentItem, null, null, 300).then(function(result) {
playbackManager.play({
items: result.Items
})
})
}
function queue() {
var currentItem = self.currentItem;
if (currentItem && !self.hasFilters) return void playbackManager.queue({
items: [currentItem]
});
getItems(self, self.params, currentItem, null, null, 300).then(function(result) {
playbackManager.queue({
items: result.Items
})
})
}
function shuffle() {
var currentItem = self.currentItem;
if (currentItem && !self.hasFilters) return void playbackManager.shuffle(currentItem);
getItems(self, self.params, currentItem, "Random", null, 300).then(function(result) {
playbackManager.play({
items: result.Items
})
})
}
var self = this;
self.params = params, this.itemsContainer = view.querySelector(".itemsContainer"), params.parentId ? this.itemsContainer.setAttribute("data-parentid", params.parentId) : "nextup" === params.type ? this.itemsContainer.setAttribute("data-monitor", "videoplayback") : "favoritemovies" === params.type ? this.itemsContainer.setAttribute("data-monitor", "markfavorite") : "Programs" === params.type && this.itemsContainer.setAttribute("data-refreshinterval", "300000");
var i, length, btnViewSettings = view.querySelectorAll(".btnViewSettings");
for (i = 0, length = btnViewSettings.length; i < length; i++) btnViewSettings[i].addEventListener("click", showViewSettingsMenu.bind(this));
var filterButtons = view.querySelectorAll(".btnFilter");
this.filterButtons = filterButtons;
var hasVisibleFilters = this.getVisibleFilters().length;
for (i = 0, length = filterButtons.length; i < length; i++) {
var btnFilter = filterButtons[i];
btnFilter.addEventListener("click", showFilterMenu.bind(this)), hasVisibleFilters ? btnFilter.classList.remove("hide") : btnFilter.classList.add("hide")
}
var sortButtons = view.querySelectorAll(".btnSort");
for (this.sortButtons = sortButtons, i = 0, length = sortButtons.length; i < length; i++) {
var sortButton = sortButtons[i];
sortButton.addEventListener("click", showSortMenu.bind(this)), "nextup" !== params.type && sortButton.classList.remove("hide")
}
this.btnSortText = view.querySelector(".btnSortText"), this.btnSortIcon = view.querySelector(".btnSortIcon"), bindAll(view.querySelectorAll(".btnNewItem"), "click", onNewItemClick.bind(this)), this.alphaPickerElement = view.querySelector(".alphaPicker"), self.itemsContainer.fetchData = fetchData, self.itemsContainer.getItemsHtml = getItemsHtml, view.addEventListener("viewshow", function(e) {
var isRestored = e.detail.isRestored;
isRestored || (loading.show(), updateSortText(self), updateItemsContainerForViewType(self)), setTitle(null), getItem(params).then(function(item) {
setTitle(item), self.currentItem = item;
var refresh = !isRestored;
self.itemsContainer.resume({
refresh: refresh
}).then(function() {
loading.hide(), refresh && focusManager.autoFocus(self.itemsContainer)
}), isRestored || item && "PhotoAlbum" !== item.Type && initAlphaPicker();
var itemType = item ? item.Type : null;
"MusicGenre" === itemType || "Programs" !== params.type && "Channel" !== itemType ? hideOrShowAll(view.querySelectorAll(".btnPlay"), !1) : hideOrShowAll(view.querySelectorAll(".btnPlay"), !0), "MusicGenre" === itemType || "Programs" !== params.type && "nextup" !== params.type && "Channel" !== itemType ? hideOrShowAll(view.querySelectorAll(".btnShuffle"), !1) : hideOrShowAll(view.querySelectorAll(".btnShuffle"), !0), item && playbackManager.canQueue(item) ? hideOrShowAll(view.querySelectorAll(".btnQueue"), !1) : hideOrShowAll(view.querySelectorAll(".btnQueue"), !0)
}), isRestored || (bindAll(view.querySelectorAll(".btnPlay"), "click", play), bindAll(view.querySelectorAll(".btnQueue"), "click", queue), bindAll(view.querySelectorAll(".btnShuffle"), "click", shuffle)), this.alphaNumericShortcuts = new AlphaNumericShortcuts({
itemsContainer: self.itemsContainer
})
}), view.addEventListener("viewhide", function(e) {
var itemsContainer = self.itemsContainer;
itemsContainer && itemsContainer.pause();
var alphaNumericShortcuts = self.alphaNumericShortcuts;
alphaNumericShortcuts && (alphaNumericShortcuts.destroy(), self.alphaNumericShortcuts = null)
}), view.addEventListener("viewdestroy", function() {
self.listController && self.listController.destroy(), self.alphaPicker && (self.alphaPicker.off("alphavaluechanged", onAlphaPickerValueChanged), self.alphaPicker.destroy()), self.currentItem = null, self.scroller = null, self.itemsContainer = null, self.filterButtons = null, self.sortButtons = null, self.btnSortText = null, self.btnSortIcon = null, self.alphaPickerElement = null
})
}
return ItemsView.prototype.getFilters = function() {
var basekey = this.getSettingsKey();
return {
IsPlayed: "true" === userSettings.getFilter(basekey + "-filter-IsPlayed"),
IsUnplayed: "true" === userSettings.getFilter(basekey + "-filter-IsUnplayed"),
IsFavorite: "true" === userSettings.getFilter(basekey + "-filter-IsFavorite"),
IsResumable: "true" === userSettings.getFilter(basekey + "-filter-IsResumable"),
Is4K: "true" === userSettings.getFilter(basekey + "-filter-Is4K"),
IsHD: "true" === userSettings.getFilter(basekey + "-filter-IsHD"),
IsSD: "true" === userSettings.getFilter(basekey + "-filter-IsSD"),
Is3D: "true" === userSettings.getFilter(basekey + "-filter-Is3D"),
VideoTypes: userSettings.getFilter(basekey + "-filter-VideoTypes"),
SeriesStatus: userSettings.getFilter(basekey + "-filter-SeriesStatus"),
HasSubtitles: userSettings.getFilter(basekey + "-filter-HasSubtitles"),
HasTrailer: userSettings.getFilter(basekey + "-filter-HasTrailer"),
HasSpecialFeature: userSettings.getFilter(basekey + "-filter-HasSpecialFeature"),
HasThemeSong: userSettings.getFilter(basekey + "-filter-HasThemeSong"),
HasThemeVideo: userSettings.getFilter(basekey + "-filter-HasThemeVideo"),
GenreIds: userSettings.getFilter(basekey + "-filter-GenreIds")
}
}, ItemsView.prototype.getSortValues = function() {
var basekey = this.getSettingsKey();
return {
sortBy: userSettings.getFilter(basekey + "-sortby") || this.getDefaultSortBy(),
sortOrder: "Descending" === userSettings.getFilter(basekey + "-sortorder") ? "Descending" : "Ascending"
}
}, ItemsView.prototype.getDefaultSortBy = function() {
var params = this.params,
sortNameOption = this.getNameSortOption(params);
return params.type ? sortNameOption.value : "IsFolder," + sortNameOption.value
}, ItemsView.prototype.getSortMenuOptions = function() {
var sortBy = [],
params = this.params;
"Programs" === params.type && sortBy.push({
name: globalize.translate("AirDate"),
2018-10-23 01:05:09 +03:00
value: "StartDate,SortName"
});
var option = this.getNameSortOption(params);
return option && sortBy.push(option), option = this.getCommunityRatingSortOption(), option && sortBy.push(option), option = this.getCriticRatingSortOption(), option && sortBy.push(option), "Programs" !== params.type && sortBy.push({
name: globalize.translate("DateAdded"),
2018-10-23 01:05:09 +03:00
value: "DateCreated,SortName"
}), option = this.getDatePlayedSortOption(), option && sortBy.push(option), params.type || (option = this.getNameSortOption(params), sortBy.push({
name: globalize.translate("Folders"),
2018-10-23 01:05:09 +03:00
value: "IsFolder," + option.value
})), sortBy.push({
name: globalize.translate("ParentalRating"),
2018-10-23 01:05:09 +03:00
value: "OfficialRating,SortName"
}), option = this.getPlayCountSortOption(), option && sortBy.push(option), sortBy.push({
name: globalize.translate("ReleaseDate"),
2018-10-23 01:05:09 +03:00
value: "ProductionYear,PremiereDate,SortName"
}), sortBy.push({
name: globalize.translate("Runtime"),
2018-10-23 01:05:09 +03:00
value: "Runtime,SortName"
}), sortBy
}, ItemsView.prototype.getNameSortOption = function(params) {
return "Episode" === params.type ? {
name: globalize.translate("Name"),
2018-10-23 01:05:09 +03:00
value: "SeriesName,SortName"
} : {
name: globalize.translate("Name"),
2018-10-23 01:05:09 +03:00
value: "SortName"
}
}, ItemsView.prototype.getPlayCountSortOption = function() {
return "Programs" === this.params.type ? null : {
name: globalize.translate("PlayCount"),
2018-10-23 01:05:09 +03:00
value: "PlayCount,SortName"
}
}, ItemsView.prototype.getDatePlayedSortOption = function() {
return "Programs" === this.params.type ? null : {
name: globalize.translate("DatePlayed"),
2018-10-23 01:05:09 +03:00
value: "DatePlayed,SortName"
}
}, ItemsView.prototype.getCriticRatingSortOption = function() {
return "Programs" === this.params.type ? null : {
name: globalize.translate("CriticRating"),
2018-10-23 01:05:09 +03:00
value: "CriticRating,SortName"
}
}, ItemsView.prototype.getCommunityRatingSortOption = function() {
return {
name: globalize.translate("CommunityRating"),
2018-10-23 01:05:09 +03:00
value: "CommunityRating,SortName"
}
}, ItemsView.prototype.getVisibleFilters = function() {
var filters = [],
params = this.params;
return "nextup" === params.type || ("Programs" === params.type ? filters.push("Genres") : (params.type, filters.push("IsUnplayed"), filters.push("IsPlayed"), params.IsFavorite || filters.push("IsFavorite"), filters.push("IsResumable"), filters.push("VideoType"), filters.push("HasSubtitles"), filters.push("HasTrailer"), filters.push("HasSpecialFeature"), filters.push("HasThemeSong"), filters.push("HasThemeVideo"))), filters
}, ItemsView.prototype.setFilterStatus = function(hasFilters) {
this.hasFilters = hasFilters;
var filterButtons = this.filterButtons;
if (filterButtons.length)
for (var i = 0, length = filterButtons.length; i < length; i++) {
var btnFilter = filterButtons[i],
bubble = btnFilter.querySelector(".filterButtonBubble");
if (!bubble) {
if (!hasFilters) continue;
btnFilter.insertAdjacentHTML("afterbegin", '<div class="filterButtonBubble">!</div>'), btnFilter.classList.add("btnFilterWithBubble"), bubble = btnFilter.querySelector(".filterButtonBubble")
}
hasFilters ? bubble.classList.remove("hide") : bubble.classList.add("hide")
}
}, ItemsView.prototype.getFilterMenuOptions = function() {
var params = this.params;
return {
IsAiring: params.IsAiring,
IsMovie: params.IsMovie,
IsSports: params.IsSports,
IsKids: params.IsKids,
IsNews: params.IsNews,
IsSeries: params.IsSeries,
Recursive: this.queryRecursive
}
}, ItemsView.prototype.getVisibleViewSettings = function() {
var item = (this.params, this.currentItem),
fields = ["showTitle"];
return (!item || "PhotoAlbum" !== item.Type && "ChannelFolderItem" !== item.Type) && fields.push("imageType"), fields.push("viewType"), fields
}, ItemsView.prototype.getViewSettings = function() {
var basekey = this.getSettingsKey(),
params = this.params,
item = this.currentItem,
showTitle = userSettings.get(basekey + "-showTitle");
"true" === showTitle ? showTitle = !0 : "false" === showTitle ? showTitle = !1 : "Programs" === params.type || "Recordings" === params.type || "Person" === params.type || "nextup" === params.type || "Audio" === params.type || "MusicAlbum" === params.type || "MusicArtist" === params.type ? showTitle = !0 : item && "PhotoAlbum" !== item.Type && (showTitle = !0);
var imageType = userSettings.get(basekey + "-imageType");
return imageType || "nextup" === params.type && (imageType = "thumb"), {
showTitle: showTitle,
showYear: "false" !== userSettings.get(basekey + "-showYear"),
imageType: imageType || "primary",
viewType: userSettings.get(basekey + "-viewType") || "images"
}
}, ItemsView.prototype.getItemTypes = function() {
var params = this.params;
return "nextup" === params.type ? ["Episode"] : "Programs" === params.type ? ["Program"] : []
}, ItemsView.prototype.getSettingsKey = function() {
var values = [];
values.push("items");
var params = this.params;
2019-01-27 22:10:07 +01:00
return params.type ? values.push(params.type) : params.parentId && values.push(params.parentId), params.IsAiring && values.push("IsAiring"), params.IsMovie && values.push("IsMovie"), params.IsKids && values.push("IsKids"), params.IsSports && values.push("IsSports"), params.IsNews && values.push("IsNews"), params.IsSeries && values.push("IsSeries"), params.IsFavorite && values.push("IsFavorite"), params.genreId && values.push("Genre"), params.musicGenreId && values.push("MusicGenre"), params.studioId && values.push("Studio"), params.personId && values.push("Person"), params.parentId && values.push("Folder"), values.join("-")
2018-10-23 01:05:09 +03:00
}, ItemsView
2019-01-27 22:10:07 +01:00
});