367 lines
12 KiB
TypeScript
367 lines
12 KiB
TypeScript
import { ImageType, ItemFields, ItemFilter } from '@jellyfin/sdk/lib/generated-client';
|
|
import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
|
|
import { ItemSortBy } from '@jellyfin/sdk/lib/models/api/item-sort-by';
|
|
import { SortOrder } from '@jellyfin/sdk/lib/generated-client/models/sort-order';
|
|
import * as userSettings from 'scripts/settings/userSettings';
|
|
import { Section, SectionType, SectionApiMethod } from 'types/sections';
|
|
|
|
export const getSuggestionSections = (): Section[] => {
|
|
const parametersOptions = {
|
|
fields: [ItemFields.PrimaryImageAspectRatio],
|
|
filters: [ItemFilter.IsPlayed],
|
|
IsPlayed: true,
|
|
imageTypeLimit: 1,
|
|
enableImageTypes: [
|
|
ImageType.Primary,
|
|
ImageType.Backdrop,
|
|
ImageType.Thumb
|
|
]
|
|
};
|
|
return [
|
|
{
|
|
name: 'HeaderContinueWatching',
|
|
apiMethod: SectionApiMethod.ResumeItems,
|
|
itemTypes: 'Movie',
|
|
type: SectionType.ContinueWatchingMovies,
|
|
parametersOptions: {
|
|
includeItemTypes: [BaseItemKind.Movie]
|
|
},
|
|
cardOptions: {
|
|
overlayPlayButton: true,
|
|
preferThumb: true,
|
|
shape: 'overflowBackdrop',
|
|
showYear: true
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderLatestMovies',
|
|
apiMethod: SectionApiMethod.LatestMedia,
|
|
itemTypes: 'Movie',
|
|
type: SectionType.LatestMovies,
|
|
parametersOptions: {
|
|
includeItemTypes: [BaseItemKind.Movie]
|
|
},
|
|
cardOptions: {
|
|
overlayPlayButton: true,
|
|
shape: 'overflowPortrait',
|
|
showYear: true
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderContinueWatching',
|
|
apiMethod: SectionApiMethod.ResumeItems,
|
|
itemTypes: 'Episode',
|
|
type: SectionType.ContinueWatchingEpisode,
|
|
parametersOptions: {
|
|
includeItemTypes: [BaseItemKind.Episode]
|
|
},
|
|
cardOptions: {
|
|
overlayPlayButton: true,
|
|
shape: 'overflowBackdrop',
|
|
preferThumb: true,
|
|
inheritThumb:
|
|
!userSettings.useEpisodeImagesInNextUpAndResume(undefined),
|
|
showYear: true
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderLatestEpisodes',
|
|
apiMethod: SectionApiMethod.LatestMedia,
|
|
itemTypes: 'Episode',
|
|
type: SectionType.LatestEpisode,
|
|
parametersOptions: {
|
|
includeItemTypes: [BaseItemKind.Episode]
|
|
},
|
|
cardOptions: {
|
|
overlayPlayButton: true,
|
|
shape: 'overflowBackdrop',
|
|
preferThumb: true,
|
|
showSeriesYear: true,
|
|
showParentTitle: true,
|
|
showUnplayedIndicator: false,
|
|
showChildCountIndicator: true,
|
|
lines: 2
|
|
}
|
|
},
|
|
{
|
|
name: 'NextUp',
|
|
apiMethod: SectionApiMethod.NextUp,
|
|
itemTypes: 'nextup',
|
|
type: SectionType.NextUp,
|
|
cardOptions: {
|
|
overlayPlayButton: true,
|
|
shape: 'overflowBackdrop',
|
|
preferThumb: true,
|
|
inheritThumb:
|
|
!userSettings.useEpisodeImagesInNextUpAndResume(undefined),
|
|
showParentTitle: true
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderLatestMusic',
|
|
apiMethod: SectionApiMethod.LatestMedia,
|
|
itemTypes: 'Audio',
|
|
type: SectionType.LatestMusic,
|
|
parametersOptions: {
|
|
includeItemTypes: [BaseItemKind.Audio]
|
|
},
|
|
cardOptions: {
|
|
showUnplayedIndicator: false,
|
|
shape: 'overflowSquare',
|
|
showParentTitle: true,
|
|
overlayPlayButton: true,
|
|
coverImage: true
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderRecentlyPlayed',
|
|
itemTypes: 'Audio',
|
|
type: SectionType.RecentlyPlayedMusic,
|
|
parametersOptions: {
|
|
sortBy: [ItemSortBy.DatePlayed],
|
|
sortOrder: [SortOrder.Descending],
|
|
includeItemTypes: [BaseItemKind.Audio],
|
|
...parametersOptions
|
|
},
|
|
cardOptions: {
|
|
showUnplayedIndicator: false,
|
|
shape: 'overflowSquare',
|
|
showParentTitle: true,
|
|
action: 'instantmix',
|
|
overlayMoreButton: true,
|
|
coverImage: true
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderFrequentlyPlayed',
|
|
itemTypes: 'Audio',
|
|
type: SectionType.FrequentlyPlayedMusic,
|
|
parametersOptions: {
|
|
sortBy: [ItemSortBy.PlayCount],
|
|
sortOrder: [SortOrder.Descending],
|
|
includeItemTypes: [BaseItemKind.Audio],
|
|
...parametersOptions
|
|
},
|
|
cardOptions: {
|
|
showUnplayedIndicator: false,
|
|
shape: 'overflowSquare',
|
|
showParentTitle: true,
|
|
action: 'instantmix',
|
|
overlayMoreButton: true,
|
|
coverImage: true
|
|
}
|
|
}
|
|
];
|
|
};
|
|
|
|
export const getProgramSections = (): Section[] => {
|
|
const cardOptions = {
|
|
inheritThumb: false,
|
|
shape: 'autooverflow',
|
|
defaultShape: 'overflowBackdrop',
|
|
centerText: true,
|
|
coverImage: true,
|
|
overlayText: false,
|
|
lazy: true,
|
|
showAirTime: true
|
|
};
|
|
|
|
return [
|
|
{
|
|
name: 'HeaderOnNow',
|
|
itemTypes: 'Programs',
|
|
apiMethod: SectionApiMethod.RecommendedPrograms,
|
|
type: SectionType.ActivePrograms,
|
|
parametersOptions: {
|
|
isAiring: true
|
|
},
|
|
cardOptions: {
|
|
showParentTitle: true,
|
|
showTitle: true,
|
|
showAirDateTime: false,
|
|
showAirEndTime: true,
|
|
overlayPlayButton: true,
|
|
overlayMoreButton: false,
|
|
overlayInfoButton: false,
|
|
preferThumb: 'auto',
|
|
...cardOptions
|
|
}
|
|
},
|
|
{
|
|
name: 'Shows',
|
|
itemTypes: 'Programs',
|
|
apiMethod: SectionApiMethod.LiveTvPrograms,
|
|
type: SectionType.UpcomingEpisodes,
|
|
parametersOptions: {
|
|
isAiring: false,
|
|
hasAired: false,
|
|
isMovie: false,
|
|
isSports: false,
|
|
isKids: false,
|
|
isNews: false,
|
|
isSeries: true
|
|
},
|
|
cardOptions: {
|
|
showParentTitle: true,
|
|
showTitle: true,
|
|
overlayPlayButton: false,
|
|
overlayMoreButton: false,
|
|
overlayInfoButton: false,
|
|
preferThumb: 'auto',
|
|
showAirDateTime: true,
|
|
...cardOptions
|
|
}
|
|
},
|
|
{
|
|
name: 'Movies',
|
|
itemTypes: 'Programs',
|
|
apiMethod: SectionApiMethod.LiveTvPrograms,
|
|
type: SectionType.UpcomingMovies,
|
|
parametersOptions: {
|
|
isAiring: false,
|
|
hasAired: false,
|
|
isMovie: true
|
|
},
|
|
cardOptions: {
|
|
preferThumb: null,
|
|
showParentTitle: false,
|
|
showTitle: true,
|
|
overlayPlayButton: false,
|
|
overlayMoreButton: false,
|
|
overlayInfoButton: false,
|
|
showAirDateTime: true,
|
|
...cardOptions
|
|
}
|
|
},
|
|
{
|
|
name: 'Sports',
|
|
itemTypes: 'Programs',
|
|
apiMethod: SectionApiMethod.LiveTvPrograms,
|
|
type: SectionType.UpcomingSports,
|
|
parametersOptions: {
|
|
isAiring: false,
|
|
hasAired: false,
|
|
isSports: true
|
|
},
|
|
cardOptions: {
|
|
showParentTitle: true,
|
|
showTitle: true,
|
|
overlayPlayButton: false,
|
|
overlayMoreButton: false,
|
|
overlayInfoButton: false,
|
|
preferThumb: 'auto',
|
|
showAirDateTime: true,
|
|
...cardOptions
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderForKids',
|
|
itemTypes: 'Programs',
|
|
apiMethod: SectionApiMethod.LiveTvPrograms,
|
|
type: SectionType.UpcomingKids,
|
|
parametersOptions: {
|
|
isAiring: false,
|
|
hasAired: false,
|
|
isKids: true
|
|
},
|
|
cardOptions: {
|
|
showParentTitle: true,
|
|
showTitle: true,
|
|
overlayPlayButton: false,
|
|
overlayMoreButton: false,
|
|
overlayInfoButton: false,
|
|
preferThumb: 'auto',
|
|
showAirDateTime: true,
|
|
...cardOptions
|
|
}
|
|
},
|
|
{
|
|
name: 'News',
|
|
itemTypes: 'Programs',
|
|
apiMethod: SectionApiMethod.LiveTvPrograms,
|
|
type: SectionType.UpcomingNews,
|
|
parametersOptions: {
|
|
isAiring: false,
|
|
hasAired: false,
|
|
isNews: true
|
|
},
|
|
cardOptions: {
|
|
overlayPlayButton: false,
|
|
overlayMoreButton: false,
|
|
overlayInfoButton: false,
|
|
showParentTitleOrTitle: true,
|
|
showTitle: false,
|
|
showParentTitle: false,
|
|
preferThumb: 'auto',
|
|
showAirDateTime: true,
|
|
...cardOptions
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderLatestRecordings',
|
|
itemTypes: 'Recordings',
|
|
apiMethod: SectionApiMethod.Recordings,
|
|
type: SectionType.LatestRecordings,
|
|
parametersOptions: {
|
|
limit: 12,
|
|
imageTypeLimit: 1
|
|
},
|
|
cardOptions: {
|
|
showYear: true,
|
|
lines: 2,
|
|
shape: 'autooverflow',
|
|
defaultShape: 'overflowBackdrop',
|
|
showTitle: true,
|
|
showParentTitle: true,
|
|
coverImage: true,
|
|
cardLayout: false,
|
|
centerText: true,
|
|
preferThumb: 'auto',
|
|
overlayText: false
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderAllRecordings',
|
|
itemTypes: 'Recordings',
|
|
apiMethod: SectionApiMethod.RecordingFolders,
|
|
type: SectionType.RecordingFolders,
|
|
cardOptions: {
|
|
showYear: false,
|
|
showParentTitle: false,
|
|
shape: 'autooverflow',
|
|
defaultShape: 'overflowBackdrop',
|
|
showTitle: true,
|
|
coverImage: true,
|
|
cardLayout: false,
|
|
centerText: true,
|
|
preferThumb: 'auto',
|
|
overlayText: false
|
|
}
|
|
},
|
|
{
|
|
name: 'HeaderActiveRecordings',
|
|
itemTypes: 'Recordings',
|
|
apiMethod: SectionApiMethod.Recordings,
|
|
type: SectionType.ActiveRecordings,
|
|
parametersOptions: {
|
|
isInProgress: true
|
|
},
|
|
cardOptions: {
|
|
shape: 'autooverflow',
|
|
defaultShape: 'backdrop',
|
|
showParentTitle: false,
|
|
showParentTitleOrTitle: true,
|
|
showTitle: true,
|
|
showAirTime: true,
|
|
showAirEndTime: true,
|
|
showChannelName: true,
|
|
coverImage: true,
|
|
overlayText: false,
|
|
overlayMoreButton: true,
|
|
cardLayout: false,
|
|
centerText: true,
|
|
preferThumb: 'auto'
|
|
}
|
|
}
|
|
];
|
|
};
|