jf-roku/source/ShowScenes.brs

451 lines
12 KiB
Plaintext
Raw Normal View History

sub ShowServerSelect()
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("ConfigScene")
screen.show()
2019-03-10 05:28:28 +00:00
themeScene(scene)
scene.findNode("prompt").text = "Connect to Server"
config = scene.findNode("configOptions")
items = [
{"field": "server", "label": "Host", "type": "string"},
{"field": "port", "label": "Port", "type": "string"}
]
config.callfunc("setData", items)
button = scene.findNode("submit")
button.observeField("buttonSelected", port)
server_hostname = config.content.getChild(0)
server_port = config.content.getChild(1)
while(true)
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed()
return
else if type(msg) = "roSGNodeEvent"
node = msg.getNode()
if node = "submit"
set_setting("server", server_hostname.value)
set_setting("port", server_port.value)
return
end if
end if
end while
end sub
sub ShowSignInSelect()
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("ConfigScene")
screen.show()
2019-03-10 05:28:28 +00:00
themeScene(scene)
scene.findNode("prompt").text = "Sign In"
config = scene.findNode("configOptions")
items = [
{"field": "username", "label": "Username", "type": "string"},
{"field": "password", "label": "Password", "type": "password"}
]
config.callfunc("setData", items)
button = scene.findNode("submit")
button.observeField("buttonSelected", port)
config = scene.findNode("configOptions")
username = config.content.getChild(0)
password = config.content.getChild(1)
while(true)
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed()
return
else if type(msg) = "roSGNodeEvent"
node = msg.getNode()
if node = "submit"
' Validate credentials
get_token(username.value, password.value)
if get_setting("active_user") <> invalid then return
print "Login attempt failed..."
end if
end if
end while
end sub
sub ShowLibrarySelect()
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("Library")
screen.show()
2019-03-10 05:28:28 +00:00
themeScene(scene)
library = scene.findNode("LibrarySelect")
libs = LibraryList()
library.libList = libs
library.observeField("itemSelected", port)
2019-03-14 21:50:42 +00:00
search = scene.findNode("search")
search.observeField("escape", port)
2019-03-14 22:20:16 +00:00
search.observeField("search_value", port)
2019-03-14 21:50:42 +00:00
while(true)
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
return
2019-03-14 21:50:42 +00:00
else if nodeEventQ(msg, "escape") and msg.getNode() = "search"
library.setFocus(true)
2019-03-14 22:20:16 +00:00
else if nodeEventQ(msg, "search_value")
2019-03-14 22:50:20 +00:00
query = msg.getRoSGNode().search_value
2019-03-16 22:11:50 +00:00
if query <> invalid or query <> ""
ShowSearchOptions(query)
end if
search.search_value = ""
2019-03-10 05:28:28 +00:00
else if nodeEventQ(msg, "itemSelected")
target = getMsgRowTarget(msg)
if target.libraryType = "movies"
2019-03-12 23:34:51 +00:00
ShowMovieOptions(target.data)
2019-03-11 01:03:45 +00:00
else if target.libraryType = "tvshows"
2019-03-12 23:34:51 +00:00
ShowTVShowOptions(target.data)
else
scene.dialog = make_dialog("This library type is not yet implemented")
scene.dialog.observeField("buttonSelected", port)
end if
else if nodeEventQ(msg, "buttonSelected")
if msg.getNode() = "popup"
msg.getRoSGNode().close = true
end if
else
print msg
end if
end while
end sub
2019-03-12 23:34:51 +00:00
sub ShowMovieOptions(library)
library_id = library.id
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("Movies")
screen.show()
2019-03-12 23:34:51 +00:00
overhang = scene.findNode("overhang")
overhang.title = library.name
2019-03-10 05:28:28 +00:00
themeScene(scene)
options = scene.findNode("MovieSelect")
2019-03-12 23:34:51 +00:00
options.library = library
2019-03-12 03:49:17 +00:00
page_num = 1
page_size = 30
sort_order = get_user_setting("movie_sort_order", "Descending")
sort_field = get_user_setting("movie_sort_field", "DateCreated,SortName")
2019-03-12 03:49:17 +00:00
options_list = ItemList(library_id, {"limit": page_size,
"StartIndex": page_size * (page_num - 1),
"SortBy": sort_field,
"SortOrder": sort_order })
options.movieData = options_list
options.observeField("itemSelected", port)
2019-03-12 03:49:17 +00:00
pager = scene.findNode("pager")
pager.currentPage = page_num
pager.maxPages = options_list.TotalRecordCount / page_size
if pager.maxPages = 0 then pager.maxPages = 1
2019-03-12 03:49:17 +00:00
pager.observeField("escape", port)
pager.observeField("pageSelected", port)
2019-03-17 23:07:57 +00:00
sidepanel = scene.findNode("options")
movie_options = [
{"title": "Sort Field",
2019-03-18 00:17:54 +00:00
"base_title": "Sort Field",
2019-03-17 23:07:57 +00:00
"key": "movie_sort_field",
2019-03-18 00:17:54 +00:00
"default": "DateCreated",
"values": ["DateCreated", "PremiereDate", "SortName"]},
2019-03-17 23:07:57 +00:00
{"title": "Sort Order",
2019-03-18 00:17:54 +00:00
"base_title": "Sort Order",
2019-03-17 23:07:57 +00:00
"key": "movie_sort_order",
2019-03-18 00:17:54 +00:00
"default": "Descending",
"values": ["Descending", "Ascending"]}
2019-03-17 23:07:57 +00:00
]
new_options = []
for each opt in movie_options
2019-03-18 00:17:54 +00:00
o = CreateObject("roSGNode", "OptionsData")
2019-03-17 23:07:57 +00:00
o.title = opt.title
2019-03-18 00:17:54 +00:00
o.choices = opt.values
o.base_title = opt.base_title
o.config_key = opt.key
o.value = get_user_setting(opt.key, opt.default)
2019-03-17 23:07:57 +00:00
new_options.append([o])
end for
sidepanel.options = new_options
sidepanel.observeField("escape", port)
while true
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
return
2019-03-12 03:49:17 +00:00
else if nodeEventQ(msg, "escape") and msg.getNode() = "pager"
options.setFocus(true)
2019-03-17 23:07:57 +00:00
else if nodeEventQ(msg, "escape") and msg.getNode() = "options"
options.setFocus(true)
2019-03-12 03:49:17 +00:00
else if nodeEventQ(msg, "pageSelected") and pager.pageSelected <> invalid
pager.pageSelected = invalid
page_num = int(val(msg.getData().id))
pager.currentPage = page_num
options_list = ItemList(library_id, {"limit": page_size,
"StartIndex": page_size * (page_num - 1),
"SortBy": sort_order,
"SortOrder": sort_field })
2019-03-12 03:49:17 +00:00
options.movieData = options_list
options.setFocus(true)
2019-03-10 05:28:28 +00:00
else if nodeEventQ(msg, "itemSelected")
target = getMsgRowTarget(msg)
2019-03-08 03:47:10 +00:00
ShowMovieDetails(target.movieID)
2019-03-12 03:49:17 +00:00
else
print msg
print msg.getField()
print msg.getData()
2019-03-08 03:47:10 +00:00
end if
end while
end sub
sub ShowMovieDetails(movie_id)
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("MovieItemDetailScene")
screen.show()
2019-03-10 05:28:28 +00:00
themeScene(scene)
2019-03-12 01:24:39 +00:00
content = createObject("roSGNode", "MovieData")
content.full_data = ItemMetaData(movie_id)
scene.itemContent = content
2019-03-08 03:47:10 +00:00
buttons = scene.findNode("buttons")
for each b in buttons.getChildren(-1, 0)
b.observeField("buttonSelected", port)
end for
2019-03-08 03:47:10 +00:00
while true
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
return
2019-03-10 05:28:28 +00:00
else if nodeEventQ(msg, "buttonSelected")
if msg.getNode() = "play-button"
showVideoPlayer(movie_id)
else if msg.getNode() = "watched-button"
2019-03-14 03:01:05 +00:00
if content.watched
UnmarkItemWatched(movie_id)
else
MarkItemWatched(movie_id)
end if
content.watched = not content.watched
else if msg.getNode() = "favorite-button"
2019-03-13 03:27:24 +00:00
if content.favorite
UnmarkItemFavorite(movie_id)
else
MarkItemFavorite(movie_id)
end if
content.favorite = not content.favorite
end if
else
print msg
print type(msg)
end if
end while
end sub
2019-03-12 23:34:51 +00:00
sub ShowTVShowOptions(library)
library_id = library.ID
2019-03-11 01:03:45 +00:00
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("TVShows")
screen.show()
2019-03-12 23:34:51 +00:00
overhang = scene.findNode("overhang")
overhang.title = library.name
2019-03-11 01:03:45 +00:00
themeScene(scene)
options = scene.findNode("TVShowSelect")
options.library = library
page_num = 1
page_size = 30
sort_order = get_user_setting("tvshow_sort_order", "Descending")
sort_field = get_user_setting("tvshow_sort_field", "DateCreated,SortName")
options_list = ItemList(library_id, {"limit": page_size,
"page": page_num,
"SortBy": sort_field,
"SortOrder": sort_order })
options.TVShowData = options_list
2019-03-11 01:03:45 +00:00
options.observeField("itemSelected", port)
pager = scene.findNode("pager")
pager.currentPage = page_num
pager.maxPages = options_list.TotalRecordCount / page_size
if pager.maxPages = 0 then pager.maxPages = 1
pager.observeField("escape", port)
pager.observeField("pageSelected", port)
2019-03-11 01:03:45 +00:00
while true
msg = wait(0, port)
if nodeEventQ(msg, "escape") and msg.getNode() = "pager"
options.setFocus(true)
else if nodeEventQ(msg, "pageSelected") and pager.pageSelected <> invalid
pager.pageSelected = invalid
page_num = int(val(msg.getData().id))
pager.currentPage = page_num
options_list = ItemList(library_id, {"limit": page_size,
"StartIndex": page_size * (page_num - 1),
"SortBy": sort_field,
"SortOrder": sort_order })
options.TVShowData = options_list
options.setFocus(true)
else if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
2019-03-11 01:03:45 +00:00
return
else if nodeEventQ(msg, "itemSelected")
target = getMsgRowTarget(msg)
ShowTVShowDetails(target.showID)
2019-03-11 01:03:45 +00:00
end if
end while
end sub
sub ShowTVShowDetails(show_id)
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("TVShowItemDetailScene")
screen.show()
themeScene(scene)
2019-03-12 01:24:39 +00:00
content = createObject("roSGNode", "TVShowData")
content.full_data = ItemMetaData(show_id)
scene.itemContent = content
x = TVSeasons(show_id)
scene.itemContent.seasons = TVSeasons(show_id)
'buttons = scene.findNode("buttons")
'buttons.observeField("buttonSelected", port)
while true
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
return
else if nodeEventQ(msg, "buttonSelected")
' What button could we even be watching yet
else
print msg
print type(msg)
end if
end while
end sub
2019-03-14 22:50:20 +00:00
sub ShowSearchOptions(query)
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("SearchResults")
screen.show()
themeScene(scene)
options = scene.findNode("SearchSelect")
sort_order = get_user_setting("search_sort_order", "Descending")
sort_field = get_user_setting("search_sort_field", "DateCreated,SortName")
results = SearchMedia(query)
options.itemData = results
options.query = query
options.observeField("itemSelected", port)
while true
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
return
else if nodeEventQ(msg, "itemSelected")
target = getMsgRowTarget(msg)
' TODO - swap this based on target.mediatype
' types: [ Episode, Movie, Audio, Person, Studio, MusicArtist ]
ShowMovieDetails(target.mediaID)
else
print msg
print msg.getField()
print msg.getData()
end if
end while
end sub
sub showVideoPlayer(video_id)
port = CreateObject("roMessagePort")
screen = CreateObject("roSGScreen")
screen.setMessagePort(port)
scene = screen.CreateScene("Scene")
screen.show()
2019-03-10 05:28:28 +00:00
themeScene(scene)
video = VideoPlayer(video_id)
scene.appendChild(video)
video.setFocus(true)
video.observeField("state", port)
while true
msg = wait(0, port)
if type(msg) = "roSGScreenEvent" and msg.isScreenClosed() then
' Sometimes video is already gone by this point
' TODO - add an event listener higher up that watches for closing
' so we can handle end of video a bit better
2019-03-19 01:11:34 +00:00
if video = invalid then return
progress = int( video.position / video.duration * 100)
if progress > 95 ' TODO - max resume percentage
MarkItemWatched(video_id)
end if
2019-03-19 01:11:34 +00:00
ticks = video.position * 10000000
ItemSessionStop(video_id, {"PositionTicks": ticks})
return
else if nodeEventQ(msg, "state")
state = msg.getData()
if state = "stopped" or state = "finished"
screen.close()
2019-03-19 01:11:34 +00:00
else if state = "playing"
ticks = video.position * 10000000
ItemSessionStart(video_id, {"PositionTicks": ticks})
end if
end if
end while
end sub