jf-roku/components/tvshows/TVEpisodeRowWithOptions.brs
Jimi 2caff5d709
Update components/tvshows/TVEpisodeRowWithOptions.brs
Co-authored-by: 1hitsong <3330318+1hitsong@users.noreply.github.com>
2023-05-26 16:52:15 -06:00

121 lines
4.1 KiB
Plaintext

sub init()
m.rows = m.top.findNode("tvEpisodeRow")
m.tvListOptions = m.top.findNode("tvListOptions")
m.rows.observeField("doneLoading", "rowsDoneLoading")
end sub
sub setupRows()
objects = m.top.objects
m.rows.objects = objects
end sub
sub rowsDoneLoading()
m.top.doneLoading = true
end sub
' List of video versions to choose from
sub SetUpVideoOptions(streams as object)
videos = []
for i = 0 to streams.Count() - 1
if LCase(streams[i].VideoType) = "videofile"
' Create options for user to switch between video tracks
videos.push({
"Title": streams[i].Name,
"Description": tr("Video"),
"Selected": m.top.objects.items[m.currentSelected].selectedVideoStreamId = streams[i].id,
"StreamID": streams[i].id,
"video_codec": streams[i].mediaStreams[0].displayTitle
})
end if
end for
if videos.count() >= 1
options = {}
options.videos = videos
m.tvListOptions.options = options
end if
end sub
' List of audio tracks to choose from
sub SetUpAudioOptions(streams as object)
tracks = []
for i = 0 to streams.Count() - 1
if streams[i].Type = "Audio"
tracks.push({
"Title": streams[i].displayTitle,
"Description": streams[i].Title,
"Selected": m.top.objects.items[m.currentSelected].selectedAudioStreamIndex = i,
"StreamIndex": i })
end if
end for
if tracks.count() >= 1
options = {}
if m.tvListOptions.options <> invalid and m.tvListOptions.options.videos <> invalid
options.videos = m.tvListOptions.options.videos
end if
options.audios = tracks
m.tvListOptions.options = options
end if
end sub
sub audioOptionsClosed()
if m.currentSelected <> invalid
' If the user opened the audio options, we report back even if they left the selection alone.
' Otherwise, the users' lang peference from the server will take over.
' To do this, we interpret anything other than "0" as the user opened the audio options.
m.top.objects.items[m.currentSelected].selectedAudioStreamIndex = m.tvListOptions.audioStreamIndex = 0 ? 1 : m.tvListOptions.audioStreamIndex
end if
end sub
sub videoOptionsClosed()
if m.tvListOptions.videoStreamId <> m.top.objects.items[m.currentSelected].selectedVideoStreamId
m.rows.objects.items[m.currentSelected].selectedVideoStreamId = m.tvListOptions.videoStreamId
end if
end sub
function onKeyEvent(key as string, press as boolean) as boolean
if not press then return false
if key = "options" and m.rows.focusedChild <> invalid and m.rows.focusedChild.rowItemFocused <> invalid
m.currentSelected = m.rows.focusedChild.rowItemFocused[0]
mediaStreams = m.rows.objects.items[m.currentSelected].json.MediaStreams
mediaSources = m.rows.objects.items[m.currentSelected].json.MediaSources
if m.rows.objects.items[m.currentSelected].selectedVideoStreamId <> ""
for each source in mediaSources
if source.id = m.rows.objects.items[m.currentSelected].selectedVideoStreamId
mediaStreams = source.MediaStreams
exit for
end if
end for
end if
if mediaSources <> invalid
SetUpVideoOptions(mediaSources)
end if
if mediaStreams <> invalid
SetUpAudioOptions(mediaStreams)
end if
if m.tvListOptions.options <> invalid
m.tvListOptions.visible = true
m.tvListOptions.setFocus(true)
end if
return true
else if m.tvListOptions.visible = true and key = "back" or key = "options"
m.tvListOptions.setFocus(false)
m.tvListOptions.visible = false
m.rows.setFocus(true)
videoOptionsClosed()
audioOptionsClosed()
return true
else if key = "up" and m.rows.hasFocus() = false
m.rows.setFocus(true)
else if key = "down" and m.rows.hasFocus() = false
m.rows.setFocus(true)
end if
return false
end function