jf-roku/components/tvshows/TVEpisodeRowWithOptions.brs
2023-05-20 17:33:42 -06:00

113 lines
3.8 KiB
Plaintext

import "pkg:/source/utils/config.brs"
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
sub SetUpVideoOptions(streams)
videos = []
for i = 0 to streams.Count() - 1
if 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
sub SetUpAudioOptions(streams)
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
'
'Check if options updated and any reloading required
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
'
' Check if options were updated
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 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