Members
(static, constant) EXTRAS_GRP_TARGET_Y
Y translation extrasGrp reaches after sliding open (ExtrasSlider.xml VertSlider end keyValue)
- Default Value
- 306
- Source
(static, constant) ITEM_DETAILS_EXTRAS_PADDING
Gap between bottom of itemInfoRows and top of extras pane when extras are open
- Default Value
- 48
- Source
(static, constant) LOGO_MAX_DISPLAY_HEIGHT
Maximum display height for non-Person primary images — prevents portrait posters from extending above the metadata rows. Person photos are exempt because their info rows are short and don't reach the right edge where the photo sits.
- Default Value
- 336
- Source
(static, constant) LOGO_MAX_DISPLAY_WIDTH
Maximum display width for the logo image — prevents very wide/flat logos from overlapping buttons
- Default Value
- 500
- Source
(static, constant) LOGO_MIN_DISPLAY_HEIGHT
Minimum display height for the logo image — images too small are scaled up (aspect ratio preserved).
- Default Value
- 212
- Source
Methods
(static) OnScreenShown() → {void}
OnScreenShown: Callback when view is presented on screen
- Source
- Type:
- void
(static) SetDefaultAudioTrack(mediaStreams) → {void}
| Name | Type | Description |
|---|---|---|
mediaStreams | object |
- Type:
- void
(static) SetUpAudioOptions(streams) → {void}
| Name | Type | Description |
|---|---|---|
streams | dynamic |
- Type:
- void
(static) SetUpSubtitleDisplay(streams, selectedAudioStreamIndex) → {void}
SetUpSubtitleDisplay: Display the subtitle stream that will be auto-selected during playback. Uses findDefaultSubtitleStreamIndex() to match the same selection logic as playback (subtitle mode, language preference, text-only preference, smart mode audio matching). Shows "+N" count if multiple subtitle tracks exist.
| Name | Type | Description |
|---|---|---|
streams | object | Array of MediaStream objects (all types: video, audio, subtitle) |
selectedAudioStreamIndex | integer | Server-side index of the selected audio stream |
- Type:
- void
(static) SetUpVideoOptions(streams) → {void}
| Name | Type | Description |
|---|---|---|
streams | dynamic |
- Type:
- void
(static) activateExtras() → {void}
- Type:
- void
(static) audioOptionsClosed() → {void}
audioOptionsClosed: Sync audio stream selection back from ItemOptions popup
- Type:
- void
(static) createDividerNode(dividerId) → {object}
createDividerNode: Create a bullet divider node for separating info items
| Name | Type | Description |
|---|---|---|
dividerId | string | Unique ID for the divider |
Configured divider node
- Type:
- object
(static) createInfoLabel(labelId) → {object}
createInfoLabel: Create a bold label node for the info rows
| Name | Type | Description |
|---|---|---|
labelId | string | Unique ID for the label |
Configured LabelPrimaryMedium node
- Type:
- object
(static) deactivateExtras() → {void}
- Type:
- void
(static) destroy() → {void}
destroy: Full teardown releasing all resources before component removal Called automatically by SceneManager.popScene() / clearScenes()
- Type:
- void
(static) displayDirectorGenreNode(node) → {void}
displayDirectorGenreNode: Add a node to the second info row, prepending a bullet divider if needed
| Name | Type | Description |
|---|---|---|
node | object |
- Type:
- void
(static) displayInfoNode(node) → {void}
displayInfoNode: Add a node to the info group, prepending a bullet divider if needed
| Name | Type | Description |
|---|---|---|
node | object |
- Type:
- void
(static) focusButtonGroupChild() → {void}
focusButtonGroupChild: Focus the button at the current buttonFocused index directly
- Type:
- void
(static) getButtonIndex(buttonId) → {integer}
getButtonIndex: Find the index of a button by ID in the button group
| Name | Type | Description |
|---|---|---|
buttonId | string | The id of the button to find |
The index of the button, or -1 if not found
- Type:
- integer
(static) getEndTime() → {string}
- Type:
- string
(static) getHistory() → {string}
getHistory: Format the air schedule/status string for a Series item Example output: "ABC" or "Fridays at 9:30 PM on NBC"
- Type:
- string
(static) getResumeButtonText(item) → {string}
getResumeButtonText: Return "Resume S{n}E{n}" when season and episode numbers are known, otherwise fall back to plain "Resume".
| Name | Type | Description |
|---|---|---|
item | object | nextUpEpisode JellyfinBaseItem node |
- Source
Localised button label
- Type:
- string
(static) getRuntime() → {integer}
- Type:
- integer
(static) init() → {void}
- Source
- Type:
- void
(static) itemContentChanged() → {void}
- Type:
- void
(static) manageResumeButton() → {void}
manageResumeButton: Add or remove Resume button based on playback position (non-Series types)
- Source
- Type:
- void
(static) nextUpEpisodeChanged() → {void}
nextUpEpisodeChanged: For Series — create/remove Resume button based on nextUpEpisode
- Source
- Type:
- void
(static) onClockMinuteChanged() → {void}
onClockMinuteChanged: Dynamically update "Ends At" time when overhang clock minute changes
- Type:
- void
(static) onFirstEpisodeLoaded() → {void}
onFirstEpisodeLoaded: Start playback of first episode for Series Play button
- Type:
- void
(static) onItemDetailsRendered() → {void}
- Type:
- void
(static) onKeyEvent(key, press) → {boolean}
| Name | Type | Description |
|---|---|---|
key | string | |
press | boolean |
- Type:
- boolean
(static) onLogoLoadStatusChanged() → {void}
onLogoLoadStatusChanged: Position logo to the right, with its bottom just above the date label. When the date label is hidden, anchors to where the date label would be. Images smaller than LOGO_MIN_DISPLAY_HEIGHT are scaled up while preserving aspect ratio, unless the logo is very wide/flat, in which case LOGO_MAX_DISPLAY_WIDTH takes precedence.
- Type:
- void
(static) onPersonHasMediaChanged() → {void}
onPersonHasMediaChanged: Show or hide the Shuffle button once the person extras chain completes. Fires via alwaysNotify so it triggers even when personHasMedia stays the same value (e.g. on refresh).
- Type:
- void
(static) onRefreshExtrasData() → {void}
onRefreshExtrasData: Reload all extras rows when the user explicitly presses Refresh.
- Type:
- void
(static) onSeasonSeriesDataLoaded() → {void}
onSeasonSeriesDataLoaded: Update Season info rows and logo with parent series metadata
- Type:
- void
(static) onSeriesResumeLoaded() → {void}
onSeriesResumeLoaded: Set nextUpEpisode from seriesResume task result to show/hide the Resume button
- Type:
- void
(static) populateDescriptionGroup() → {void}
populateDescriptionGroup: Set FocusableOverview text with tagline and overview
- Type:
- void
(static) populateInfoGroup() → {void}
populateInfoGroup: Dispatch to type-specific info row builder
- Type:
- void
(static) populateInfoGroupBoxSet(item, userSettings) → {void}
populateInfoGroupBoxSet: Info rows for BoxSet (movie collection) Row 1: Year · Official Rating · Community Rating · N Movies Row 2: Genres · Studio
| Name | Type | Description |
|---|---|---|
item | object | |
userSettings | object |
- Type:
- void
(static) populateInfoGroupEpisode(item, userSettings) → {void}
populateInfoGroupEpisode: Info rows for Episode Row 1: Air Date · Official Rating · Runtime · Ends At Row 2: Series name + "S{n}E{n}"
| Name | Type | Description |
|---|---|---|
item | object | |
userSettings | object |
- Type:
- void
(static) populateInfoGroupMovie(item, userSettings) → {void}
populateInfoGroupMovie: Info rows for Movie, Video, Recording Row 1: Year · Official Rating · Community Rating · Critic Rating · Runtime · Ends At Row 2: Genres · Director(s)
| Name | Type | Description |
|---|---|---|
item | object | |
userSettings | object |
- Type:
- void
(static) populateInfoGroupMusicVideo(item, userSettings) → {void}
populateInfoGroupMusicVideo: Info rows for MusicVideo Row 1: Year · Official Rating · Runtime · Ends At Row 2: Genres · By: Artist(s)
| Name | Type | Description |
|---|---|---|
item | object | |
userSettings | object |
- Type:
- void
(static) populateInfoGroupPerson(item) → {void}
populateInfoGroupPerson: Info rows for Person Row 1: {birthDate} [- {deathDate}] · {n} years old Living: Jan 1, 1980 · 45 years old Deceased: Jan 1, 1920 - Dec 31, 1980 · 60 years old Row 2: {n} Movie(s) [· {n} Episode(s)] — omitted entirely if both counts are 0
| Name | Type | Description |
|---|---|---|
item | object |
- Type:
- void
(static) populateInfoGroupSeason(item, userSettings) → {void}
populateInfoGroupSeason: Info rows for Season Row 1: Year · Official Rating (series) · Avg episode runtime (series) · Ends At Row 2: Series name · Episode count · Studio
| Name | Type | Description |
|---|---|---|
item | object | |
userSettings | object |
- Type:
- void
(static) populateInfoGroupSeries(item, userSettings) → {void}
populateInfoGroupSeries: Info rows for Series Row 1: Year Range · Official Rating · Community Rating · Runtime · Ends At (only when avg episode runtime is available) Row 2: Genres · Air schedule/Status
| Name | Type | Description |
|---|---|---|
item | object | |
userSettings | object |
- Type:
- void
(static) removeResumeButtonWithFocus(resumeButton) → {void}
removeResumeButtonWithFocus: Remove resume button while preserving focus position
| Name | Type | Description |
|---|---|---|
resumeButton | object |
- Type:
- void
(static) round(f) → {integer}
| Name | Type | Description |
|---|---|---|
f | float |
- Type:
- integer
(static) setDateAdded(item) → {void}
setDateAdded: Set date added label text and position at bottom right corner
| Name | Type | Description |
|---|---|---|
item | object | JellyfinBaseItem node |
- Type:
- void
(static) setDescriptionInLayout(shouldShow) → {void}
setDescriptionInLayout: Add or remove itemDescription from the itemDetails LayoutGroup. Invisible nodes still take up space in RSG LayoutGroups, so reparenting is required to truly eliminate spacing when there is no description text.
| Name | Type | Description |
|---|---|---|
shouldShow | boolean |
- Type:
- void
(static) setFieldText(field, value) → {void}
| Name | Type | Description |
|---|---|---|
field | dynamic | |
value | dynamic |
- Type:
- void
(static) setItemLogo(item) → {void}
setItemLogo: Set the item logo image URL if available. Fallback chains by type:
- Movie/Series: Logo → primaryImageTag (poster, compact size)
- Episode/Season/Recording: primaryImageTag (item thumb/poster) → parentLogoImageTag (series logo) → seriesPrimaryImageTag → hide
- Video/MusicVideo: primaryImageTag (poster)
- Person: primaryImageTag (portrait photo, tall) → silhouette icon
| Name | Type | Description |
|---|---|---|
item | object | JellyfinBaseItem node |
- Type:
- void
(static) setTracksInLayout(shouldShow) → {void}
setTracksInLayout: Add or remove itemTracks from the itemDetails LayoutGroup. Invisible nodes still take up space in RSG LayoutGroups, so reparenting is required to truly eliminate spacing when tracks are not applicable (e.g. Series type).
| Name | Type | Description |
|---|---|---|
shouldShow | boolean |
- Type:
- void
(static) setupButtons(item) → {void}
setupButtons: Build the complete button set for the given item type. Clears all existing buttons (including the LoadingButton placeholder from init()) and adds the correct sync buttons in order. Async buttons (Series Resume, Trailer, Person Shuffle) are handled separately by their existing observers. Called on every itemContentChanged — the button list is rebuilt from scratch each time.
| Name | Type | Description |
|---|---|---|
item | object |
- Type:
- void
(static) trailerAvailableChanged() → {void}
- Source
- Type:
- void
(static) updateFavoriteButton() → {void}
- Type:
- void
(static) updateItemDetailsAnimationTarget() → {void}
updateItemDetailsAnimationTarget: Slide itemDetails so the bottom of itemInfoRows sits just above the extras pane. boundingRect() on a child returns LOCAL coords relative to the parent's translation point, so we use translation[1] (not boundingRect().y) as the screen origin.
- Type:
- void
(static) updateOptionsButtonVisibility() → {void}
updateOptionsButtonVisibility: Create/remove options button based on available tracks. Creates button if there are multiple video or audio tracks to choose from. Removes button if there is 1 or fewer video tracks AND 1 or fewer audio tracks.
- Type:
- void
(static) updateTextGradient() → {void}
- Type:
- void
(static) updateWatchedButton() → {void}
- Type:
- void
(static) videoOptionsClosed() → {void}
videoOptionsClosed: Sync video stream selection back from ItemOptions popup; reload audio/subtitle options for the newly selected source
- Type:
- void