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