Compile-time contract for a queue item AA (the return shape of createQueueItem below). BrighterScript interfaces ARE build-enforced wherever a value is TYPED as the interface (verified on this toolchain: a QueueItem-typed value raises cannot-find-name on an undeclared member and return-type-mismatch on a missing required member). createQueueItem itself returns as object, not as QueueItem: its result is used as a real roAssociativeArray (callers/tests call DoesExist/Count) and an interface return type strips those AA methods (see the return-type note on the function below). So the ENFORCED gate on the returned shape is the createQueueItem spec at tests/source/unit/utils/nodeHelpers.spec.bs; this interface is the single explicit source of truth for the shape, IDE autocomplete, and a build-checked contract for any local you DO type as nodeHelpers.QueueItem. Most members are optional: createQueueItem only copies them when the source carries them, so a bare/lean source yields a minimal item.
| Name | Type | Description |
|---|---|---|
backdropImageTags | object | Always present: callers may .Count() the backdrop arrays without an isValid() guard. |
parentBackdropImageTags | object | |
parentBackdropItemId | string | |
id | string | Identity + playback |
type | string | |
title | string | |
mediaSourceId | string | |
runTimeTicks | longinteger | |
name | string | Now-playing display contract: audio plays IN PLACE, so AudioPlayerView reads these straight ' off the queue item (video re-fetches on mount and doesn't need them). |
artists | object | |
albumArtist | string | |
albumName | string | |
albumId | string | |
albumPrimaryImageTag | string | |
primaryImageTag | string | |
seriesId | string | Episode navigation (resume dialog) |
seasonId | string | |
playbackPositionTicks | longinteger | |
channelNumber | string | Live TV |
startingPoint | longinteger | Set by callers after creation (quickplay / ItemDetails): playback selection + resume point. ' Write the pair through setResumeStart() / setExactStart(), never startingPoint alone. |
startingPointIsExact | boolean | True when startingPoint is a place the caller NAMED (a chapter, Play from the start, the ' position a reload saved) rather than a saved resume position. Only a resume position may be ' replaced by the one the loader reads for the version it chooses on a per-version server. |
selectedAudioStreamIndex | integer | |
selectedSubtitleStreamIndex | integer | |
hasVersionInProgress | boolean | True when SOME version of this item holds a playback position, which startingPoint alone ' cannot say: on a per-version server the item's own version can sit at 0 while an alternate ' is partway through. Read from the server's source ORDER, so it costs no request. It exists ' because "are we resuming?" is asked before the version is chosen. LoadVideoContentTask ' gates the Cinema Mode preroll on it, since a preroll in front of a resume is wrong. |
startsFresh | boolean | True for an item that starts from the beginning because the viewer did not choose to ' resume it: one the queue ARRIVES at (QueueManager.advanceTo), or the first item of a queue ' that does not resume, like Play All or shuffle (QueueManager.startCurrentFresh). Written ' only through startFresh(). The loader plays the viewer's explicit version pick when the ' item has it, else the best for the device, never the version holding a position. |
followsIntro | boolean | True on the copy of an item the Cinema Mode intro queues behind itself: moving on from ' the intro reaches the item the viewer launched, not a new one, so it keeps its start. ' QueueManager.advanceTo consumes it. |