jellyfish-web/src/utils/sections.ts

368 lines
12 KiB
TypeScript
Raw Normal View History

2024-01-12 21:08:06 +03:00
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'
}
}
];
};