Members

(static, constant) EXTRAS_GRP_TARGET_Y

Y translation extrasGrp reaches after sliding open (ExtrasSlider.xml VertSlider end keyValue)

Default Value
  • 306

(static, constant) ITEM_DETAILS_EXTRAS_PADDING

Gap between bottom of itemInfoRows and top of extras pane when extras are open

Default Value
  • 48

(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

(static, constant) LOGO_MAX_DISPLAY_WIDTH

Maximum display width for the logo image — prevents very wide/flat logos from overlapping buttons

Default Value
  • 500

(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

Methods

(static) OnScreenShown() → {void}

OnScreenShown: Callback when view is presented on screen

Returns:
Type: 
void

(static) SetDefaultAudioTrack(mediaStreams) → {void}

Parameters:
NameTypeDescription
mediaStreamsobject
Returns:
Type: 
void

(static) SetUpAudioOptions(streams) → {void}

Parameters:
NameTypeDescription
streamsdynamic
Returns:
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.

Parameters:
NameTypeDescription
streamsobject

Array of MediaStream objects (all types: video, audio, subtitle)

selectedAudioStreamIndexinteger

Server-side index of the selected audio stream

Returns:
Type: 
void

(static) SetUpVideoOptions(streams) → {void}

Parameters:
NameTypeDescription
streamsdynamic
Returns:
Type: 
void

(static) activateExtras() → {void}

Returns:
Type: 
void

(static) audioOptionsClosed() → {void}

audioOptionsClosed: Sync audio stream selection back from ItemOptions popup

Returns:
Type: 
void

(static) createDividerNode(dividerId) → {object}

createDividerNode: Create a bullet divider node for separating info items

Parameters:
NameTypeDescription
dividerIdstring

Unique ID for the divider

Returns:

Configured divider node

Type: 
object

(static) createInfoLabel(labelId) → {object}

createInfoLabel: Create a bold label node for the info rows

Parameters:
NameTypeDescription
labelIdstring

Unique ID for the label

Returns:

Configured LabelPrimaryMedium node

Type: 
object

(static) deactivateExtras() → {void}

Returns:
Type: 
void

(static) destroy() → {void}

destroy: Full teardown releasing all resources before component removal Called automatically by SceneManager.popScene() / clearScenes()

Returns:
Type: 
void

(static) displayDirectorGenreNode(node) → {void}

displayDirectorGenreNode: Add a node to the second info row, prepending a bullet divider if needed

Parameters:
NameTypeDescription
nodeobject
Returns:
Type: 
void

(static) displayInfoNode(node) → {void}

displayInfoNode: Add a node to the info group, prepending a bullet divider if needed

Parameters:
NameTypeDescription
nodeobject
Returns:
Type: 
void

(static) focusButtonGroupChild() → {void}

focusButtonGroupChild: Focus the button at the current buttonFocused index directly

Returns:
Type: 
void

(static) getButtonIndex(buttonId) → {integer}

getButtonIndex: Find the index of a button by ID in the button group

Parameters:
NameTypeDescription
buttonIdstring

The id of the button to find

Returns:

The index of the button, or -1 if not found

Type: 
integer

(static) getEndTime() → {string}

Returns:
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"

Returns:
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".

Parameters:
NameTypeDescription
itemobject

nextUpEpisode JellyfinBaseItem node

Returns:

Localised button label

Type: 
string

(static) getRuntime() → {integer}

Returns:
Type: 
integer

(static) init() → {void}

Returns:
Type: 
void

(static) itemContentChanged() → {void}

Returns:
Type: 
void

(static) manageResumeButton() → {void}

manageResumeButton: Add or remove Resume button based on playback position (non-Series types)

Returns:
Type: 
void

(static) nextUpEpisodeChanged() → {void}

nextUpEpisodeChanged: For Series — create/remove Resume button based on nextUpEpisode

Returns:
Type: 
void

(static) onClockMinuteChanged() → {void}

onClockMinuteChanged: Dynamically update "Ends At" time when overhang clock minute changes

Returns:
Type: 
void

(static) onFirstEpisodeLoaded() → {void}

onFirstEpisodeLoaded: Start playback of first episode for Series Play button

Returns:
Type: 
void

(static) onItemDetailsRendered() → {void}

Returns:
Type: 
void

(static) onKeyEvent(key, press) → {boolean}

Parameters:
NameTypeDescription
keystring
pressboolean
Returns:
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.

Returns:
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).

Returns:
Type: 
void

(static) onRefreshExtrasData() → {void}

onRefreshExtrasData: Reload all extras rows when the user explicitly presses Refresh.

Returns:
Type: 
void

(static) onSeasonSeriesDataLoaded() → {void}

onSeasonSeriesDataLoaded: Update Season info rows and logo with parent series metadata

Returns:
Type: 
void

(static) onSeriesResumeLoaded() → {void}

onSeriesResumeLoaded: Set nextUpEpisode from seriesResume task result to show/hide the Resume button

Returns:
Type: 
void

(static) populateDescriptionGroup() → {void}

populateDescriptionGroup: Set FocusableOverview text with tagline and overview

Returns:
Type: 
void

(static) populateInfoGroup() → {void}

populateInfoGroup: Dispatch to type-specific info row builder

Returns:
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

Parameters:
NameTypeDescription
itemobject
userSettingsobject
Returns:
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}"

Parameters:
NameTypeDescription
itemobject
userSettingsobject
Returns:
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)

Parameters:
NameTypeDescription
itemobject
userSettingsobject
Returns:
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)

Parameters:
NameTypeDescription
itemobject
userSettingsobject
Returns:
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

Parameters:
NameTypeDescription
itemobject
Returns:
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

Parameters:
NameTypeDescription
itemobject
userSettingsobject
Returns:
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

Parameters:
NameTypeDescription
itemobject
userSettingsobject
Returns:
Type: 
void

(static) removeResumeButtonWithFocus(resumeButton) → {void}

removeResumeButtonWithFocus: Remove resume button while preserving focus position

Parameters:
NameTypeDescription
resumeButtonobject
Returns:
Type: 
void

(static) round(f) → {integer}

Parameters:
NameTypeDescription
ffloat
Returns:
Type: 
integer

(static) setDateAdded(item) → {void}

setDateAdded: Set date added label text and position at bottom right corner

Parameters:
NameTypeDescription
itemobject

JellyfinBaseItem node

Returns:
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.

Parameters:
NameTypeDescription
shouldShowboolean
Returns:
Type: 
void

(static) setFieldText(field, value) → {void}

Parameters:
NameTypeDescription
fielddynamic
valuedynamic
Returns:
Type: 
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
Parameters:
NameTypeDescription
itemobject

JellyfinBaseItem node

Returns:
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).

Parameters:
NameTypeDescription
shouldShowboolean
Returns:
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.

Parameters:
NameTypeDescription
itemobject
Returns:
Type: 
void

(static) trailerAvailableChanged() → {void}

Returns:
Type: 
void

(static) updateFavoriteButton() → {void}

Returns:
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.

Returns:
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.

Returns:
Type: 
void

(static) updateTextGradient() → {void}

Returns:
Type: 
void

(static) updateWatchedButton() → {void}

Returns:
Type: 
void

(static) videoOptionsClosed() → {void}

videoOptionsClosed: Sync video stream selection back from ItemOptions popup; reload audio/subtitle options for the newly selected source

Returns:
Type: 
void