From 6f1da863815a84063dc92535f61f74844c6cc7fc Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Fri, 15 Sep 2023 15:57:39 -0400 Subject: [PATCH 01/47] Fix quickplay on home screen - always resume if possible --- source/Main.brs | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/source/Main.brs b/source/Main.brs index 298650bd2..7b7d64be7 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -129,24 +129,17 @@ sub Main (args as dynamic) as void if isValid(itemNode.selectedAudioStreamIndex) and itemNode.selectedAudioStreamIndex > 0 audio_stream_idx = itemNode.selectedAudioStreamIndex end if - itemNode.selectedAudioStreamIndex = audio_stream_idx playbackPosition = 0 - - ' Display playback options dialog if isValid(itemNode.json) and isValid(itemNode.json.userdata) and isValid(itemNode.json.userdata.PlaybackPositionTicks) playbackPosition = itemNode.json.userdata.PlaybackPositionTicks end if + itemNode.startingPoint = playbackPosition - if playbackPosition > 0 - m.global.queueManager.callFunc("hold", itemNode) - playbackOptionDialog(playbackPosition, itemNode.json) - else - m.global.queueManager.callFunc("clear") - m.global.queueManager.callFunc("push", itemNode) - m.global.queueManager.callFunc("playQueue") - end if + m.global.queueManager.callFunc("clear") + m.global.queueManager.callFunc("push", itemNode) + m.global.queueManager.callFunc("playQueue") ' Prevent quick play node from double firing reportingNode.quickPlayNode = invalid From d92dc42d8cef094fd8cf5a2b7bc915b65beffdc2 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Fri, 15 Sep 2023 16:16:26 -0400 Subject: [PATCH 02/47] enable quick play in MovieLibraryView and when viewing a collection of movies --- source/ShowScenes.brs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/ShowScenes.brs b/source/ShowScenes.brs index a07715a4e..79c08ae0d 100644 --- a/source/ShowScenes.brs +++ b/source/ShowScenes.brs @@ -782,6 +782,7 @@ function CreateItemGrid(libraryItem as object) as dynamic group.parentItem = libraryItem group.optionsAvailable = true group.observeField("selectedItem", m.port) + group.observeField("quickPlayNode", m.port) return group end function @@ -793,6 +794,7 @@ function CreateMovieLibraryView(libraryItem as object) as dynamic group.parentItem = libraryItem group.optionsAvailable = true group.observeField("selectedItem", m.port) + group.observeField("quickPlayNode", m.port) return group end function From 1acec715b112ae0477a2369c545600b3862cb5c8 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 16 Sep 2023 17:18:03 -0400 Subject: [PATCH 03/47] enable Quick Play for boxsets, series, seasons, albums, and music artists --- components/ItemGrid/ItemGrid.brs | 4 +- components/ItemGrid/MovieLibraryView.brs | 5 +- components/ItemGrid/MusicLibraryView.brs | 9 +- components/extras/ExtrasRowList.brs | 5 + components/extras/ExtrasRowList.xml | 1 + components/home/HomeRows.brs | 13 +- components/home/HomeRows.xml | 2 +- components/home/LoadItemsTask.brs | 3 +- components/manager/QueueManager.brs | 5 + components/movies/MovieDetails.brs | 6 + components/movies/MovieDetails.xml | 1 + components/music/ArtistView.brs | 8 + components/music/ArtistView.xml | 1 + components/tvshows/TVShowDetails.brs | 15 ++ components/tvshows/TVShowDetails.xml | 1 + source/Main.brs | 201 ++++++++++++++++++++++- source/ShowScenes.brs | 4 + source/api/Items.brs | 13 +- 18 files changed, 271 insertions(+), 26 deletions(-) diff --git a/components/ItemGrid/ItemGrid.brs b/components/ItemGrid/ItemGrid.brs index 0cd567b54..92c109156 100644 --- a/components/ItemGrid/ItemGrid.brs +++ b/components/ItemGrid/ItemGrid.brs @@ -780,11 +780,11 @@ function onKeyEvent(key as string, press as boolean) as boolean m.loadItemsTask.control = "stop" return true end if - else if key = "play" or key = "OK" + else if key = "play" markupGrid = m.top.findNode("itemGrid") itemToPlay = markupGrid.content.getChild(markupGrid.itemFocused) - if itemToPlay <> invalid and (itemToPlay.type = "Movie" or itemToPlay.type = "Episode") + if itemToPlay <> invalid m.top.quickPlayNode = itemToPlay return true else if itemToPlay <> invalid and itemToPlay.type = "Photo" diff --git a/components/ItemGrid/MovieLibraryView.brs b/components/ItemGrid/MovieLibraryView.brs index 97c17439c..1dc46dbf7 100644 --- a/components/ItemGrid/MovieLibraryView.brs +++ b/components/ItemGrid/MovieLibraryView.brs @@ -869,11 +869,10 @@ function onKeyEvent(key as string, press as boolean) as boolean m.loadItemsTask.control = "stop" return true end if - else if key = "play" or key = "OK" - + else if key = "play" itemToPlay = getItemFocused() - if itemToPlay <> invalid and (itemToPlay.type = "Movie" or itemToPlay.type = "Episode") + if itemToPlay <> invalid m.top.quickPlayNode = itemToPlay return true end if diff --git a/components/ItemGrid/MusicLibraryView.brs b/components/ItemGrid/MusicLibraryView.brs index 6b06fb233..9056025fb 100644 --- a/components/ItemGrid/MusicLibraryView.brs +++ b/components/ItemGrid/MusicLibraryView.brs @@ -750,7 +750,6 @@ function onKeyEvent(key as string, press as boolean) as boolean alpha.setFocus(true) return true end if - else if key = "right" and m.Alpha.isinFocusChain() m.top.alphaActive = false m.Alpha.setFocus(false) @@ -760,14 +759,12 @@ function onKeyEvent(key as string, press as boolean) as boolean m.genreList.setFocus(m.genreList.opacity = 1) return true - else if key = "replay" and m.itemGrid.isinFocusChain() if m.resetGrid = true m.itemGrid.animateToItem = 0 else m.itemGrid.jumpToItem = 0 end if - else if key = "replay" and m.genreList.isinFocusChain() if m.resetGrid = true m.genreList.animateToItem = 0 @@ -775,6 +772,12 @@ function onKeyEvent(key as string, press as boolean) as boolean m.genreList.jumpToItem = 0 end if return true + else if key = "play" + itemToPlay = getItemFocused() + if itemToPlay <> invalid + m.top.quickPlayNode = itemToPlay + return true + end if end if if key = "replay" diff --git a/components/extras/ExtrasRowList.brs b/components/extras/ExtrasRowList.brs index 230622cdd..c008795aa 100644 --- a/components/extras/ExtrasRowList.brs +++ b/components/extras/ExtrasRowList.brs @@ -3,6 +3,7 @@ sub init() updateSize() m.top.rowFocusAnimationStyle = "fixedFocus" m.top.observeField("rowItemSelected", "onRowItemSelected") + m.top.observeField("rowItemFocused", "onRowItemFocused") ' Set up all Tasks m.LoadPeopleTask = CreateObject("roSGNode", "LoadItemsTask") @@ -207,3 +208,7 @@ end sub sub onRowItemSelected() m.top.selectedItem = m.top.content.getChild(m.top.rowItemSelected[0]).getChild(m.top.rowItemSelected[1]) end sub + +sub onRowItemFocused() + m.top.focusedItem = m.top.content.getChild(m.top.rowItemFocused[0]).getChild(m.top.rowItemFocused[1]) +end sub diff --git a/components/extras/ExtrasRowList.xml b/components/extras/ExtrasRowList.xml index 8245dd2d8..55f96a421 100644 --- a/components/extras/ExtrasRowList.xml +++ b/components/extras/ExtrasRowList.xml @@ -4,6 +4,7 @@ + diff --git a/components/home/HomeRows.brs b/components/home/HomeRows.brs index 4fce8fff5..8689b59cc 100644 --- a/components/home/HomeRows.brs +++ b/components/home/HomeRows.brs @@ -440,21 +440,20 @@ sub itemSelected() end sub function onKeyEvent(key as string, press as boolean) as boolean - handled = false if press if key = "play" + print "play was pressed from homerow" itemToPlay = m.top.content.getChild(m.top.rowItemFocused[0]).getChild(m.top.rowItemFocused[1]) - if isValid(itemToPlay) and (itemToPlay.type = "Movie" or itemToPlay.type = "Episode") + if isValid(itemToPlay) m.top.quickPlayNode = itemToPlay end if - handled = true - end if - - if key = "replay" + return true + else if key = "replay" m.top.jumpToRowItem = [m.top.rowItemFocused[0], 0] + return true end if end if - return handled + return false end function function filterNodeArray(nodeArray as object, nodeKey as string, excludeArray as object) as object diff --git a/components/home/HomeRows.xml b/components/home/HomeRows.xml index 5c0dcfc03..77d91aeb6 100644 --- a/components/home/HomeRows.xml +++ b/components/home/HomeRows.xml @@ -2,7 +2,7 @@ - + diff --git a/components/home/LoadItemsTask.brs b/components/home/LoadItemsTask.brs index 79bb2d387..1ea788439 100644 --- a/components/home/LoadItemsTask.brs +++ b/components/home/LoadItemsTask.brs @@ -137,7 +137,8 @@ sub loadItems() if isValid(data) and isValid(data.Items) for each item in data.Items ' Skip Books for now as we don't support it (issue #558) - if item.Type <> "Book" + ' also skip songs since there is limited space + if not (item.Type = "Book" or item.Type = "Audio") tmp = CreateObject("roSGNode", "HomeData") params = {} diff --git a/components/manager/QueueManager.brs b/components/manager/QueueManager.brs index ca9f30fa2..1459d333c 100644 --- a/components/manager/QueueManager.brs +++ b/components/manager/QueueManager.brs @@ -127,6 +127,11 @@ sub playQueue() return end if + if nextItemMediaType = "movie" + CreateVideoPlayerView() + return + end if + if nextItemMediaType = "episode" CreateVideoPlayerView() return diff --git a/components/movies/MovieDetails.brs b/components/movies/MovieDetails.brs index 4f72b4783..e5ec27f36 100644 --- a/components/movies/MovieDetails.brs +++ b/components/movies/MovieDetails.brs @@ -383,6 +383,12 @@ function onKeyEvent(key as string, press as boolean) as boolean audioOptionsClosed() return true end if + else if key = "play" and m.extrasGrid.hasFocus() + print "Play was pressed from the movie details extras slider" + if m.extrasGrid.focusedItem <> invalid + m.top.quickPlayNode = m.extrasGrid.focusedItem + return true + end if end if return false end function diff --git a/components/movies/MovieDetails.xml b/components/movies/MovieDetails.xml index cb850da0f..01222f140 100644 --- a/components/movies/MovieDetails.xml +++ b/components/movies/MovieDetails.xml @@ -50,5 +50,6 @@ + \ No newline at end of file diff --git a/components/music/ArtistView.brs b/components/music/ArtistView.brs index 38336ecf2..67eec3acc 100644 --- a/components/music/ArtistView.brs +++ b/components/music/ArtistView.brs @@ -313,5 +313,13 @@ function onKeyEvent(key as string, press as boolean) as boolean end if end if + if key = "play" + itemToPlay = m.albums.MusicArtistAlbumData.items[m.albums.itemFocused] + if isValid(itemToPlay) + m.top.quickPlayNode = itemToPlay + end if + return true + end if + return false end function diff --git a/components/music/ArtistView.xml b/components/music/ArtistView.xml index c8b9be042..64f3d8ebc 100644 --- a/components/music/ArtistView.xml +++ b/components/music/ArtistView.xml @@ -54,5 +54,6 @@ + \ No newline at end of file diff --git a/components/tvshows/TVShowDetails.brs b/components/tvshows/TVShowDetails.brs index e5e1ead44..a8006df43 100644 --- a/components/tvshows/TVShowDetails.brs +++ b/components/tvshows/TVShowDetails.brs @@ -11,6 +11,7 @@ sub init() m.getShuffleEpisodesTask = createObject("roSGNode", "getShuffleEpisodesTask") m.Shuffle = m.top.findNode("Shuffle") m.extrasSlider.visible = true + m.seasons = m.top.findNode("seasons") end sub sub itemContentChanged() @@ -223,6 +224,20 @@ function onKeyEvent(key as string, press as boolean) as boolean else if key = "up" and m.Shuffle.hasFocus() overview.setFocus(true) return true + else if key = "play" and m.seasons.hasFocus() + print "play was pressed from the seasons row" + if isValid(m.seasons.TVSeasonData) and isValid(m.seasons.TVSeasonData.Items) + itemFocused = m.seasons.rowItemFocused + m.top.quickPlayNode = m.seasons.TVSeasonData.Items[itemFocused[1]] + return true + end if + else if key = "play" and m.extrasSlider.isInFocusChain() + print "play was pressed from the extras grid" + extrasGrid = m.top.findNode("extrasGrid") + if extrasGrid.focusedItem <> invalid + m.top.quickPlayNode = extrasGrid.focusedItem + return true + end if end if return false diff --git a/components/tvshows/TVShowDetails.xml b/components/tvshows/TVShowDetails.xml index 4c42dfd52..197ee81cf 100644 --- a/components/tvshows/TVShowDetails.xml +++ b/components/tvshows/TVShowDetails.xml @@ -32,5 +32,6 @@ + \ No newline at end of file diff --git a/source/Main.brs b/source/Main.brs index 7b7d64be7..4035858b1 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -118,9 +118,30 @@ sub Main (args as dynamic) as void else if isNodeEvent(msg, "quickPlayNode") group = sceneManager.callFunc("getActiveScene") reportingNode = msg.getRoSGNode() - itemNode = reportingNode.quickPlayNode + itemNode = invalid + if isValid(reportingNode) + itemNode = reportingNode.quickPlayNode + reportingNodeType = reportingNode.subtype() + ' prevent double fire on continue watching home row + if isValid(reportingNodeType) and reportingNodeType = "Home" + reportingNode.quickPlayNode = invalid + end if + end if if isValid(itemNode) and isValid(itemNode.id) and itemNode.id <> "" - if itemNode.type = "Episode" or itemNode.type = "Movie" or itemNode.type = "Video" + print "quickPlayNode=", itemNode + itemType = invalid + if isValid(itemNode.type) + itemType = Lcase(itemNode.type) + end if + ' grab type from json if needed + if not isValid(itemType) or itemType = "" + if isValid(itemNode.json) and isValid(itemNode.json.type) + itemType = Lcase(itemNode.json.type) + end if + end if + print "quickPlayNode type=", itemType + if itemType = "episode" or itemType = "movie" or itemType = "video" + ' attempt to play video file. resume if possible if isValid(itemNode.selectedVideoStreamId) itemNode.id = itemNode.selectedVideoStreamId end if @@ -141,14 +162,184 @@ sub Main (args as dynamic) as void m.global.queueManager.callFunc("push", itemNode) m.global.queueManager.callFunc("playQueue") - ' Prevent quick play node from double firing - reportingNode.quickPlayNode = invalid - if LCase(group.subtype()) = "tvepisodes" if isValid(group.lastFocus) group.lastFocus.setFocus(true) end if end if + else if itemType = "audio" + ' attempt to play audio file + m.global.queueManager.callFunc("clear") + m.global.queueManager.callFunc("push", itemNode) + m.global.queueManager.callFunc("playQueue") + else if itemType = "musicalbum" + ' attempt to play the entire album starting with track 1 + m.global.queueManager.callFunc("clear") + ' convert album to list of songs + albumSongs = MusicSongList(itemNode.id) + ' add each song to the queue + for each song in albumSongs.items + song.type = "Audio" + m.global.queueManager.callFunc("push", song) + end for + ' play queue + m.global.queueManager.callFunc("playQueue") + else if itemType = "musicartist" + ' attempt to shuffle play all songs by artist + m.global.queueManager.callFunc("clear") + + data = GetSongsByArtist(itemNode.id, { "sortBy": "Random" }) + + if isValid(data) + for each item in data.items + m.global.queueManager.callFunc("push", item) + end for + + m.global.queueManager.callFunc("playQueue") + end if + else if itemType = "boxset" + ' attempt to play all movies in the boxset + ' play them in order of release + m.global.queueManager.callFunc("clear") + + data = api.items.GetByQuery({ + "userid": m.global.session.user.id, + "parentid": itemNode.id, + "EnableTotalRecordCount": false + }) + if isValid(data) and isValid(data.Items) and data.Items.count() > 0 + ' there are videos inside + print "found videos inside boxset" + for each item in data.Items + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + end if + else if itemType = "series" + ' attempt to play first unwatched episode + m.global.queueManager.callFunc("clear") + + data = api.shows.GetNextUp({ + "seriesId": itemNode.id, + "recursive": true, + "SortBy": "DatePlayed", + "SortOrder": "Descending", + "ImageTypeLimit": 1, + "UserId": m.global.session.user.id, + "EnableRewatching": false, + "DisableFirstEpisode": false, + "EnableTotalRecordCount": false + }) + if isValid(data) and isValid(data.Items) and data.Items.count() > 0 + ' there are unwatched episodes + for each item in data.Items + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + else + ' next up check was empty + ' check for a resumable episode + data = api.users.GetResumeItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "userid": m.global.session.user.id, + "SortBy": "DatePlayed", + "recursive": true, + "SortOrder": "Descending", + "Filters": "IsResumable", + "EnableTotalRecordCount": false + }) + print "resumeitems data=", data + if isValid(data) and isValid(data.Items) and data.Items.count() > 0 + ' play the resumable episode + for each item in data.Items + if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) + item.startingPoint = item.userdata.PlaybackPositionTicks + end if + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + else + ' shuffle all episodes + data = api.shows.GetEpisodes(itemNode.id, { + "userid": m.global.session.user.id, + "SortBy": "Random", + "EnableTotalRecordCount": false + }) + + if isValid(data) and isValid(data.Items) and data.Items.count() > 0 + ' add all episodes found to a playlist + for each item in data.Items + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + end if + end if + end if + else if itemType = "collectionfolder" + ' play depends on the kind of files inside the collectionfolder + else if itemType = "season" + ' play first unwatched episode + m.global.queueManager.callFunc("clear") + + unwatchedData = api.shows.GetEpisodes(itemNode.json.SeriesId, { + "seasonId": itemNode.id, + "userid": m.global.session.user.id, + "EnableTotalRecordCount": false + }) + + if isValid(unwatchedData) and isValid(unwatchedData.Items) + ' find the first unwatched episode + firstUnwatchedEpisodeIndex = invalid + for each item in unwatchedData.Items + if isValid(item.UserData) + if isValid(item.UserData.Played) and item.UserData.Played = false + firstUnwatchedEpisodeIndex = item.IndexNumber - 1 + if isValid(item.UserData.PlaybackPositionTicks) + item.startingPoint = item.UserData.PlaybackPositionTicks + end if + exit for + end if + end if + end for + if isValid(firstUnwatchedEpisodeIndex) + for i = firstUnwatchedEpisodeIndex to unwatchedData.Items.count() - 1 + m.global.queueManager.callFunc("push", unwatchedData.Items[i]) + end for + + m.global.queueManager.callFunc("playQueue") + else + ' try to find a "continue watching" episode + continueData = api.users.GetResumeItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "userid": m.global.session.user.id, + "SortBy": "DatePlayed", + "recursive": true, + "SortOrder": "Descending", + "Filters": "IsResumable", + "EnableTotalRecordCount": false + }) + print "resumeitems continueData=", continueData + if isValid(continueData) and isValid(continueData.Items) and continueData.Items.count() > 0 + ' play the resumable episode + for each item in continueData.Items + if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) + item.startingPoint = item.userdata.PlaybackPositionTicks + end if + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + else + ' play the whole season in order + if isValid(unwatchedData) and isValid(unwatchedData.Items) and unwatchedData.Items.count() > 0 + ' add all episodes found to a playlist + for each item in unwatchedData.Items + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + end if + end if + end if + end if end if end if else if isNodeEvent(msg, "selectedItem") diff --git a/source/ShowScenes.brs b/source/ShowScenes.brs index 79c08ae0d..c265d6b3d 100644 --- a/source/ShowScenes.brs +++ b/source/ShowScenes.brs @@ -565,6 +565,7 @@ function CreateMovieDetailsGroup(movie as object) as dynamic end if ' start building MovieDetails view group = CreateObject("roSGNode", "MovieDetails") + group.observeField("quickPlayNode", m.port) group.overhangTitle = movie.title group.optionsAvailable = false group.trailerAvailable = false @@ -618,6 +619,7 @@ function CreateSeriesDetailsGroup(seriesID as string) as dynamic group.seasonData = seasonData ' watch for button presses group.observeField("seasonSelected", m.port) + group.observeField("quickPlayNode", m.port) ' setup and load series extras extras = group.findNode("extrasGrid") extras.observeField("selectedItem", m.port) @@ -670,6 +672,7 @@ function CreateArtistView(artist as object) as dynamic group.observeField("appearsOnSelected", m.port) end if + group.observeField("quickPlayNode", m.port) m.global.sceneManager.callFunc("pushScene", group) return group @@ -806,6 +809,7 @@ function CreateMusicLibraryView(libraryItem as object) as dynamic group.parentItem = libraryItem group.optionsAvailable = true group.observeField("selectedItem", m.port) + group.observeField("quickPlayNode", m.port) return group end function diff --git a/source/api/Items.brs b/source/api/Items.brs index a3d376471..740a9325f 100644 --- a/source/api/Items.brs +++ b/source/api/Items.brs @@ -223,15 +223,20 @@ function AppearsOnList(id as string) end function ' Get list of songs belonging to an artist -function GetSongsByArtist(id as string) +function GetSongsByArtist(id as string, params = {} as object) url = Substitute("Users/{0}/Items", m.global.session.user.id) - resp = APIRequest(url, { + paramArray = { "AlbumArtistIds": id, "includeitemtypes": "Audio", "sortBy": "SortName", "Recursive": true - }) + } + ' overwrite defaults with the params provided + for each param in params + paramArray.AddReplace(param, params[param]) + end for + resp = APIRequest(url, paramArray) data = getJson(resp) results = [] @@ -408,7 +413,7 @@ function TVSeasons(id as string) as dynamic results = [] for each item in data.Items imgParams = { "AddPlayedIndicator": item.UserData.Played } - tmp = CreateObject("roSGNode", "TVEpisodeData") + tmp = CreateObject("roSGNode", "TVSeasonData") tmp.image = PosterImage(item.id, imgParams) tmp.json = item results.push(tmp) From e7955b9dcacc1a25b071086b7182d059b87d5400 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 16 Sep 2023 21:18:12 -0400 Subject: [PATCH 04/47] add loading spinner --- source/Main.brs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/Main.brs b/source/Main.brs index 4035858b1..80fc97d58 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -116,6 +116,7 @@ sub Main (args as dynamic) as void group.setFocus(true) end if else if isNodeEvent(msg, "quickPlayNode") + startMediaLoadingSpinner() group = sceneManager.callFunc("getActiveScene") reportingNode = msg.getRoSGNode() itemNode = invalid @@ -342,6 +343,7 @@ sub Main (args as dynamic) as void end if end if end if + stopLoadingSpinner() else if isNodeEvent(msg, "selectedItem") ' If you select a library from ANYWHERE, follow this flow selectedItem = msg.getData() From 71fe2b00d7f88c30c7bea8e20eb768e8d57a1679 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sun, 17 Sep 2023 17:50:24 -0400 Subject: [PATCH 05/47] add playlist support --- source/Main.brs | 19 ++++++++++++++++++- source/utils/misc.brs | 10 ++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/source/Main.brs b/source/Main.brs index 80fc97d58..cf1a7514c 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -303,6 +303,7 @@ sub Main (args as dynamic) as void end if end for if isValid(firstUnwatchedEpisodeIndex) + ' add the first unwatched episode and the rest of the season to a playlist for i = firstUnwatchedEpisodeIndex to unwatchedData.Items.count() - 1 m.global.queueManager.callFunc("push", unwatchedData.Items[i]) end for @@ -319,7 +320,7 @@ sub Main (args as dynamic) as void "Filters": "IsResumable", "EnableTotalRecordCount": false }) - print "resumeitems continueData=", continueData + if isValid(continueData) and isValid(continueData.Items) and continueData.Items.count() > 0 ' play the resumable episode for each item in continueData.Items @@ -341,6 +342,22 @@ sub Main (args as dynamic) as void end if end if end if + else if itemType = "playlist" + m.global.queueManager.callFunc("clear") + print "attempting to quickplay a playlist" + ' get playlist items + myPlaylist = api.playlists.GetItems(itemNode.id, { + "userId": m.global.session.user.id + }) + if isValid(myPlaylist) and isValid(myPlaylist.Items) and myPlaylist.Items.count() > 0 + myPlaylistItems = shuffleArray(myPlaylist.Items) + ' add each item to the queue + for each item in myPlaylistItems + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("playQueue") + end if + end if end if stopLoadingSpinner() diff --git a/source/utils/misc.brs b/source/utils/misc.brs index f91b8b16c..4138a0c9a 100644 --- a/source/utils/misc.brs +++ b/source/utils/misc.brs @@ -392,3 +392,13 @@ function arrayHasValue(arr as object, value as dynamic) as boolean end for return false end function + +' Takes an array of data, shuffles the order, then returns the array +' uses the Fisher-Yates shuffling algorithm +function shuffleArray(array as object) as object + for i = array.count() - 1 to 1 step -1 + j = Rnd(i + 1) - 1 + t = array[i] : array[i] = array[j] : array[j] = t + end for + return array +end function From a32c62ae9b139ead8d9a305ea5262450817c3944 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sun, 17 Sep 2023 18:16:25 -0400 Subject: [PATCH 06/47] shuffle boxsets --- source/Main.brs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/Main.brs b/source/Main.brs index cf1a7514c..0b50122c0 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -211,7 +211,8 @@ sub Main (args as dynamic) as void if isValid(data) and isValid(data.Items) and data.Items.count() > 0 ' there are videos inside print "found videos inside boxset" - for each item in data.Items + dataItems = shuffleArray(data.items) + for each item in dataItems m.global.queueManager.callFunc("push", item) end for m.global.queueManager.callFunc("playQueue") From f8e2ff7e506f3244f0f9566b4b94c5abee36311c Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Mon, 18 Sep 2023 22:39:44 -0400 Subject: [PATCH 07/47] add support for My Media and appears on row + move quick play logic to a namespace in it's own file --- components/manager/QueueManager.brs | 35 ++- components/music/ArtistView.brs | 12 +- source/Main.brs | 263 +++--------------- source/api/sdk.bs | 4 +- source/utils/quickplay.bs | 407 ++++++++++++++++++++++++++++ 5 files changed, 483 insertions(+), 238 deletions(-) create mode 100644 source/utils/quickplay.bs diff --git a/components/manager/QueueManager.brs b/components/manager/QueueManager.brs index 1459d333c..4b255fee3 100644 --- a/components/manager/QueueManager.brs +++ b/components/manager/QueueManager.brs @@ -11,6 +11,7 @@ sub init() m.queue = [] m.originalQueue = [] m.queueTypes = [] + m.isPlaying = false ' Preroll videos only play if user has cinema mode setting enabled m.isPrerollActive = m.global.session.user.settings["playback.cinemamode"] m.position = 0 @@ -19,6 +20,7 @@ end sub ' Clear all content from play queue sub clear() + m.isPlaying = false m.queue = [] m.queueTypes = [] m.isPrerollActive = m.global.session.user.settings["playback.cinemamode"] @@ -111,6 +113,7 @@ end function ' Play items in queue sub playQueue() + m.isPlaying = true nextItem = getCurrentItem() if not isValid(nextItem) then return @@ -201,21 +204,25 @@ end function sub shuffleQueueItems() ' By calling getQueue 2 different ways, Roku avoids needing to do a deep copy m.originalQueue = m.global.queueManager.callFunc("getQueue") - songIDArray = getQueue() - - ' Move the currently playing song to the front of the queue - temp = top() - songIDArray[0] = getCurrentItem() - songIDArray[getPosition()] = temp - - for i = 1 to songIDArray.count() - 1 - j = Rnd(songIDArray.count() - 1) - temp = songIDArray[i] - songIDArray[i] = songIDArray[j] - songIDArray[j] = temp - end for + itemIDArray = getQueue() + temp = invalid + + if m.isPlaying + ' Save the currently playing item + temp = getCurrentItem() + ' remove currently playing item from itemIDArray + itemIDArray.Delete(m.position) + end if + + ' shuffle all items + itemIDArray = shuffleArray(itemIDArray) + + if m.isPlaying + ' Put currently playing item in front of itemIDArray + itemIDArray.Unshift(temp) + end if - set(songIDArray) + set(itemIDArray) end sub ' Return the fitst item in the play queue diff --git a/components/music/ArtistView.brs b/components/music/ArtistView.brs index 67eec3acc..4d9365690 100644 --- a/components/music/ArtistView.brs +++ b/components/music/ArtistView.brs @@ -314,11 +314,19 @@ function onKeyEvent(key as string, press as boolean) as boolean end if if key = "play" - itemToPlay = m.albums.MusicArtistAlbumData.items[m.albums.itemFocused] + print "play button pressed from ArtistView" + itemToPlay = invalid + + if isValid(m.albums) and m.albums.isInFocusChain() + itemToPlay = m.albums.MusicArtistAlbumData.items[m.albums.itemFocused] + else if isValid(m.appearsOn) and m.appearsOn.isInFocusChain() + itemToPlay = m.appearsOn.MusicArtistAlbumData.items[m.appearsOn.itemFocused] + end if + if isValid(itemToPlay) m.top.quickPlayNode = itemToPlay + return true end if - return true end if return false diff --git a/source/Main.brs b/source/Main.brs index 0b50122c0..3eeb1840f 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -116,7 +116,11 @@ sub Main (args as dynamic) as void group.setFocus(true) end if else if isNodeEvent(msg, "quickPlayNode") + ' measure processing time + timeSpan = CreateObject("roTimespan") + startMediaLoadingSpinner() + group = sceneManager.callFunc("getActiveScene") reportingNode = msg.getRoSGNode() itemNode = invalid @@ -128,240 +132,59 @@ sub Main (args as dynamic) as void reportingNode.quickPlayNode = invalid end if end if + print "Quick Play started. itemNode=", itemNode if isValid(itemNode) and isValid(itemNode.id) and itemNode.id <> "" - print "quickPlayNode=", itemNode + ' make sure there is a type and convert type to lowercase itemType = invalid - if isValid(itemNode.type) + if isValid(itemNode.type) and itemNode.type <> "" itemType = Lcase(itemNode.type) - end if - ' grab type from json if needed - if not isValid(itemType) or itemType = "" + else + ' grab type from json and convert to lowercase if isValid(itemNode.json) and isValid(itemNode.json.type) itemType = Lcase(itemNode.json.type) end if end if - print "quickPlayNode type=", itemType - if itemType = "episode" or itemType = "movie" or itemType = "video" - ' attempt to play video file. resume if possible - if isValid(itemNode.selectedVideoStreamId) - itemNode.id = itemNode.selectedVideoStreamId - end if - - audio_stream_idx = 0 - if isValid(itemNode.selectedAudioStreamIndex) and itemNode.selectedAudioStreamIndex > 0 - audio_stream_idx = itemNode.selectedAudioStreamIndex - end if - itemNode.selectedAudioStreamIndex = audio_stream_idx - - playbackPosition = 0 - if isValid(itemNode.json) and isValid(itemNode.json.userdata) and isValid(itemNode.json.userdata.PlaybackPositionTicks) - playbackPosition = itemNode.json.userdata.PlaybackPositionTicks - end if - itemNode.startingPoint = playbackPosition - - m.global.queueManager.callFunc("clear") - m.global.queueManager.callFunc("push", itemNode) - m.global.queueManager.callFunc("playQueue") - - if LCase(group.subtype()) = "tvepisodes" - if isValid(group.lastFocus) - group.lastFocus.setFocus(true) - end if - end if - else if itemType = "audio" - ' attempt to play audio file - m.global.queueManager.callFunc("clear") - m.global.queueManager.callFunc("push", itemNode) - m.global.queueManager.callFunc("playQueue") - else if itemType = "musicalbum" - ' attempt to play the entire album starting with track 1 - m.global.queueManager.callFunc("clear") - ' convert album to list of songs - albumSongs = MusicSongList(itemNode.id) - ' add each song to the queue - for each song in albumSongs.items - song.type = "Audio" - m.global.queueManager.callFunc("push", song) - end for - ' play queue - m.global.queueManager.callFunc("playQueue") - else if itemType = "musicartist" - ' attempt to shuffle play all songs by artist - m.global.queueManager.callFunc("clear") - - data = GetSongsByArtist(itemNode.id, { "sortBy": "Random" }) - - if isValid(data) - for each item in data.items - m.global.queueManager.callFunc("push", item) - end for - - m.global.queueManager.callFunc("playQueue") - end if - else if itemType = "boxset" - ' attempt to play all movies in the boxset - ' play them in order of release - m.global.queueManager.callFunc("clear") - - data = api.items.GetByQuery({ - "userid": m.global.session.user.id, - "parentid": itemNode.id, - "EnableTotalRecordCount": false - }) - if isValid(data) and isValid(data.Items) and data.Items.count() > 0 - ' there are videos inside - print "found videos inside boxset" - dataItems = shuffleArray(data.items) - for each item in dataItems - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") - end if - else if itemType = "series" - ' attempt to play first unwatched episode - m.global.queueManager.callFunc("clear") - - data = api.shows.GetNextUp({ - "seriesId": itemNode.id, - "recursive": true, - "SortBy": "DatePlayed", - "SortOrder": "Descending", - "ImageTypeLimit": 1, - "UserId": m.global.session.user.id, - "EnableRewatching": false, - "DisableFirstEpisode": false, - "EnableTotalRecordCount": false - }) - if isValid(data) and isValid(data.Items) and data.Items.count() > 0 - ' there are unwatched episodes - for each item in data.Items - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") - else - ' next up check was empty - ' check for a resumable episode - data = api.users.GetResumeItemsByQuery(m.global.session.user.id, { - "parentId": itemNode.id, - "userid": m.global.session.user.id, - "SortBy": "DatePlayed", - "recursive": true, - "SortOrder": "Descending", - "Filters": "IsResumable", - "EnableTotalRecordCount": false - }) - print "resumeitems data=", data - if isValid(data) and isValid(data.Items) and data.Items.count() > 0 - ' play the resumable episode - for each item in data.Items - if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) - item.startingPoint = item.userdata.PlaybackPositionTicks - end if - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") - else - ' shuffle all episodes - data = api.shows.GetEpisodes(itemNode.id, { - "userid": m.global.session.user.id, - "SortBy": "Random", - "EnableTotalRecordCount": false - }) - - if isValid(data) and isValid(data.Items) and data.Items.count() > 0 - ' add all episodes found to a playlist - for each item in data.Items - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") - end if - end if - end if - else if itemType = "collectionfolder" - ' play depends on the kind of files inside the collectionfolder - else if itemType = "season" - ' play first unwatched episode - m.global.queueManager.callFunc("clear") - - unwatchedData = api.shows.GetEpisodes(itemNode.json.SeriesId, { - "seasonId": itemNode.id, - "userid": m.global.session.user.id, - "EnableTotalRecordCount": false - }) - - if isValid(unwatchedData) and isValid(unwatchedData.Items) - ' find the first unwatched episode - firstUnwatchedEpisodeIndex = invalid - for each item in unwatchedData.Items - if isValid(item.UserData) - if isValid(item.UserData.Played) and item.UserData.Played = false - firstUnwatchedEpisodeIndex = item.IndexNumber - 1 - if isValid(item.UserData.PlaybackPositionTicks) - item.startingPoint = item.UserData.PlaybackPositionTicks - end if - exit for - end if - end if - end for - if isValid(firstUnwatchedEpisodeIndex) - ' add the first unwatched episode and the rest of the season to a playlist - for i = firstUnwatchedEpisodeIndex to unwatchedData.Items.count() - 1 - m.global.queueManager.callFunc("push", unwatchedData.Items[i]) - end for - - m.global.queueManager.callFunc("playQueue") - else - ' try to find a "continue watching" episode - continueData = api.users.GetResumeItemsByQuery(m.global.session.user.id, { - "parentId": itemNode.id, - "userid": m.global.session.user.id, - "SortBy": "DatePlayed", - "recursive": true, - "SortOrder": "Descending", - "Filters": "IsResumable", - "EnableTotalRecordCount": false - }) - - if isValid(continueData) and isValid(continueData.Items) and continueData.Items.count() > 0 - ' play the resumable episode - for each item in continueData.Items - if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) - item.startingPoint = item.userdata.PlaybackPositionTicks - end if - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") - else - ' play the whole season in order - if isValid(unwatchedData) and isValid(unwatchedData.Items) and unwatchedData.Items.count() > 0 - ' add all episodes found to a playlist - for each item in unwatchedData.Items - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") - end if + print "Quick Play itemNode type=", itemType + + ' can't play the item without knowing what type it is + if isValid(itemType) + m.global.queueManager.callFunc("clear") ' empty queue/playlist + m.global.queueManager.callFunc("resetShuffle") ' turn shuffle off + + if itemType = "episode" or itemType = "movie" or itemType = "video" + quickplay.video(itemNode) + ' restore focus + if LCase(group.subtype()) = "tvepisodes" + if isValid(group.lastFocus) + group.lastFocus.setFocus(true) end if end if - end if - else if itemType = "playlist" - m.global.queueManager.callFunc("clear") - print "attempting to quickplay a playlist" - ' get playlist items - myPlaylist = api.playlists.GetItems(itemNode.id, { - "userId": m.global.session.user.id - }) - if isValid(myPlaylist) and isValid(myPlaylist.Items) and myPlaylist.Items.count() > 0 - myPlaylistItems = shuffleArray(myPlaylist.Items) - ' add each item to the queue - for each item in myPlaylistItems - m.global.queueManager.callFunc("push", item) - end for - m.global.queueManager.callFunc("playQueue") + else if itemType = "audio" + quickplay.audio(itemNode) + else if itemType = "musicalbum" + quickplay.album(itemNode) + else if itemType = "musicartist" + quickplay.artist(itemNode) + else if itemType = "series" + quickplay.series(itemNode) + else if itemType = "season" + quickplay.season(itemNode) + else if itemType = "boxset" + quickplay.boxset(itemNode) + else if itemType = "collectionfolder" + quickplay.collectionFolder(itemNode) + else if itemType = "playlist" + quickplay.playlist(itemNode) + else if itemType = "userview" + quickplay.userView(itemNode) end if + m.global.queueManager.callFunc("playQueue") end if end if stopLoadingSpinner() + elapsed = timeSpan.TotalMilliseconds() / 1000 + print "Quick Play finished loading in " + elapsed.toStr() + " seconds.", else if isNodeEvent(msg, "selectedItem") ' If you select a library from ANYWHERE, follow this flow selectedItem = msg.getData() diff --git a/source/api/sdk.bs b/source/api/sdk.bs index 51bca7834..1a9110531 100644 --- a/source/api/sdk.bs +++ b/source/api/sdk.bs @@ -1200,8 +1200,8 @@ namespace api end function ' Gets the original items of a playlist. - function GetItems(id as string, params = {} as object) - req = APIRequest(Substitute("/playlists/{0}/items", id), params) + function GetItems(playlistID as string, params = {} as object) + req = APIRequest(Substitute("/playlists/{0}/items", playlistID), params) return getJson(req) end function diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs new file mode 100644 index 000000000..e5dc5ddf8 --- /dev/null +++ b/source/utils/quickplay.bs @@ -0,0 +1,407 @@ +' All of the Quick Play logic seperated by media type +namespace quickplay + + ' A single video file. + sub video(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) or not isValid(itemNode.json) then return + + ' attempt to play video file. resume if possible + if isValid(itemNode.selectedVideoStreamId) + itemNode.id = itemNode.selectedVideoStreamId + end if + + audio_stream_idx = 0 + if isValid(itemNode.selectedAudioStreamIndex) and itemNode.selectedAudioStreamIndex > 0 + audio_stream_idx = itemNode.selectedAudioStreamIndex + end if + itemNode.selectedAudioStreamIndex = audio_stream_idx + + playbackPosition = 0 + if isValid(itemNode.json.userdata) and isValid(itemNode.json.userdata.PlaybackPositionTicks) + playbackPosition = itemNode.json.userdata.PlaybackPositionTicks + end if + itemNode.startingPoint = playbackPosition + + m.global.queueManager.callFunc("push", itemNode) + end sub + + ' A single audio file. + sub audio(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + m.global.queueManager.callFunc("push", itemNode) + end sub + + ' A music album. + ' Play the entire album starting with track 1. + sub album(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + ' grab list of songs in the album + albumSongs = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "imageTypeLimit": 1, + "sortBy": "SortName", + "enableUserData": false, + "EnableTotalRecordCount": false + }) + if isValid(albumSongs) and isValidAndNotEmpty(albumSongs.items) + ' add every song to the queue + for each song in albumSongs.items + m.global.queueManager.callFunc("push", song) + end for + end if + end sub + + ' A music artist. + ' Shuffle play all songs by artist. + sub artist(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + ' get all songs by artist + artistSongs = api.users.GetItemsByQuery(m.global.session.user.id, { + "artistIds": itemNode.id, + "includeItemTypes": "Audio", + "sortBy": "Album", + "imageTypeLimit": 1, + "Recursive": true, + "enableUserData": false, + "EnableTotalRecordCount": false + }) + print "artistSongs=", artistSongs + + if isValid(artistSongs) and isValidAndNotEmpty(artistSongs.items) + for each artistSong in artistSongs.items + m.global.queueManager.callFunc("push", artistSong) + end for + end if + + m.global.queueManager.callFunc("toggleShuffle") + end sub + + ' A boxset. + ' Shuffle play all items inside. + sub boxset(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + data = api.items.GetByQuery({ + "userid": m.global.session.user.id, + "parentid": itemNode.id, + "EnableTotalRecordCount": false + }) + if isValid(data) and isValidAndNotEmpty(data.Items) + ' there are videos inside + for each item in data.items + m.global.queueManager.callFunc("push", item) + end for + end if + end sub + + ' A TV Show Series. + ' Play the first unwatched episode. + ' If none, shuffle play the whole series. + sub series(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + data = api.shows.GetNextUp({ + "seriesId": itemNode.id, + "recursive": true, + "SortBy": "DatePlayed", + "SortOrder": "Descending", + "ImageTypeLimit": 1, + "UserId": m.global.session.user.id, + "EnableRewatching": false, + "DisableFirstEpisode": false, + "EnableTotalRecordCount": false + }) + + if isValid(data) and isValidAndNotEmpty(data.Items) + ' there are unwatched episodes + for each item in data.Items + m.global.queueManager.callFunc("push", item) + end for + else + ' next up check was empty + ' check for a resumable episode + data = api.users.GetResumeItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "userid": m.global.session.user.id, + "SortBy": "DatePlayed", + "recursive": true, + "SortOrder": "Descending", + "Filters": "IsResumable", + "EnableTotalRecordCount": false + }) + print "resumeitems data=", data + if isValid(data) and isValidAndNotEmpty(data.Items) + ' play the resumable episode + for each item in data.Items + if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) + item.startingPoint = item.userdata.PlaybackPositionTicks + end if + m.global.queueManager.callFunc("push", item) + end for + else + ' shuffle all episodes + data = api.shows.GetEpisodes(itemNode.id, { + "userid": m.global.session.user.id, + "SortBy": "Random", + "EnableTotalRecordCount": false + }) + + if isValid(data) and isValidAndNotEmpty(data.Items) + ' add all episodes found to a playlist + for each item in data.Items + m.global.queueManager.callFunc("push", item) + end for + end if + end if + end if + end sub + + ' A TV Show Season. + ' Play the first unwatched episode. + ' If none, play the whole season starting with episode 1. + sub season(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + unwatchedData = api.shows.GetEpisodes(itemNode.json.SeriesId, { + "seasonId": itemNode.id, + "userid": m.global.session.user.id, + "EnableTotalRecordCount": false + }) + + if isValid(unwatchedData) and isValidAndNotEmpty(unwatchedData.Items) + ' find the first unwatched episode + firstUnwatchedEpisodeIndex = invalid + for each item in unwatchedData.Items + if isValid(item.UserData) + if isValid(item.UserData.Played) and item.UserData.Played = false + firstUnwatchedEpisodeIndex = item.IndexNumber - 1 + if isValid(item.UserData.PlaybackPositionTicks) + item.startingPoint = item.UserData.PlaybackPositionTicks + end if + exit for + end if + end if + end for + + if isValid(firstUnwatchedEpisodeIndex) + ' add the first unwatched episode and the rest of the season to a playlist + for i = firstUnwatchedEpisodeIndex to unwatchedData.Items.count() - 1 + m.global.queueManager.callFunc("push", unwatchedData.Items[i]) + end for + else + ' try to find a "continue watching" episode + continueData = api.users.GetResumeItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "userid": m.global.session.user.id, + "SortBy": "DatePlayed", + "recursive": true, + "SortOrder": "Descending", + "Filters": "IsResumable", + "EnableTotalRecordCount": false + }) + + if isValid(continueData) and isValidAndNotEmpty(continueData.Items) + ' play the resumable episode + for each item in continueData.Items + if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) + item.startingPoint = item.userdata.PlaybackPositionTicks + end if + m.global.queueManager.callFunc("push", item) + end for + else + ' play the whole season in order + if isValid(unwatchedData) and isValidAndNotEmpty(unwatchedData.Items) + ' add all episodes found to a playlist + for each item in unwatchedData.Items + m.global.queueManager.callFunc("push", item) + end for + end if + end if + end if + end if + end sub + + ' Quick Play A Playlist. + ' Play the first unwatched episode. + ' If none, play the whole season starting with episode 1. + sub playlist(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + ' get playlist items + myPlaylist = api.playlists.GetItems(itemNode.id, { + "userId": m.global.session.user.id + }) + + if isValid(myPlaylist) and isValidAndNotEmpty(myPlaylist.Items) + ' add each item to the queue + for each item in myPlaylist.Items + m.global.queueManager.callFunc("push", item) + end for + m.global.queueManager.callFunc("toggleShuffle") + end if + end sub + + ' Quick Play A CollectionFolder. + ' Shuffle play the items inside + ' with some differences based on collectionType. + sub collectionFolder(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + ' play depends on the kind of files inside the collectionfolder + print "attempting to quickplay a collection folder" + collectionType = LCase(itemNode.collectionType) + print "collectionType=", collectionType + + if collectionType = "movies" + ' get randomized list of movies inside + data = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id + }) + + if isValid(data) and isValidAndNotEmpty(data.items) + ' add each item to the queue + for each item in data.Items + ' only add movies we're not currently watching + if isValid(item.userdata) and isValid(item.userdata.PlaybackPositionTicks) + if item.userdata.PlaybackPositionTicks = 0 + m.global.queueManager.callFunc("push", item) + end if + end if + end for + m.global.queueManager.callFunc("toggleShuffle") + end if + else if collectionType = "music" + ' get all audio files under this collection + ' sort songs by album then artist + songsData = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "includeItemTypes": "Audio", + "sortBy": "Album", + "Recursive": true, + "imageTypeLimit": 1, + "enableUserData": false, + "EnableTotalRecordCount": false + }) + print "songsData=", songsData + if isValid(songsData) and isValidAndNotEmpty(songsData.items) + for each song in songsData.Items + m.global.queueManager.callFunc("push", song) + end for + m.global.queueManager.callFunc("toggleShuffle") + end if + else if collectionType = "boxsets" + ' get list of all boxsets inside + boxsetData = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "imageTypeLimit": 0, + "enableUserData": false, + "EnableTotalRecordCount": false, + "enableImages": false + }) + + print "boxsetData=", boxsetData + + if isValid(boxsetData) and isValidAndNotEmpty(boxsetData.items) + ' pick a random boxset + arrayIndex = Rnd(boxsetData.items.count()) - 1 + myBoxset = boxsetData.items[arrayIndex] + ' grab list of items from boxset + print "myBoxset=", myBoxset + boxsetData = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": myBoxset.id, + "EnableTotalRecordCount": false + }) + + if isValid(boxsetData) and isValidAndNotEmpty(boxsetData.items) + ' add all boxset items to queue + for each item in boxsetData.items + m.global.queueManager.callFunc("push", item) + end for + end if + end if + else if collectionType = "tvshows" + ' get list of tv shows inside + tvshowsData = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "imageTypeLimit": 0, + "enableUserData": false, + "EnableTotalRecordCount": false, + "enableImages": false + }) + + print "tvshowsData=", tvshowsData + + if isValid(tvshowsData) and isValidAndNotEmpty(tvshowsData.items) + for each tvshow in tvshowsData.items + ' grab all watched episodes for each series + showData = api.shows.GetEpisodes(tvshow.id, { + "userId": m.global.session.user.id, + "imageTypeLimit": 0, + "EnableTotalRecordCount": false, + "enableImages": false + }) + + if isValid(showData) and isValidAndNotEmpty(showData.items) + ' add all played episodes to queue + for each episode in showData.items + if isValid(episode.userdata) and isValid(episode.userdata.Played) + if episode.userdata.Played + m.global.queueManager.callFunc("push", episode) + end if + end if + end for + + end if + end for + m.global.queueManager.callFunc("toggleShuffle") + end if + ' else if collectionType = "homevideos" ' also used for a "Photo" library + else + print "Quick Play WARNING: Unknown collection type" + end if + end sub + + ' Quick Play A UserView. + ' Play logic depends on "collectionType". + sub userView(itemNode as object) + ' play depends on the kind of files inside the collectionfolder + collectionType = LCase(itemNode.collectionType) + print "collectionType=", collectionType + + if collectionType = "playlists" + ' get list of all playlists inside + playlistData = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "imageTypeLimit": 0, + "enableUserData": false, + "EnableTotalRecordCount": false, + "enableImages": false + }) + + print "playlistData=", playlistData + + if isValid(playlistData) and isValidAndNotEmpty(playlistData.items) + ' pick a random playlist + arrayIndex = Rnd(playlistData.items.count()) - 1 + myPlaylist = playlistData.items[arrayIndex] + ' grab list of items from playlist + print "myPlaylist=", myPlaylist + playlistItems = api.playlists.GetItems(myPlaylist.id, { + "userId": m.global.session.user.id, + "EnableTotalRecordCount": false + }) + ' validate api results + if isValid(playlistItems) and isValidAndNotEmpty(playlistItems.items) + for each item in playlistItems.items + m.global.queueManager.callFunc("push", item) + end for + end if + m.global.queueManager.callFunc("toggleShuffle") + end if + else + print "Quick Play CollectionFolder WARNING: Unknown collection type" + end if + end sub + +end namespace From ad34a2ea959b03231f02882d17bfd6ffd01a7ce4 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Mon, 18 Sep 2023 22:44:00 -0400 Subject: [PATCH 08/47] fix typo --- source/Main.brs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Main.brs b/source/Main.brs index 3eeb1840f..ee79450ea 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -184,7 +184,7 @@ sub Main (args as dynamic) as void end if stopLoadingSpinner() elapsed = timeSpan.TotalMilliseconds() / 1000 - print "Quick Play finished loading in " + elapsed.toStr() + " seconds.", + print "Quick Play finished loading in " + elapsed.toStr() + " seconds." else if isNodeEvent(msg, "selectedItem") ' If you select a library from ANYWHERE, follow this flow selectedItem = msg.getData() From 7a610a1140e7cef8027f8d66552a3d2280296c68 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 21 Sep 2023 13:19:22 -0400 Subject: [PATCH 09/47] don't save active server to registry when connection fails --- source/ShowScenes.brs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/ShowScenes.brs b/source/ShowScenes.brs index 48a1853db..ff80ef669 100644 --- a/source/ShowScenes.brs +++ b/source/ShowScenes.brs @@ -282,11 +282,11 @@ function CreateServerGroup() m.scene.dialog = dialog serverUrl = standardize_jellyfin_url(screen.serverUrl) - set_setting("server", serverUrl) isConnected = session.server.UpdateURL(serverUrl) serverInfoResult = invalid if isConnected + set_setting("server", serverUrl) serverInfoResult = ServerInfo() end if dialog.close = true @@ -302,9 +302,10 @@ function CreateServerGroup() ' If server redirected received, update the URL if isValid(serverInfoResult.UpdatedUrl) serverUrl = serverInfoResult.UpdatedUrl - set_setting("server", serverUrl) + isConnected = session.server.UpdateURL(serverUrl) if isConnected + set_setting("server", serverUrl) screen.visible = false return "" end if From a4660480105c24e445cd4faaa8924d336b085e1e Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 21 Sep 2023 14:12:15 -0400 Subject: [PATCH 10/47] fix migration logic. track lastrunversion per user --- source/Main.brs | 59 +++++++++++++++++++++++++++------------- source/utils/config.brs | 8 +++++- source/utils/globals.brs | 4 ++- source/utils/session.bs | 9 +++++- 4 files changed, 58 insertions(+), 22 deletions(-) diff --git a/source/Main.brs b/source/Main.brs index 8a86ac075..272284a9a 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -61,30 +61,15 @@ sub Main (args as dynamic) as void end if end if - ' Only show the Whats New popup the first time a user runs a new client version. - appLastRunVersion = get_setting("LastRunVersion") - if m.global.app.version <> appLastRunVersion - ' Ensure the user hasn't disabled Whats New popups - if m.global.session.user.settings["load.allowwhatsnew"] = true - set_setting("LastRunVersion", m.global.app.version) - dialog = createObject("roSGNode", "WhatsNewDialog") - m.scene.dialog = dialog - m.scene.dialog.observeField("buttonSelected", m.port) - end if - end if - - ' Registry migrations - if isValid(appLastRunVersion) and not versionChecker(appLastRunVersion, "1.7.0") - ' last app version used less than 1.7.0 + ' Global registry migrations + if isValid(m.global.app.lastRunVersion) and not versionChecker(m.global.app.lastRunVersion, "1.7.0") + ' last app version used was less than 1.7.0 + print "Running 1.7.0 global registry migrations" ' no longer saving raw password to registry ' auth token and username are now stored in user settings and not global settings - print "Running 1.7.0 registry migrations" - ' remove global settings unset_setting("token") unset_setting("username") unset_setting("password") - ' remove user settings - unset_user_setting("password") ' remove saved credentials from saved_servers saved = get_setting("saved_servers") if isValid(saved) @@ -99,6 +84,42 @@ sub Main (args as dynamic) as void set_setting("saved_servers", FormatJson(newServers)) end if end if + ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations + ' duplicate LastRunVersion to all user settings in the registry so that we can run user specific migrations + regSections = getRegistrySections() + for each section in regSections + if section <> "Jellyfin" + registry_write("LastRunVersion", m.global.app.version, section) + end if + end for + end if + + ' User registry migrations + if m.global.session.user.lastRunVersion <> invalid and not versionChecker(m.global.session.user.lastRunVersion, "1.7.0") + ' last run version was less than 1.7.0 + print "Running 1.7.0 user registry migrations" + ' no longer saving password to registry + unset_user_setting("password") + end if + + ' Save the global last run version of the app + if m.global.app.version <> m.global.app.lastRunVersion + ' update global LastRunVersion + set_setting("LastRunVersion", m.global.app.version) + + ' Show the Whats New popup + if m.global.session.user.settings["load.allowwhatsnew"] = true + dialog = createObject("roSGNode", "WhatsNewDialog") + m.scene.dialog = dialog + m.scene.dialog.observeField("buttonSelected", m.port) + end if + end if + + ' Save the user last run version of the app + if m.global.session.user.lastRunVersion <> m.global.app.lastRunVersion + ' update user LastRunVersion + set_user_setting("LastRunVersion", m.global.app.version) + session.user.Update("lastRunVersion", m.global.app.version) end if ' Handle input messages diff --git a/source/utils/config.brs b/source/utils/config.brs index 3c82877f0..5827e4b9c 100644 --- a/source/utils/config.brs +++ b/source/utils/config.brs @@ -37,7 +37,7 @@ function RegistryReadAll(section as string) as dynamic registryData = {} for each item in regKeyList ' ignore session related tokens - if item <> "token" and item <> "username" and item <> "password" + if item <> "token" and item <> "username" and item <> "password" and item <> "LastRunVersion" if registry.Exists(item) registryData.AddReplace(item, registry.Read(item)) end if @@ -47,6 +47,12 @@ function RegistryReadAll(section as string) as dynamic return registryData end function +' Return an array of all the registry section keys +function getRegistrySections() as object + registry = CreateObject("roRegistry") + return registry.GetSectionList() +end function + ' "Jellyfin" registry accessors for the default global settings function get_setting(key, default = invalid) value = registry_read(key, "Jellyfin") diff --git a/source/utils/globals.brs b/source/utils/globals.brs index 943984c7a..538ce30d6 100644 --- a/source/utils/globals.brs +++ b/source/utils/globals.brs @@ -28,11 +28,13 @@ end sub ' Save information from roAppInfo to m.global.app sub SaveAppToGlobal() appInfo = CreateObject("roAppInfo") + lastRunVersion = get_setting("LastRunVersion") m.global.addFields({ app: { id: appInfo.GetID(), isDev: appInfo.IsDev(), - version: appInfo.GetVersion() + version: appInfo.GetVersion(), + lastRunVersion: lastRunVersion } }) end sub diff --git a/source/utils/session.bs b/source/utils/session.bs index 01c5712da..8cbd69194 100644 --- a/source/utils/session.bs +++ b/source/utils/session.bs @@ -11,7 +11,8 @@ namespace session user: { Configuration: {}, Policy: {}, - settings: {} + settings: {}, + lastRunVersion: invalid } } }) @@ -146,6 +147,12 @@ namespace session ' update global user session session.Update("user", tmpSession.user) + ' grab lastRunVersion for this user + lastRunVersion = get_user_setting("LastRunVersion") + if lastRunVersion <> invalid + session.user.Update("LastRunVersion", lastRunVersion) + end if + ' update user session settings with values from registry userSettings = RegistryReadAll(tmpSession.user.id) for each setting in userSettings From 045c4b3c07cdb8640b492791437c795ad9fd5785 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 21 Sep 2023 14:13:31 -0400 Subject: [PATCH 11/47] remove deprecated setting --- source/Main.brs | 1 + 1 file changed, 1 insertion(+) diff --git a/source/Main.brs b/source/Main.brs index 272284a9a..b235cdba1 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -67,6 +67,7 @@ sub Main (args as dynamic) as void print "Running 1.7.0 global registry migrations" ' no longer saving raw password to registry ' auth token and username are now stored in user settings and not global settings + unset_setting("port") unset_setting("token") unset_setting("username") unset_setting("password") From 1c8af7f31b5a3f8def373de661fc6d3494063564 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 21 Sep 2023 14:46:18 -0400 Subject: [PATCH 12/47] Move migration logic to functions in their own file --- source/Main.brs | 44 +++------------------------------------ source/migrations.bs | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 41 deletions(-) create mode 100644 source/migrations.bs diff --git a/source/Main.brs b/source/Main.brs index b235cdba1..83400c6e4 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -61,47 +61,9 @@ sub Main (args as dynamic) as void end if end if - ' Global registry migrations - if isValid(m.global.app.lastRunVersion) and not versionChecker(m.global.app.lastRunVersion, "1.7.0") - ' last app version used was less than 1.7.0 - print "Running 1.7.0 global registry migrations" - ' no longer saving raw password to registry - ' auth token and username are now stored in user settings and not global settings - unset_setting("port") - unset_setting("token") - unset_setting("username") - unset_setting("password") - ' remove saved credentials from saved_servers - saved = get_setting("saved_servers") - if isValid(saved) - savedServers = ParseJson(saved) - if isValid(savedServers.serverList) and savedServers.serverList.Count() > 0 - newServers = { serverList: [] } - for each item in savedServers.serverList - item.Delete("username") - item.Delete("password") - newServers.serverList.Push(item) - end for - set_setting("saved_servers", FormatJson(newServers)) - end if - end if - ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations - ' duplicate LastRunVersion to all user settings in the registry so that we can run user specific migrations - regSections = getRegistrySections() - for each section in regSections - if section <> "Jellyfin" - registry_write("LastRunVersion", m.global.app.version, section) - end if - end for - end if - - ' User registry migrations - if m.global.session.user.lastRunVersion <> invalid and not versionChecker(m.global.session.user.lastRunVersion, "1.7.0") - ' last run version was less than 1.7.0 - print "Running 1.7.0 user registry migrations" - ' no longer saving password to registry - unset_user_setting("password") - end if + ' migrate registry if needed + runGlobalMigrations() + runUserMigrations() ' Save the global last run version of the app if m.global.app.version <> m.global.app.lastRunVersion diff --git a/source/migrations.bs b/source/migrations.bs new file mode 100644 index 000000000..f73dbbbe0 --- /dev/null +++ b/source/migrations.bs @@ -0,0 +1,49 @@ +' Functions that update the registry based on the last run version and the currently running version + +' Run all necessary registry mirations on the "global" Jellyfin registry section +sub runGlobalMigrations() + ' Global registry migrations + if isValid(m.global.app.lastRunVersion) and not versionChecker(m.global.app.lastRunVersion, "1.7.0") + ' last app version used was less than 1.7.0 + print "Running 1.7.0 global registry migrations" + ' no longer saving raw password to registry + ' auth token and username are now stored in user settings and not global settings + unset_setting("port") + unset_setting("token") + unset_setting("username") + unset_setting("password") + ' remove saved credentials from saved_servers + saved = get_setting("saved_servers") + if isValid(saved) + savedServers = ParseJson(saved) + if isValid(savedServers.serverList) and savedServers.serverList.Count() > 0 + newServers = { serverList: [] } + for each item in savedServers.serverList + item.Delete("username") + item.Delete("password") + newServers.serverList.Push(item) + end for + set_setting("saved_servers", FormatJson(newServers)) + end if + end if + ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations + ' duplicate LastRunVersion to all user settings in the registry so that we can run user specific migrations + regSections = getRegistrySections() + for each section in regSections + if section <> "Jellyfin" + registry_write("LastRunVersion", m.global.app.version, section) + end if + end for + end if +end sub + +' Run all necessary registry mirations on the user specific registry section +sub runUserMigrations() + ' User registry migrations + if m.global.session.user.lastRunVersion <> invalid and not versionChecker(m.global.session.user.lastRunVersion, "1.7.0") + ' last run version was less than 1.7.0 + print "Running 1.7.0 user registry migrations" + ' no longer saving password to registry + unset_user_setting("password") + end if +end sub From 06f69f33f3e4f974b062b2d30154fef17e76adf7 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 08:09:36 -0400 Subject: [PATCH 13/47] stop loading items to queue if memory is low --- source/Main.brs | 1 + source/utils/quickplay.bs | 69 +++++++++++++++++++++++++-------------- source/utils/session.bs | 1 + 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/source/Main.brs b/source/Main.brs index ee79450ea..c1d3e3c3f 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -644,6 +644,7 @@ sub Main (args as dynamic) as void ' - "low" means that the general memory is below acceptable levels but not critical ' - "critical" means that general memory are at dangerously low level and that the OS may force terminate the application print "event.generalMemoryLevel = ", event.generalMemoryLevel + session.Update("memoreyLevel", event.generalMemoryLevel) else if isValid(event.audioCodecCapabilityChanged) ' The audio codec capability has changed if true. print "event.audioCodecCapabilityChanged = ", event.audioCodecCapabilityChanged diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index e5dc5ddf8..e8528b964 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -1,6 +1,35 @@ ' All of the Quick Play logic seperated by media type namespace quickplay + ' Takes an array of items and adds to global queue. + ' Stop loading items if memory level becomes low + sub pushToQueue(queueArray as object, limitValue = 200 as integer) + if isValidAndNotEmpty(queueArray) + itemCount = queueArray.count() + if limitValue >= itemCount + ' load everything + for each item in queueArray + m.global.queueManager.callFunc("push", item) + end for + else + newLimit = limitValue + for i = 0 to itemCount - 1 + m.global.queueManager.callFunc("push", queueArray[i]) + + if i = newLimit + ' hit the item limit. check memory level + newLimit = newLimit + limitValue + print "m.global.session.memoryLevel=", m.global.session.memoryLevel + if m.global.session.memoryLevel = "low" or m.global.session.memoryLevel = "critical" + print "Memory is low. Stop loading items in the playlist..." + exit for + end if + end if + end for + end if + end if + end sub + ' A single video file. sub video(itemNode as object) if not isValid(itemNode) or not isValid(itemNode.id) or not isValid(itemNode.json) then return @@ -71,12 +100,13 @@ namespace quickplay print "artistSongs=", artistSongs if isValid(artistSongs) and isValidAndNotEmpty(artistSongs.items) - for each artistSong in artistSongs.items - m.global.queueManager.callFunc("push", artistSong) - end for - end if + pushToQueue(artistSongs.items) - m.global.queueManager.callFunc("toggleShuffle") + ' don't show shuffle icon for 1 song + if artistSongs.items > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if + end if end sub ' A boxset. @@ -91,9 +121,7 @@ namespace quickplay }) if isValid(data) and isValidAndNotEmpty(data.Items) ' there are videos inside - for each item in data.items - m.global.queueManager.callFunc("push", item) - end for + pushToQueue(data.items) end if end sub @@ -151,9 +179,7 @@ namespace quickplay if isValid(data) and isValidAndNotEmpty(data.Items) ' add all episodes found to a playlist - for each item in data.Items - m.global.queueManager.callFunc("push", item) - end for + pushToQueue(data.Items) end if end if end if @@ -215,9 +241,7 @@ namespace quickplay ' play the whole season in order if isValid(unwatchedData) and isValidAndNotEmpty(unwatchedData.Items) ' add all episodes found to a playlist - for each item in unwatchedData.Items - m.global.queueManager.callFunc("push", item) - end for + pushToQueue(unwatchedData.Items) end if end if end if @@ -236,9 +260,7 @@ namespace quickplay if isValid(myPlaylist) and isValidAndNotEmpty(myPlaylist.Items) ' add each item to the queue - for each item in myPlaylist.Items - m.global.queueManager.callFunc("push", item) - end for + pushToQueue(myPlaylist.Items) m.global.queueManager.callFunc("toggleShuffle") end if end sub @@ -285,9 +307,7 @@ namespace quickplay }) print "songsData=", songsData if isValid(songsData) and isValidAndNotEmpty(songsData.items) - for each song in songsData.Items - m.global.queueManager.callFunc("push", song) - end for + pushToQueue(songsData.Items) m.global.queueManager.callFunc("toggleShuffle") end if else if collectionType = "boxsets" @@ -315,9 +335,7 @@ namespace quickplay if isValid(boxsetData) and isValidAndNotEmpty(boxsetData.items) ' add all boxset items to queue - for each item in boxsetData.items - m.global.queueManager.callFunc("push", item) - end for + pushToQueue(boxsetData.Items) end if end if else if collectionType = "tvshows" @@ -396,8 +414,11 @@ namespace quickplay for each item in playlistItems.items m.global.queueManager.callFunc("push", item) end for + ' don't show shuffle icon for 1 item + if playlistItems.items > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if end if - m.global.queueManager.callFunc("toggleShuffle") end if else print "Quick Play CollectionFolder WARNING: Unknown collection type" diff --git a/source/utils/session.bs b/source/utils/session.bs index 4f015751b..404923895 100644 --- a/source/utils/session.bs +++ b/source/utils/session.bs @@ -7,6 +7,7 @@ namespace session sub Init() m.global.addFields({ session: { + "memoryLevel": "normal", server: {}, user: { Configuration: {}, From c3d0e85d3d3fa3d11e674a49f1b2239b3f1fd22d Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 09:47:21 -0400 Subject: [PATCH 14/47] add support for studio and genre movie library view --- components/ItemGrid/MovieLibraryView.brs | 7 +++- source/Main.brs | 2 ++ source/utils/quickplay.bs | 46 ++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/components/ItemGrid/MovieLibraryView.brs b/components/ItemGrid/MovieLibraryView.brs index 1dc46dbf7..5294f0c97 100644 --- a/components/ItemGrid/MovieLibraryView.brs +++ b/components/ItemGrid/MovieLibraryView.brs @@ -707,7 +707,12 @@ end sub ' 'Returns Focused Item function getItemFocused() - return m.itemGrid.content.getChild(m.itemGrid.itemFocused) + if m.itemGrid.isinFocusChain() and isValid(m.itemGrid.itemFocused) + return m.itemGrid.content.getChild(m.itemGrid.itemFocused) + else if m.genreList.isinFocusChain() and isValid(m.genreList.rowItemFocused) + return m.genreList.content.getChild(m.genreList.rowItemFocused[0]).getChild(m.genreList.rowItemFocused[1]) + end if + return invalid end function ' diff --git a/source/Main.brs b/source/Main.brs index c1d3e3c3f..02ce259bd 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -177,6 +177,8 @@ sub Main (args as dynamic) as void quickplay.playlist(itemNode) else if itemType = "userview" quickplay.userView(itemNode) + else if itemType = "folder" + quickplay.folder(itemNode) end if m.global.queueManager.callFunc("playQueue") diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index e8528b964..44420b435 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -103,7 +103,7 @@ namespace quickplay pushToQueue(artistSongs.items) ' don't show shuffle icon for 1 song - if artistSongs.items > 1 + if artistSongs.items.count() > 1 m.global.queueManager.callFunc("toggleShuffle") end if end if @@ -265,6 +265,44 @@ namespace quickplay end if end sub + ' Quick Play A folder. + ' Shuffle play all items found + sub folder(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + print "itemNode.json=", itemNode.json + + paramArray = { + "includeItemTypes": ["Audio", "Episode", "Movie", "Video"], + "videoTypes": "VideoFile", + "sortBy": "Random", + "imageTypeLimit": 1, + "Recursive": true, + "enableUserData": false, + "EnableTotalRecordCount": false + } + ' modify api query based on folder type + folderType = Lcase(itemNode.json.type) + if folderType = "studio" + paramArray["studioIds"] = itemNode.id + else if folderType = "genre" + paramArray["genreIds"] = itemNode.id + else + paramArray["parentId"] = itemNode.id + end if + ' get folder items + folderData = api.users.GetItemsByQuery(m.global.session.user.id, paramArray) + print "folderData=", folderData + + if isValid(folderData) and isValidAndNotEmpty(folderData.items) + pushToQueue(folderData.items) + + ' don't show shuffle icon for 1 item + if folderData.items.count() > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if + end if + end sub + ' Quick Play A CollectionFolder. ' Shuffle play the items inside ' with some differences based on collectionType. @@ -308,7 +346,9 @@ namespace quickplay print "songsData=", songsData if isValid(songsData) and isValidAndNotEmpty(songsData.items) pushToQueue(songsData.Items) - m.global.queueManager.callFunc("toggleShuffle") + if songsData.Items.count() > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if end if else if collectionType = "boxsets" ' get list of all boxsets inside @@ -415,7 +455,7 @@ namespace quickplay m.global.queueManager.callFunc("push", item) end for ' don't show shuffle icon for 1 item - if playlistItems.items > 1 + if playlistItems.items.count() > 1 m.global.queueManager.callFunc("toggleShuffle") end if end if From 5218002f106c19f4259bf0aa3e1985895d481c9e Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 10:06:52 -0400 Subject: [PATCH 15/47] add support for music genres --- components/ItemGrid/MusicLibraryView.brs | 7 ++++++- source/utils/quickplay.bs | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/components/ItemGrid/MusicLibraryView.brs b/components/ItemGrid/MusicLibraryView.brs index 9056025fb..7808d99e0 100644 --- a/components/ItemGrid/MusicLibraryView.brs +++ b/components/ItemGrid/MusicLibraryView.brs @@ -572,7 +572,12 @@ end sub ' 'Returns Focused Item function getItemFocused() - return m.itemGrid.content.getChild(m.itemGrid.itemFocused) + if m.itemGrid.isinFocusChain() and isValid(m.itemGrid.itemFocused) + return m.itemGrid.content.getChild(m.itemGrid.itemFocused) + else if m.genreList.isinFocusChain() and isValid(m.genreList.itemFocused) + return m.genreList.content.getChild(m.genreList.itemFocused) + end if + return invalid end function ' diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 44420b435..37af9ecb6 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -272,7 +272,7 @@ namespace quickplay print "itemNode.json=", itemNode.json paramArray = { - "includeItemTypes": ["Audio", "Episode", "Movie", "Video"], + "includeItemTypes": ["Episode", "Movie", "Video"], "videoTypes": "VideoFile", "sortBy": "Random", "imageTypeLimit": 1, @@ -286,6 +286,10 @@ namespace quickplay paramArray["studioIds"] = itemNode.id else if folderType = "genre" paramArray["genreIds"] = itemNode.id + else if folderType = "musicgenre" + paramArray["genreIds"] = itemNode.id + paramArray.delete("videoTypes") + paramArray["includeItemTypes"] = "Audio" else paramArray["parentId"] = itemNode.id end if From 853419eb9bd54ace203629868bc8f7c3c7304888 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 10:52:29 -0400 Subject: [PATCH 16/47] add quick play support for music videos --- components/manager/QueueManager.brs | 5 +++++ source/Main.brs | 2 ++ source/utils/quickplay.bs | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/components/manager/QueueManager.brs b/components/manager/QueueManager.brs index 4b255fee3..4a5b14b9e 100644 --- a/components/manager/QueueManager.brs +++ b/components/manager/QueueManager.brs @@ -125,6 +125,11 @@ sub playQueue() return end if + if nextItemMediaType = "musicvideo" + CreateVideoPlayerView() + return + end if + if nextItemMediaType = "video" CreateVideoPlayerView() return diff --git a/source/Main.brs b/source/Main.brs index 02ce259bd..4ec33899e 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -179,6 +179,8 @@ sub Main (args as dynamic) as void quickplay.userView(itemNode) else if itemType = "folder" quickplay.folder(itemNode) + else if itemType = "musicvideo" + quickplay.musicVideo(itemNode) end if m.global.queueManager.callFunc("playQueue") diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 37af9ecb6..7127d9c13 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -61,6 +61,13 @@ namespace quickplay m.global.queueManager.callFunc("push", itemNode) end sub + ' A single music video file. + sub musicVideo(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) or not isValid(itemNode.json) then return + + m.global.queueManager.callFunc("push", itemNode) + end sub + ' A music album. ' Play the entire album starting with track 1. sub album(itemNode as object) @@ -418,6 +425,25 @@ namespace quickplay end for m.global.queueManager.callFunc("toggleShuffle") end if + else if collectionType = "musicvideos" + ' get randomized list of videos inside + data = api.users.GetItemsByQuery(m.global.session.user.id, { + "parentId": itemNode.id, + "includeItemTypes": "MusicVideo", + "sortBy": "Random", + "Recursive": true, + "imageTypeLimit": 1, + "enableUserData": false, + "EnableTotalRecordCount": false + }) + print "data=", data + if isValid(data) and isValidAndNotEmpty(data.items) + ' add each item to the queue + pushToQueue(data.Items) + if data.items.count() > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if + end if ' else if collectionType = "homevideos" ' also used for a "Photo" library else print "Quick Play WARNING: Unknown collection type" From 080c8e87b0efd4a5ab6277bb37959dc2b8c45271 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 11:16:15 -0400 Subject: [PATCH 17/47] add musicvideo support to home screen - use wide poster, show name and year made, open using movie detail group --- components/data/HomeData.brs | 31 ++----------------------------- components/home/HomeItem.brs | 5 ++++- source/Main.brs | 4 ++++ 3 files changed, 10 insertions(+), 30 deletions(-) diff --git a/components/data/HomeData.brs b/components/data/HomeData.brs index 4266cc709..bba8aeca9 100644 --- a/components/data/HomeData.brs +++ b/components/data/HomeData.brs @@ -31,7 +31,7 @@ sub setData() m.top.iconUrl = "pkg:/images/media_type_icons/folder_white.png" end if - else if datum.type = "Episode" + else if datum.type = "Episode" or datum.type = "MusicVideo" m.top.isWatched = datum.UserData.Played imgParams = {} @@ -72,32 +72,7 @@ sub setData() m.top.widePosterUrl = ImageURL(datum.Id, "Backdrop", imgParams) end if - else if datum.type = "Movie" - m.top.isWatched = datum.UserData.Played - - imgParams = {} - imgParams.Append({ "maxHeight": 261 }) - imgParams.Append({ "maxWidth": 175 }) - - if datum.ImageTags.Primary <> invalid - param = { "Tag": datum.ImageTags.Primary } - imgParams.Append(param) - end if - - m.top.posterURL = ImageURL(datum.id, "Primary", imgParams) - - ' For wide image, use backdrop - imgParams["maxWidth"] = 464 - - if datum.ImageTags <> invalid and datum.imageTags.Thumb <> invalid - imgParams["Tag"] = datum.imageTags.Thumb - m.top.thumbnailUrl = ImageURL(datum.Id, "Thumb", imgParams) - else if datum.BackdropImageTags[0] <> invalid - imgParams["Tag"] = datum.BackdropImageTags[0] - m.top.thumbnailUrl = ImageURL(datum.id, "Backdrop", imgParams) - end if - - else if datum.type = "Video" + else if datum.type = "Movie" or datum.type = "Video" m.top.isWatched = datum.UserData.Played imgParams = {} @@ -126,12 +101,10 @@ sub setData() m.top.thumbnailURL = ImageURL(datum.id, "Primary", params) m.top.widePosterUrl = m.top.thumbnailURL m.top.posterUrl = m.top.thumbnailURL - else if datum.type = "TvChannel" or datum.type = "Channel" params = { "Tag": datum.ImageTags.Primary, "maxHeight": 261, "maxWidth": 464 } m.top.thumbnailURL = ImageURL(datum.id, "Primary", params) m.top.widePosterUrl = m.top.thumbnailURL m.top.iconUrl = "pkg:/images/media_type_icons/live_tv_white.png" end if - end sub diff --git a/components/home/HomeItem.brs b/components/home/HomeItem.brs index 8fb835290..c9d38c4b6 100644 --- a/components/home/HomeItem.brs +++ b/components/home/HomeItem.brs @@ -30,6 +30,9 @@ end sub sub itemContentChanged() itemData = m.top.itemContent if itemData = invalid then return + + print "itemData=", itemData + print "itemData.json=", itemData.json itemData.Title = itemData.name ' Temporarily required while we move from "HomeItem" to "JFContentItem" m.itemPoster.width = itemData.imageWidth @@ -135,7 +138,7 @@ sub itemContentChanged() return end if - if itemData.type = "Movie" + if itemData.type = "Movie" or itemData.type = "MusicVideo" m.itemText.text = itemData.name if itemData.PlayedPercentage > 0 diff --git a/source/Main.brs b/source/Main.brs index 4ec33899e..ff8d90284 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -290,6 +290,8 @@ sub Main (args as dynamic) as void end if else if selectedItemType = "MusicAlbum" group = CreateAlbumView(selectedItem.json) + else if selectedItemType = "MusicVideo" + group = CreateMovieDetailsGroup(selectedItem) else if selectedItemType = "Playlist" group = CreatePlaylistView(selectedItem.json) else if selectedItemType = "Audio" @@ -428,6 +430,8 @@ sub Main (args as dynamic) as void group = CreateArtistView(node.json) else if node.type = "MusicAlbum" group = CreateAlbumView(node.json) + else if node.type = "MusicVideo" + group = CreateMovieDetailsGroup(node) else if node.type = "Audio" m.global.queueManager.callFunc("clear") m.global.queueManager.callFunc("resetShuffle") From 4dcc3ad9f73c76450828177bc318c8dffaa24536 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 12:32:50 -0400 Subject: [PATCH 18/47] add quickplay support for series networks and genres --- components/ItemGrid/ItemGrid.brs | 14 +++++- source/utils/quickplay.bs | 82 +++++++++++++++++++++----------- 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/components/ItemGrid/ItemGrid.brs b/components/ItemGrid/ItemGrid.brs index 92c109156..00da31c6e 100644 --- a/components/ItemGrid/ItemGrid.brs +++ b/components/ItemGrid/ItemGrid.brs @@ -734,6 +734,16 @@ sub onChannelFocused(msg) m.channelFocused = node.focusedChannel end sub +'Returns Focused Item +function getItemFocused() + if m.itemGrid.isinFocusChain() and isValid(m.itemGrid.itemFocused) + return m.itemGrid.content.getChild(m.itemGrid.itemFocused) + else if m.genreList.isinFocusChain() and isValid(m.genreList.rowItemFocused) + return m.genreList.content.getChild(m.genreList.rowItemFocused[0]).getChild(m.genreList.rowItemFocused[1]) + end if + return invalid +end function + function onKeyEvent(key as string, press as boolean) as boolean if not press then return false @@ -782,8 +792,8 @@ function onKeyEvent(key as string, press as boolean) as boolean end if else if key = "play" markupGrid = m.top.findNode("itemGrid") - itemToPlay = markupGrid.content.getChild(markupGrid.itemFocused) - + itemToPlay = getItemFocused() + print "itemToPlay=", itemToPlay if itemToPlay <> invalid m.top.quickPlayNode = itemToPlay return true diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 7127d9c13..25a7acb42 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -192,6 +192,36 @@ namespace quickplay end if end sub + ' More than one TV Show Series. + ' Shuffle play all watched episodes + sub multipleSeries(itemNodes as object) + if isValidAndNotEmpty(itemNodes) + for each tvshow in itemNodes + ' grab all watched episodes for each series + showData = api.shows.GetEpisodes(tvshow.id, { + "userId": m.global.session.user.id, + "imageTypeLimit": 0, + "EnableTotalRecordCount": false, + "enableImages": false + }) + + if isValid(showData) and isValidAndNotEmpty(showData.items) + ' add all played episodes to queue + for each episode in showData.items + if isValid(episode.userdata) and isValid(episode.userdata.Played) + if episode.userdata.Played + m.global.queueManager.callFunc("push", episode) + end if + end if + end for + end if + end for + if m.global.queueManager.callFunc("getCount") > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if + end if + end sub + ' A TV Show Season. ' Play the first unwatched episode. ' If none, play the whole season starting with episode 1. @@ -276,7 +306,6 @@ namespace quickplay ' Shuffle play all items found sub folder(itemNode as object) if not isValid(itemNode) or not isValid(itemNode.id) then return - print "itemNode.json=", itemNode.json paramArray = { "includeItemTypes": ["Episode", "Movie", "Video"], @@ -289,6 +318,8 @@ namespace quickplay } ' modify api query based on folder type folderType = Lcase(itemNode.json.type) + + ' modify qpi query based on folder type if folderType = "studio" paramArray["studioIds"] = itemNode.id else if folderType = "genre" @@ -300,16 +331,28 @@ namespace quickplay else paramArray["parentId"] = itemNode.id end if + ' loof for tv series in stead of video files + if isValid(itemNode.json.SeriesCount) and itemNode.json.SeriesCount > 0 + paramArray["includeItemTypes"] = "Series" + paramArray.Delete("videoTypes") + end if ' get folder items folderData = api.users.GetItemsByQuery(m.global.session.user.id, paramArray) print "folderData=", folderData if isValid(folderData) and isValidAndNotEmpty(folderData.items) - pushToQueue(folderData.items) - - ' don't show shuffle icon for 1 item - if folderData.items.count() > 1 - m.global.queueManager.callFunc("toggleShuffle") + if isValid(itemNode.json.SeriesCount) and itemNode.json.SeriesCount > 0 + if itemNode.json.SeriesCount = 1 + quickplay.series(folderData.items[0]) + else + quickplay.multipleSeries(folderData.items) + end if + else + pushToQueue(folderData.items) + ' don't show shuffle icon for 1 item + if folderData.items.count() > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if end if end if end sub @@ -340,7 +383,9 @@ namespace quickplay end if end if end for - m.global.queueManager.callFunc("toggleShuffle") + if m.global.queueManager.callFunc("getCount") > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if end if else if collectionType = "music" ' get all audio files under this collection @@ -402,28 +447,7 @@ namespace quickplay print "tvshowsData=", tvshowsData if isValid(tvshowsData) and isValidAndNotEmpty(tvshowsData.items) - for each tvshow in tvshowsData.items - ' grab all watched episodes for each series - showData = api.shows.GetEpisodes(tvshow.id, { - "userId": m.global.session.user.id, - "imageTypeLimit": 0, - "EnableTotalRecordCount": false, - "enableImages": false - }) - - if isValid(showData) and isValidAndNotEmpty(showData.items) - ' add all played episodes to queue - for each episode in showData.items - if isValid(episode.userdata) and isValid(episode.userdata.Played) - if episode.userdata.Played - m.global.queueManager.callFunc("push", episode) - end if - end if - end for - - end if - end for - m.global.queueManager.callFunc("toggleShuffle") + quickplay.multipleSeries(tvshowsData.items) end if else if collectionType = "musicvideos" ' get randomized list of videos inside From 5b2b2ba881efc6eb1212b43e82f1bdb722ab84c6 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 17:06:36 -0400 Subject: [PATCH 19/47] add support for saving credentials for private users --- components/config/ConfigList.brs | 4 +- source/Main.brs | 4 -- source/ShowScenes.brs | 64 ++++++++++++++++++++++++-------- source/api/userauth.brs | 2 +- source/migrations.bs | 52 +++++++++++++++++--------- source/utils/config.brs | 37 ++++++++++++++++++ source/utils/session.bs | 10 ++++- 7 files changed, 131 insertions(+), 42 deletions(-) diff --git a/components/config/ConfigList.brs b/components/config/ConfigList.brs index f2c4f49ce..56cf87432 100644 --- a/components/config/ConfigList.brs +++ b/components/config/ConfigList.brs @@ -27,7 +27,7 @@ sub onItemSelected() i = m.top.itemSelected itemField = m.top.content.getchild(i) - show_dialog(itemField) + showDialog(itemField) end sub function onDialogButton() @@ -46,7 +46,7 @@ function onDialogButton() end function -sub show_dialog(configField) +sub showDialog(configField) dialog = createObject("roSGNode", "StandardKeyboardDialog") m.configField = configField dialog.title = configField.label diff --git a/source/Main.brs b/source/Main.brs index 83400c6e4..347f4b632 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -61,10 +61,6 @@ sub Main (args as dynamic) as void end if end if - ' migrate registry if needed - runGlobalMigrations() - runUserMigrations() - ' Save the global last run version of the app if m.global.app.version <> m.global.app.lastRunVersion ' update global LastRunVersion diff --git a/source/ShowScenes.brs b/source/ShowScenes.brs index ff80ef669..fec53fcd1 100644 --- a/source/ShowScenes.brs +++ b/source/ShowScenes.brs @@ -43,19 +43,48 @@ function LoginFlow() print "No active user found in registry" user_select: SendPerformanceBeacon("AppDialogInitiate") ' Roku Performance monitoring - Dialog Starting + publicUsers = GetPublicUsers() + savedUsers = getSavedUsers() + numPubUsers = publicUsers.count() - if numPubUsers > 0 + numSavedUsers = savedUsers.count() + + if numPubUsers > 0 or numSavedUsers > 0 publicUsersNodes = [] - for each item in publicUsers - user = CreateObject("roSGNode", "PublicUserData") - user.id = item.Id - user.name = item.Name - if isValid(item.PrimaryImageTag) - user.ImageURL = UserImageURL(user.id, { "tag": item.PrimaryImageTag }) - end if - publicUsersNodes.push(user) - end for + publicUserIds = [] + ' load public users + if numPubUsers > 0 + for each item in publicUsers + user = CreateObject("roSGNode", "PublicUserData") + user.id = item.Id + user.name = item.Name + if isValid(item.PrimaryImageTag) + user.ImageURL = UserImageURL(user.id, { "tag": item.PrimaryImageTag }) + end if + publicUsersNodes.push(user) + publicUserIds.push(user.id) + end for + end if + ' load saved users for this server id + if numSavedUsers > 0 + for each savedUser in savedUsers + if isValid(savedUser.serverId) and savedUser.serverId = m.global.session.server.id + ' only show unique userids on screen. + if not arrayHasValue(publicUserIds, savedUser.Id) + user = CreateObject("roSGNode", "PublicUserData") + user.id = savedUser.Id + + if isValid(savedUser.username) + user.name = savedUser.username + end if + + publicUsersNodes.push(user) + end if + end if + end for + end if + ' push all users to the user select view userSelected = CreateUserSelectGroup(publicUsersNodes) SendPerformanceBeacon("AppDialogComplete") ' Roku Performance monitoring - Dialog Closed @@ -89,7 +118,7 @@ function LoginFlow() unset_user_setting("username") else print "Success! Auth token is still valid" - session.user.Login(currentUser) + session.user.Login(currentUser, true) LoadUserPreferences() LoadUserAbilities() return true @@ -102,7 +131,7 @@ function LoginFlow() userData = get_token(userSelected, "") if isValid(userData) print "login success!" - session.user.Login(userData) + session.user.Login(userData, true) LoadUserPreferences() LoadUserAbilities() return true @@ -145,7 +174,7 @@ function LoginFlow() userData = get_token(userSelected, "") if isValid(userData) print "login success!" - session.user.Login(userData) + session.user.Login(userData, true) LoadUserPreferences() LoadUserAbilities() return true @@ -158,7 +187,7 @@ function LoginFlow() end if else print "Success! Auth token is still valid" - session.user.Login(currentUser) + session.user.Login(currentUser, true) end if else print "No auth token found in registry" @@ -451,11 +480,14 @@ function CreateSigninGroup(user = "") ' Validate credentials activeUser = get_token(username.value, password.value) if isValid(activeUser) - session.user.Login(activeUser) - ' save credentials + print "activeUser=", activeUser if checkbox.checkedState[0] = true + ' save credentials + session.user.Login(activeUser, true) set_user_setting("token", activeUser.token) set_user_setting("username", username.value) + else + session.user.Login(activeUser) end if return "true" end if diff --git a/source/api/userauth.brs b/source/api/userauth.brs index ce00984b9..3c6970472 100644 --- a/source/api/userauth.brs +++ b/source/api/userauth.brs @@ -32,7 +32,7 @@ function AboutMe(id = "" as string) end function sub SignOut(deleteSavedEntry = true as boolean) - if m.global.session.user.id <> invalid and deleteSavedEntry = true + if deleteSavedEntry = true unset_user_setting("token") unset_user_setting("username") end if diff --git a/source/migrations.bs b/source/migrations.bs index f73dbbbe0..389ee214c 100644 --- a/source/migrations.bs +++ b/source/migrations.bs @@ -1,3 +1,5 @@ +import "pkg:/source/utils/misc.brs" + ' Functions that update the registry based on the last run version and the currently running version ' Run all necessary registry mirations on the "global" Jellyfin registry section @@ -8,6 +10,21 @@ sub runGlobalMigrations() print "Running 1.7.0 global registry migrations" ' no longer saving raw password to registry ' auth token and username are now stored in user settings and not global settings + + savedUserId = get_setting("active_user") + if isValid(savedUserId) + registry_write("serverId", m.global.session.server.id, savedUserId) + ' copy saved credentials to user block + savedUsername = get_setting("username") + if isValid(savedUsername) + registry_write("username", savedUsername, savedUserId) + end if + + savedToken = get_setting("token") + if isValid(savedToken) + registry_write("token", savedToken, savedUserId) + end if + end if unset_setting("port") unset_setting("token") unset_setting("username") @@ -26,24 +43,25 @@ sub runGlobalMigrations() set_setting("saved_servers", FormatJson(newServers)) end if end if - ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations - ' duplicate LastRunVersion to all user settings in the registry so that we can run user specific migrations - regSections = getRegistrySections() - for each section in regSections - if section <> "Jellyfin" - registry_write("LastRunVersion", m.global.app.version, section) - end if - end for + end if + if m.global.app.lastRunVersion <> invalid + runRegistryUserMigrations(m.global.app.lastRunVersion) end if end sub -' Run all necessary registry mirations on the user specific registry section -sub runUserMigrations() - ' User registry migrations - if m.global.session.user.lastRunVersion <> invalid and not versionChecker(m.global.session.user.lastRunVersion, "1.7.0") - ' last run version was less than 1.7.0 - print "Running 1.7.0 user registry migrations" - ' no longer saving password to registry - unset_user_setting("password") - end if +sub runRegistryUserMigrations(version as string) + regSections = getRegistrySections() + for each section in regSections + if section <> "Jellyfin" + if version = "1.7.0" + print "Running User Registry Migration for 1.7.0" + ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations + ' duplicate LastRunVersion to all user settings in the registry so that we can run user specific migrations + ' + ' no longer saving password to registry + registry_write("LastRunVersion", m.global.app.version, section) + registry_delete("password", section) + end if + end if + end for end sub diff --git a/source/utils/config.brs b/source/utils/config.brs index 5827e4b9c..879e2aa55 100644 --- a/source/utils/config.brs +++ b/source/utils/config.brs @@ -100,3 +100,40 @@ function findConfigTreeKey(key as string, tree) return invalid end function + +' Returns an array of saved users from the registry +' that belong to the active server +function getSavedUsers() as object + registrySections = getRegistrySections() + + savedUsers = [] + for each section in registrySections + if section <> "Jellyfin" + savedUsers.push(section) + end if + end for + + savedServerUsers = [] + for each userId in savedUsers + userArray = { + id: userId + } + token = registry_read("token", userId) + + username = registry_read("username", userId) + if username <> invalid + userArray["username"] = username + end if + + serverId = registry_read("serverId", userId) + if serverId <> invalid + userArray["serverId"] = serverId + end if + + if username <> invalid and token <> invalid and serverId <> invalid and serverId = m.global.session.server.id + savedServerUsers.push(userArray) + end if + end for + + return savedServerUsers +end function diff --git a/source/utils/session.bs b/source/utils/session.bs index 8cbd69194..47850afd8 100644 --- a/source/utils/session.bs +++ b/source/utils/session.bs @@ -1,6 +1,7 @@ ' these are needed for ServerInfo() inside session.server.Populate() import "pkg:/source/api/userauth.brs" import "pkg:/source/api/baserequest.brs" +import "pkg:/source/migrations.bs" namespace session ' Initialize the global session array @@ -71,6 +72,9 @@ namespace session session.server.Delete() end if + ' migrate registry if needed + runGlobalMigrations() + return success end function @@ -122,7 +126,7 @@ namespace session ' Update the global session after user is authenticated. ' Accepts a UserData.xml object from get_token() or an assocArray from AboutMe() - sub Login(userData as object) + sub Login(userData as object, saveCredentials = false as boolean) ' validate parameters if userData = invalid or userData.id = invalid then return ' make copy of global user session array @@ -163,7 +167,9 @@ namespace session print "m.global.session.user.settings = ", m.global.session.user.settings end if - if m.global.session.user.settings["global.rememberme"] + set_user_setting("serverId", m.global.session.server.id) + + if saveCredentials set_user_setting("token", tmpSession.user.authToken) set_user_setting("username", tmpSession.user.name) end if From e4f05105f5072387be2199f24085cee154777190 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 17:48:46 -0400 Subject: [PATCH 20/47] Fix episode list regression + limit all queries to 2000 items --- components/tvshows/TVEpisodes.xml | 2 +- source/Main.brs | 5 +++-- source/utils/quickplay.bs | 33 +++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/components/tvshows/TVEpisodes.xml b/components/tvshows/TVEpisodes.xml index 004c07fb9..9ebfe6ad8 100644 --- a/components/tvshows/TVEpisodes.xml +++ b/components/tvshows/TVEpisodes.xml @@ -11,7 +11,7 @@ - + diff --git a/source/Main.brs b/source/Main.brs index ff8d90284..b84e057ed 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -127,8 +127,9 @@ sub Main (args as dynamic) as void if isValid(reportingNode) itemNode = reportingNode.quickPlayNode reportingNodeType = reportingNode.subtype() - ' prevent double fire on continue watching home row - if isValid(reportingNodeType) and reportingNodeType = "Home" + print "Quick Play reporting node type=", reportingNodeType + ' prevent double fire bug + if isValid(reportingNodeType) and (reportingNodeType = "Home" or reportingNodeType = "TVEpisodes") reportingNode.quickPlayNode = invalid end if end if diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 25a7acb42..4b18fd5ce 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -78,6 +78,7 @@ namespace quickplay "parentId": itemNode.id, "imageTypeLimit": 1, "sortBy": "SortName", + "limit": 2000, "enableUserData": false, "EnableTotalRecordCount": false }) @@ -99,6 +100,7 @@ namespace quickplay "artistIds": itemNode.id, "includeItemTypes": "Audio", "sortBy": "Album", + "limit": 2000, "imageTypeLimit": 1, "Recursive": true, "enableUserData": false, @@ -124,6 +126,7 @@ namespace quickplay data = api.items.GetByQuery({ "userid": m.global.session.user.id, "parentid": itemNode.id, + "limit": 2000, "EnableTotalRecordCount": false }) if isValid(data) and isValidAndNotEmpty(data.Items) @@ -181,6 +184,7 @@ namespace quickplay data = api.shows.GetEpisodes(itemNode.id, { "userid": m.global.session.user.id, "SortBy": "Random", + "limit": 2000, "EnableTotalRecordCount": false }) @@ -196,10 +200,13 @@ namespace quickplay ' Shuffle play all watched episodes sub multipleSeries(itemNodes as object) if isValidAndNotEmpty(itemNodes) + numTotal = 0 + numLimit = 2000 for each tvshow in itemNodes ' grab all watched episodes for each series showData = api.shows.GetEpisodes(tvshow.id, { "userId": m.global.session.user.id, + "SortBy": "Random", "imageTypeLimit": 0, "EnableTotalRecordCount": false, "enableImages": false @@ -214,6 +221,13 @@ namespace quickplay end if end if end for + + ' keep track of how many items we've seen + numTotal = numTotal + showData.items.count() + if numTotal >= numLimit + ' stop grabbing more items if we hit our limit + exit for + end if end if end for if m.global.queueManager.callFunc("getCount") > 1 @@ -231,6 +245,7 @@ namespace quickplay unwatchedData = api.shows.GetEpisodes(itemNode.json.SeriesId, { "seasonId": itemNode.id, "userid": m.global.session.user.id, + "limit": 2000, "EnableTotalRecordCount": false }) @@ -292,7 +307,8 @@ namespace quickplay if not isValid(itemNode) or not isValid(itemNode.id) then return ' get playlist items myPlaylist = api.playlists.GetItems(itemNode.id, { - "userId": m.global.session.user.id + "userId": m.global.session.user.id, + "limit": 2000 }) if isValid(myPlaylist) and isValidAndNotEmpty(myPlaylist.Items) @@ -311,6 +327,7 @@ namespace quickplay "includeItemTypes": ["Episode", "Movie", "Video"], "videoTypes": "VideoFile", "sortBy": "Random", + "limit": 2000, "imageTypeLimit": 1, "Recursive": true, "enableUserData": false, @@ -318,8 +335,6 @@ namespace quickplay } ' modify api query based on folder type folderType = Lcase(itemNode.json.type) - - ' modify qpi query based on folder type if folderType = "studio" paramArray["studioIds"] = itemNode.id else if folderType = "genre" @@ -331,7 +346,7 @@ namespace quickplay else paramArray["parentId"] = itemNode.id end if - ' loof for tv series in stead of video files + ' look for tv series instead of video files if isValid(itemNode.json.SeriesCount) and itemNode.json.SeriesCount > 0 paramArray["includeItemTypes"] = "Series" paramArray.Delete("videoTypes") @@ -370,7 +385,8 @@ namespace quickplay if collectionType = "movies" ' get randomized list of movies inside data = api.users.GetItemsByQuery(m.global.session.user.id, { - "parentId": itemNode.id + "parentId": itemNode.id, + "limit": 2000 }) if isValid(data) and isValidAndNotEmpty(data.items) @@ -395,6 +411,7 @@ namespace quickplay "includeItemTypes": "Audio", "sortBy": "Album", "Recursive": true, + "limit": 2000, "imageTypeLimit": 1, "enableUserData": false, "EnableTotalRecordCount": false @@ -410,6 +427,7 @@ namespace quickplay ' get list of all boxsets inside boxsetData = api.users.GetItemsByQuery(m.global.session.user.id, { "parentId": itemNode.id, + "limit": 2000, "imageTypeLimit": 0, "enableUserData": false, "EnableTotalRecordCount": false, @@ -438,6 +456,7 @@ namespace quickplay ' get list of tv shows inside tvshowsData = api.users.GetItemsByQuery(m.global.session.user.id, { "parentId": itemNode.id, + "sortBy": "Random", "imageTypeLimit": 0, "enableUserData": false, "EnableTotalRecordCount": false, @@ -456,6 +475,7 @@ namespace quickplay "includeItemTypes": "MusicVideo", "sortBy": "Random", "Recursive": true, + "limit": 2000, "imageTypeLimit": 1, "enableUserData": false, "EnableTotalRecordCount": false @@ -501,7 +521,8 @@ namespace quickplay print "myPlaylist=", myPlaylist playlistItems = api.playlists.GetItems(myPlaylist.id, { "userId": m.global.session.user.id, - "EnableTotalRecordCount": false + "EnableTotalRecordCount": false, + "limit": 2000 }) ' validate api results if isValid(playlistItems) and isValidAndNotEmpty(playlistItems.items) From e528fcd54cfd607f335d2a4b09bced8788d65c84 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 18:33:00 -0400 Subject: [PATCH 21/47] add quickplay support for type "Person" --- source/Main.brs | 2 ++ source/utils/quickplay.bs | 46 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/source/Main.brs b/source/Main.brs index b84e057ed..246730902 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -182,6 +182,8 @@ sub Main (args as dynamic) as void quickplay.folder(itemNode) else if itemType = "musicvideo" quickplay.musicVideo(itemNode) + else if itemType = "person" + quickplay.person(itemNode) end if m.global.queueManager.callFunc("playQueue") diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 4b18fd5ce..405f4a1e4 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -300,6 +300,46 @@ namespace quickplay end if end sub + ' Quick Play A Person. + ' Shuffle play all videos found + sub person(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + ' get movies and videos by the person + personMovies = api.users.GetItemsByQuery(m.global.session.user.id, { + "personIds": itemNode.id, + "includeItemTypes": "Movie,Video", + "excludeItemTypes": "Season,Series", + "recursive": true, + "limit": 2000 + }) + print "personMovies=", personMovies + + if isValid(personMovies) and isValidAndNotEmpty(personMovies.Items) + ' add each item to the queue + pushToQueue(personMovies.Items) + end if + + ' get watched episodes by the person + personEpisodes = api.users.GetItemsByQuery(m.global.session.user.id, { + "personIds": itemNode.id, + "includeItemTypes": "Episode", + "isPlayed": true, + "excludeItemTypes": "Season,Series", + "recursive": true, + "limit": 2000 + }) + print "personEpisodes=", personEpisodes + + if isValid(personEpisodes) and isValidAndNotEmpty(personEpisodes.Items) + ' add each item to the queue + pushToQueue(personEpisodes.Items) + end if + + if m.global.queueManager.callFunc("getCount") > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if + end sub + ' Quick Play A Playlist. ' Play the first unwatched episode. ' If none, play the whole season starting with episode 1. @@ -314,7 +354,9 @@ namespace quickplay if isValid(myPlaylist) and isValidAndNotEmpty(myPlaylist.Items) ' add each item to the queue pushToQueue(myPlaylist.Items) - m.global.queueManager.callFunc("toggleShuffle") + if m.global.queueManager.callFunc("getCount") > 1 + m.global.queueManager.callFunc("toggleShuffle") + end if end if end sub @@ -404,7 +446,7 @@ namespace quickplay end if end if else if collectionType = "music" - ' get all audio files under this collection + ' get audio files from under this collection ' sort songs by album then artist songsData = api.users.GetItemsByQuery(m.global.session.user.id, { "parentId": itemNode.id, From ee4c8a28b3fea3737f1b880a3980552c67dce594 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 19:02:53 -0400 Subject: [PATCH 22/47] remove quickplay memory check. small refactor to use pushToQueue() function --- source/utils/quickplay.bs | 110 ++++++++++++-------------------------- 1 file changed, 34 insertions(+), 76 deletions(-) diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 405f4a1e4..2b74c12fb 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -2,30 +2,16 @@ namespace quickplay ' Takes an array of items and adds to global queue. - ' Stop loading items if memory level becomes low - sub pushToQueue(queueArray as object, limitValue = 200 as integer) + ' Also shuffles the playlist if asked + sub pushToQueue(queueArray as object, shufflePlay = false as boolean) if isValidAndNotEmpty(queueArray) - itemCount = queueArray.count() - if limitValue >= itemCount - ' load everything - for each item in queueArray - m.global.queueManager.callFunc("push", item) - end for - else - newLimit = limitValue - for i = 0 to itemCount - 1 - m.global.queueManager.callFunc("push", queueArray[i]) - - if i = newLimit - ' hit the item limit. check memory level - newLimit = newLimit + limitValue - print "m.global.session.memoryLevel=", m.global.session.memoryLevel - if m.global.session.memoryLevel = "low" or m.global.session.memoryLevel = "critical" - print "Memory is low. Stop loading items in the playlist..." - exit for - end if - end if - end for + ' load everything + for each item in queueArray + m.global.queueManager.callFunc("push", item) + end for + ' shuffle the playlist if asked + if shufflePlay and m.global.queueManager.callFunc("getCount") > 1 + m.global.queueManager.callFunc("toggleShuffle") end if end if end sub @@ -83,10 +69,7 @@ namespace quickplay "EnableTotalRecordCount": false }) if isValid(albumSongs) and isValidAndNotEmpty(albumSongs.items) - ' add every song to the queue - for each song in albumSongs.items - m.global.queueManager.callFunc("push", song) - end for + quickplay.pushToQueue(albumSongs.items) end if end sub @@ -109,17 +92,12 @@ namespace quickplay print "artistSongs=", artistSongs if isValid(artistSongs) and isValidAndNotEmpty(artistSongs.items) - pushToQueue(artistSongs.items) - - ' don't show shuffle icon for 1 song - if artistSongs.items.count() > 1 - m.global.queueManager.callFunc("toggleShuffle") - end if + quickplay.pushToQueue(artistSongs.items, true) end if end sub ' A boxset. - ' Shuffle play all items inside. + ' Play all items inside. sub boxset(itemNode as object) if not isValid(itemNode) or not isValid(itemNode.id) then return @@ -130,8 +108,7 @@ namespace quickplay "EnableTotalRecordCount": false }) if isValid(data) and isValidAndNotEmpty(data.Items) - ' there are videos inside - pushToQueue(data.items) + quickplay.pushToQueue(data.items) end if end sub @@ -155,9 +132,7 @@ namespace quickplay if isValid(data) and isValidAndNotEmpty(data.Items) ' there are unwatched episodes - for each item in data.Items - m.global.queueManager.callFunc("push", item) - end for + m.global.queueManager.callFunc("push", data.Items[0]) else ' next up check was empty ' check for a resumable episode @@ -173,12 +148,10 @@ namespace quickplay print "resumeitems data=", data if isValid(data) and isValidAndNotEmpty(data.Items) ' play the resumable episode - for each item in data.Items - if isValid(item.UserData) and isValid(item.UserData.PlaybackPositionTicks) - item.startingPoint = item.userdata.PlaybackPositionTicks - end if - m.global.queueManager.callFunc("push", item) - end for + if isValid(data.Items[0].UserData) and isValid(data.Items[0].UserData.PlaybackPositionTicks) + data.Items[0].startingPoint = data.Items[0].userdata.PlaybackPositionTicks + end if + m.global.queueManager.callFunc("push", data.Items[0]) else ' shuffle all episodes data = api.shows.GetEpisodes(itemNode.id, { @@ -190,7 +163,7 @@ namespace quickplay if isValid(data) and isValidAndNotEmpty(data.Items) ' add all episodes found to a playlist - pushToQueue(data.Items) + quickplay.pushToQueue(data.Items) end if end if end if @@ -213,14 +186,16 @@ namespace quickplay }) if isValid(showData) and isValidAndNotEmpty(showData.items) + playedEpisodes = [] ' add all played episodes to queue for each episode in showData.items if isValid(episode.userdata) and isValid(episode.userdata.Played) if episode.userdata.Played - m.global.queueManager.callFunc("push", episode) + playedEpisodes.push(episode) end if end if end for + quickplay.pushToQueue(playedEpisodes) ' keep track of how many items we've seen numTotal = numTotal + showData.items.count() @@ -316,7 +291,7 @@ namespace quickplay if isValid(personMovies) and isValidAndNotEmpty(personMovies.Items) ' add each item to the queue - pushToQueue(personMovies.Items) + quickplay.pushToQueue(personMovies.Items) end if ' get watched episodes by the person @@ -332,7 +307,7 @@ namespace quickplay if isValid(personEpisodes) and isValidAndNotEmpty(personEpisodes.Items) ' add each item to the queue - pushToQueue(personEpisodes.Items) + quickplay.pushToQueue(personEpisodes.Items) end if if m.global.queueManager.callFunc("getCount") > 1 @@ -353,7 +328,7 @@ namespace quickplay if isValid(myPlaylist) and isValidAndNotEmpty(myPlaylist.Items) ' add each item to the queue - pushToQueue(myPlaylist.Items) + quickplay.pushToQueue(myPlaylist.Items) if m.global.queueManager.callFunc("getCount") > 1 m.global.queueManager.callFunc("toggleShuffle") end if @@ -405,11 +380,7 @@ namespace quickplay quickplay.multipleSeries(folderData.items) end if else - pushToQueue(folderData.items) - ' don't show shuffle icon for 1 item - if folderData.items.count() > 1 - m.global.queueManager.callFunc("toggleShuffle") - end if + quickplay.pushToQueue(folderData.items, true) end if end if end sub @@ -428,22 +399,22 @@ namespace quickplay ' get randomized list of movies inside data = api.users.GetItemsByQuery(m.global.session.user.id, { "parentId": itemNode.id, + "sortBy": "Random", "limit": 2000 }) if isValid(data) and isValidAndNotEmpty(data.items) + movieList = [] ' add each item to the queue for each item in data.Items ' only add movies we're not currently watching if isValid(item.userdata) and isValid(item.userdata.PlaybackPositionTicks) if item.userdata.PlaybackPositionTicks = 0 - m.global.queueManager.callFunc("push", item) + movieList.push(item) end if end if end for - if m.global.queueManager.callFunc("getCount") > 1 - m.global.queueManager.callFunc("toggleShuffle") - end if + quickplay.pushToQueue(movieList) end if else if collectionType = "music" ' get audio files from under this collection @@ -460,10 +431,7 @@ namespace quickplay }) print "songsData=", songsData if isValid(songsData) and isValidAndNotEmpty(songsData.items) - pushToQueue(songsData.Items) - if songsData.Items.count() > 1 - m.global.queueManager.callFunc("toggleShuffle") - end if + quickplay.pushToQueue(songsData.Items, true) end if else if collectionType = "boxsets" ' get list of all boxsets inside @@ -491,7 +459,7 @@ namespace quickplay if isValid(boxsetData) and isValidAndNotEmpty(boxsetData.items) ' add all boxset items to queue - pushToQueue(boxsetData.Items) + quickplay.pushToQueue(boxsetData.Items) end if end if else if collectionType = "tvshows" @@ -524,11 +492,7 @@ namespace quickplay }) print "data=", data if isValid(data) and isValidAndNotEmpty(data.items) - ' add each item to the queue - pushToQueue(data.Items) - if data.items.count() > 1 - m.global.queueManager.callFunc("toggleShuffle") - end if + quickplay.pushToQueue(data.Items) end if ' else if collectionType = "homevideos" ' also used for a "Photo" library else @@ -568,13 +532,7 @@ namespace quickplay }) ' validate api results if isValid(playlistItems) and isValidAndNotEmpty(playlistItems.items) - for each item in playlistItems.items - m.global.queueManager.callFunc("push", item) - end for - ' don't show shuffle icon for 1 item - if playlistItems.items.count() > 1 - m.global.queueManager.callFunc("toggleShuffle") - end if + quickplay.pushToQueue(playlistItems.items, true) end if end if else From 1102f09b9bcb6beff79ad38f3b4203020cb85da6 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 19:28:52 -0400 Subject: [PATCH 23/47] remove debugging --- components/home/HomeItem.brs | 2 -- 1 file changed, 2 deletions(-) diff --git a/components/home/HomeItem.brs b/components/home/HomeItem.brs index c9d38c4b6..29c2f1342 100644 --- a/components/home/HomeItem.brs +++ b/components/home/HomeItem.brs @@ -31,8 +31,6 @@ sub itemContentChanged() itemData = m.top.itemContent if itemData = invalid then return - print "itemData=", itemData - print "itemData.json=", itemData.json itemData.Title = itemData.name ' Temporarily required while we move from "HomeItem" to "JFContentItem" m.itemPoster.width = itemData.imageWidth From 6c664ca1195858ce66690f467ff3025b958d44a9 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 23 Sep 2023 21:31:01 -0400 Subject: [PATCH 24/47] add livetv quickplay support --- components/ItemGrid/ItemGrid.brs | 5 ++++- source/Main.brs | 5 +++++ source/utils/quickplay.bs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/components/ItemGrid/ItemGrid.brs b/components/ItemGrid/ItemGrid.brs index 00da31c6e..24fa01951 100644 --- a/components/ItemGrid/ItemGrid.brs +++ b/components/ItemGrid/ItemGrid.brs @@ -717,6 +717,7 @@ sub showTVGuide() m.tvGuide.filter = m.filter m.tvGuide.searchTerm = m.voiceBox.text m.top.appendChild(m.tvGuide) + m.scheduleGrid = m.top.findNode("scheduleGrid") m.tvGuide.lastFocus.setFocus(true) end sub @@ -740,6 +741,8 @@ function getItemFocused() return m.itemGrid.content.getChild(m.itemGrid.itemFocused) else if m.genreList.isinFocusChain() and isValid(m.genreList.rowItemFocused) return m.genreList.content.getChild(m.genreList.rowItemFocused[0]).getChild(m.genreList.rowItemFocused[1]) + else if m.scheduleGrid.isinFocusChain() and isValid(m.scheduleGrid.itemFocused) + return m.scheduleGrid.content.getChild(m.scheduleGrid.itemFocused) end if return invalid end function @@ -793,7 +796,7 @@ function onKeyEvent(key as string, press as boolean) as boolean else if key = "play" markupGrid = m.top.findNode("itemGrid") itemToPlay = getItemFocused() - print "itemToPlay=", itemToPlay + if itemToPlay <> invalid m.top.quickPlayNode = itemToPlay return true diff --git a/source/Main.brs b/source/Main.brs index 246730902..43787084c 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -134,6 +134,9 @@ sub Main (args as dynamic) as void end if end if print "Quick Play started. itemNode=", itemNode + ' if itemNode.json <> invalid + ' print "itemNode.json=", itemNode.json + ' end if if isValid(itemNode) and isValid(itemNode.id) and itemNode.id <> "" ' make sure there is a type and convert type to lowercase itemType = invalid @@ -184,6 +187,8 @@ sub Main (args as dynamic) as void quickplay.musicVideo(itemNode) else if itemType = "person" quickplay.person(itemNode) + else if itemType = "tvchannel" + quickplay.tvChannel(itemNode) end if m.global.queueManager.callFunc("playQueue") diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 2b74c12fb..cda03d899 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -315,6 +315,15 @@ namespace quickplay end if end sub + ' Quick Play A TVChannel + sub tvChannel(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.id) then return + + stopLoadingSpinner() + group = CreateVideoPlayerGroup(itemNode.id) + m.global.sceneManager.callFunc("pushScene", group) + end sub + ' Quick Play A Playlist. ' Play the first unwatched episode. ' If none, play the whole season starting with episode 1. @@ -535,6 +544,27 @@ namespace quickplay quickplay.pushToQueue(playlistItems.items, true) end if end if + else if collectionType = "livetv" + ' get list of all tv channels + channelData = api.users.GetItemsByQuery(m.global.session.user.id, { + "includeItemTypes": "TVChannel", + "sortBy": "Random", + "Recursive": true, + "imageTypeLimit": 0, + "enableUserData": false, + "EnableTotalRecordCount": false, + "enableImages": false + }) + print "channelData=", channelData + + if isValid(channelData) and isValidAndNotEmpty(channelData.items) + ' pick a random channel + arrayIndex = Rnd(channelData.items.count()) - 1 + myChannel = channelData.items[arrayIndex] + print "myChannel=", myChannel + ' play channel + quickplay.tvChannel(myChannel) + end if else print "Quick Play CollectionFolder WARNING: Unknown collection type" end if From 5e761ddd71f1267dc927c31727415c5883a5d5bf Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Sat, 30 Sep 2023 14:31:32 -0400 Subject: [PATCH 25/47] remove playback.av1 setting on user migration --- source/migrations.bs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/migrations.bs b/source/migrations.bs index 389ee214c..8f51286ef 100644 --- a/source/migrations.bs +++ b/source/migrations.bs @@ -58,9 +58,12 @@ sub runRegistryUserMigrations(version as string) ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations ' duplicate LastRunVersion to all user settings in the registry so that we can run user specific migrations ' - ' no longer saving password to registry + ' now saving LastRunVersion per user in addition to globally registry_write("LastRunVersion", m.global.app.version, section) + ' no longer saving password to registry registry_delete("password", section) + ' av1 playback no longer hidden behind user setting + registry_delete("playback.av1", section) end if end if end for From 31bbc56db7d265d22f0c71421446ff328fcc3dc7 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 19 Oct 2023 22:13:11 -0400 Subject: [PATCH 26/47] address reviewer feedback --- source/api/userauth.brs | 2 +- source/migrations.bs | 2 +- source/utils/config.brs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/api/userauth.brs b/source/api/userauth.brs index 3c6970472..0745f4d4f 100644 --- a/source/api/userauth.brs +++ b/source/api/userauth.brs @@ -32,7 +32,7 @@ function AboutMe(id = "" as string) end function sub SignOut(deleteSavedEntry = true as boolean) - if deleteSavedEntry = true + if deleteSavedEntry unset_user_setting("token") unset_user_setting("username") end if diff --git a/source/migrations.bs b/source/migrations.bs index 8f51286ef..3f6359ea8 100644 --- a/source/migrations.bs +++ b/source/migrations.bs @@ -52,7 +52,7 @@ end sub sub runRegistryUserMigrations(version as string) regSections = getRegistrySections() for each section in regSections - if section <> "Jellyfin" + if LCase(section) <> "jellyfin" if version = "1.7.0" print "Running User Registry Migration for 1.7.0" ' now saving LastRunVersion globally and per user so that we can run user specific registry migrations diff --git a/source/utils/config.brs b/source/utils/config.brs index 879e2aa55..cde04fbe6 100644 --- a/source/utils/config.brs +++ b/source/utils/config.brs @@ -37,7 +37,7 @@ function RegistryReadAll(section as string) as dynamic registryData = {} for each item in regKeyList ' ignore session related tokens - if item <> "token" and item <> "username" and item <> "password" and item <> "LastRunVersion" + if item <> "token" and item <> "username" and item <> "password" and LCase(item) <> "lastrunversion" if registry.Exists(item) registryData.AddReplace(item, registry.Read(item)) end if @@ -108,7 +108,7 @@ function getSavedUsers() as object savedUsers = [] for each section in registrySections - if section <> "Jellyfin" + if LCase(section) <> "jellyfin" savedUsers.push(section) end if end for From 7f4462c44c89dec7f879a17856aac6ff03419edb Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 19 Oct 2023 22:22:57 -0400 Subject: [PATCH 27/47] fixed movie genre quickplay (by 1hitsong) --- source/utils/quickplay.bs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index cda03d899..910329f7d 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -365,6 +365,9 @@ namespace quickplay paramArray["studioIds"] = itemNode.id else if folderType = "genre" paramArray["genreIds"] = itemNode.id + if isValid(itemNode.json.MovieCount) and itemNode.json.MovieCount > 0 + paramArray["includeItemTypes"] = "Movie" + end if else if folderType = "musicgenre" paramArray["genreIds"] = itemNode.id paramArray.delete("videoTypes") From ee436bfe8c1cf1f4548d5b194b13bf824818dfc7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:54:15 +0000 Subject: [PATCH 28/47] Update dependency rooibos-roku to v5.8.0 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2cb7f1ba7..568b2c763 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "rimraf": "5.0.5", "roku-deploy": "3.10.3", "roku-log-bsc-plugin": "0.8.1", - "rooibos-roku": "5.7.0", + "rooibos-roku": "5.8.0", "ropm": "0.10.18", "spellchecker-cli": "6.1.1", "undent": "0.1.0" @@ -5118,9 +5118,9 @@ "dev": true }, "node_modules/rooibos-roku": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/rooibos-roku/-/rooibos-roku-5.7.0.tgz", - "integrity": "sha512-rkEAaowZeuLbwvtBcRZ1r5ber2yeBRqjxcwya9kfYQmDJ+m2XP8pGO9j10C0eW9hx6H7ZZl+5z1oHjnjwQsmBQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/rooibos-roku/-/rooibos-roku-5.8.0.tgz", + "integrity": "sha512-mPAszwOH1VdxMgSaoXQ/CgpAZ3RQ0A+d3BoxyY8axMsYS5kPO/8dL8fa7iFTGEZYA7803Ur52zlyN8GXqV5nLg==", "dev": true, "dependencies": { "source-map": "^0.7.3", diff --git a/package.json b/package.json index 00c5e543a..1170103a9 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "rimraf": "5.0.5", "roku-deploy": "3.10.3", "roku-log-bsc-plugin": "0.8.1", - "rooibos-roku": "5.7.0", + "rooibos-roku": "5.8.0", "ropm": "0.10.18", "spellchecker-cli": "6.1.1", "undent": "0.1.0" From 161375311eddc887f73df6e4a28af78a7947e67b Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 26 Oct 2023 23:00:28 -0400 Subject: [PATCH 29/47] use proper file path instead of glob --- .github/workflows/deploy-api-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-api-docs.yml b/.github/workflows/deploy-api-docs.yml index 03b37e800..fcd95788c 100644 --- a/.github/workflows/deploy-api-docs.yml +++ b/.github/workflows/deploy-api-docs.yml @@ -36,7 +36,7 @@ jobs: uses: actions/upload-pages-artifact@v2 with: # Only upload the api docs folder - path: "docs/api/*" + path: "docs/api" - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v2 From 5c2ab5e8c1a0d234ae8ce50dcdd62765e555ac00 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Thu, 26 Oct 2023 23:28:13 -0400 Subject: [PATCH 30/47] only deploy gh-pages if something in the docs folder changes --- .github/workflows/deploy-api-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-api-docs.yml b/.github/workflows/deploy-api-docs.yml index fcd95788c..9dc4c3618 100644 --- a/.github/workflows/deploy-api-docs.yml +++ b/.github/workflows/deploy-api-docs.yml @@ -2,9 +2,9 @@ name: deploy-api-docs on: - # Runs on pushes targeting the default branch push: branches: ["unstable"] + paths: ["docs/**"] # only run if the docs are updated # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From dff9a69d0acd9916d68f523e86e547d047fc2e56 Mon Sep 17 00:00:00 2001 From: cewert Date: Fri, 27 Oct 2023 12:27:26 +0000 Subject: [PATCH 31/47] Update API docs --- docs/api/components_ButtonGroupHoriz.brs.html | 2 +- .../api/components_Buttons_JFButtons.brs.html | 2 +- .../components_Buttons_TextSizeTask.brs.html | 2 +- .../components_GetNextEpisodeTask.brs.html | 2 +- .../components_GetPlaybackInfoTask.brs.html | 2 +- ...components_GetShuffleEpisodesTask.brs.html | 2 +- docs/api/components_IconButton.brs.html | 2 +- docs/api/components_ItemGrid_Alpha.brs.html | 2 +- ...onents_ItemGrid_FavoriteItemsTask.brs.html | 2 +- .../api/components_ItemGrid_GridItem.brs.html | 2 +- ...components_ItemGrid_GridItemSmall.brs.html | 2 +- .../api/components_ItemGrid_ItemGrid.brs.html | 2 +- ...mponents_ItemGrid_ItemGridOptions.brs.html | 2 +- ...omponents_ItemGrid_LoadItemsTask2.brs.html | 2 +- ...nts_ItemGrid_LoadVideoContentTask.brs.html | 2 +- ...ponents_ItemGrid_MovieLibraryView.brs.html | 2 +- ...ents_ItemGrid_MusicArtistGridItem.brs.html | 2 +- ...ponents_ItemGrid_MusicLibraryView.brs.html | 2 +- docs/api/components_JFButton.brs.html | 2 +- docs/api/components_JFGroup.brs.html | 2 +- docs/api/components_JFMessageDialog.brs.html | 2 +- docs/api/components_JFOverhang.brs.html | 2 +- docs/api/components_JFScene.brs.html | 2 +- docs/api/components_JFScreen.brs.html | 2 +- docs/api/components_JFVideo.brs.html | 2 +- docs/api/components_ListPoster.brs.html | 2 +- docs/api/components_OverviewDialog.bs.html | 2 +- docs/api/components_PersonDetails.brs.html | 2 +- docs/api/components_PlaybackDialog.brs.html | 2 +- docs/api/components_PlayedCheckmark.brs.html | 2 +- docs/api/components_PlaystateTask.brs.html | 2 +- docs/api/components_RadioDialog.brs.html | 2 +- docs/api/components_SearchBox.brs.html | 2 +- docs/api/components_Spinner.brs.html | 2 +- docs/api/components_StandardDialog.brs.html | 2 +- docs/api/components_WhatsNewDialog.brs.html | 2 +- docs/api/components_captionTask.brs.html | 2 +- .../api/components_config_ConfigData.brs.html | 2 +- .../api/components_config_ConfigItem.brs.html | 2 +- .../api/components_config_ConfigList.brs.html | 2 +- docs/api/components_config_JFServer.brs.html | 2 +- .../api/components_config_LoginScene.brs.html | 2 +- ...onents_config_ServerDiscoveryTask.brs.html | 2 +- ...components_config_SetServerScreen.brs.html | 2 +- docs/api/components_data_AlbumData.brs.html | 2 +- docs/api/components_data_ChannelData.brs.html | 2 +- .../components_data_CollectionData.brs.html | 2 +- docs/api/components_data_FolderData.brs.html | 2 +- .../components_data_GetFiltersTask.brs.html | 2 +- docs/api/components_data_HomeData.brs.html | 2 +- docs/api/components_data_ImageData.brs.html | 2 +- docs/api/components_data_MovieData.brs.html | 2 +- .../components_data_MusicAlbumData.brs.html | 2 +- ...nents_data_MusicAlbumSongListData.brs.html | 2 +- .../components_data_MusicArtistData.brs.html | 2 +- .../components_data_MusicSongData.brs.html | 2 +- .../components_data_OptionsButton.brs.html | 2 +- docs/api/components_data_OptionsData.brs.html | 2 +- docs/api/components_data_PersonData.brs.html | 2 +- docs/api/components_data_PhotoData.brs.html | 2 +- .../api/components_data_PlaylistData.brs.html | 2 +- .../components_data_PublicUserData.brs.html | 2 +- .../api/components_data_SceneManager.brs.html | 2 +- ...mponents_data_ScheduleProgramData.brs.html | 2 +- docs/api/components_data_SearchData.brs.html | 2 +- docs/api/components_data_SeriesData.brs.html | 2 +- docs/api/components_data_TVEpisode.brs.html | 2 +- .../components_data_TVEpisodeData.brs.html | 2 +- .../api/components_data_TVSeasonData.brs.html | 2 +- docs/api/components_data_UserData.brs.html | 2 +- docs/api/components_data_VideoData.brs.html | 2 +- .../api/components_extras_ExtrasItem.brs.html | 2 +- .../components_extras_ExtrasRowList.brs.html | 2 +- docs/api/components_home_Home.brs.html | 2 +- docs/api/components_home_HomeItem.brs.html | 2 +- docs/api/components_home_HomeRows.brs.html | 2 +- .../components_home_LoadItemsTask.brs.html | 2 +- ...omponents_liveTv_LoadChannelsTask.brs.html | 2 +- ...nts_liveTv_LoadProgramDetailsTask.brs.html | 2 +- ...components_liveTv_LoadSheduleTask.brs.html | 2 +- .../components_liveTv_ProgramDetails.brs.html | 2 +- ...mponents_liveTv_RecordProgramTask.brs.html | 2 +- docs/api/components_liveTv_schedule.brs.html | 2 +- docs/api/components_login_UserItem.brs.html | 2 +- docs/api/components_login_UserRow.brs.html | 2 +- docs/api/components_login_UserSelect.brs.html | 2 +- .../components_manager_QueueManager.brs.html | 2 +- .../components_manager_ViewCreator.brs.html | 2 +- ...mponents_mediaPlayers_AudioPlayer.brs.html | 2 +- ...ponents_movies_AudioTrackListItem.brs.html | 2 +- .../components_movies_MovieDetails.brs.html | 2 +- .../components_movies_MovieOptions.brs.html | 2 +- ...ponents_movies_VideoTrackListItem.brs.html | 2 +- docs/api/components_music_AlbumGrid.brs.html | 2 +- .../components_music_AlbumTrackList.brs.html | 2 +- docs/api/components_music_AlbumView.brs.html | 2 +- docs/api/components_music_ArtistView.brs.html | 2 +- .../components_music_AudioPlayerView.brs.html | 2 +- ..._music_LoadScreenSaverTimeoutTask.brs.html | 2 +- .../components_music_PlaylistView.brs.html | 2 +- docs/api/components_music_SongItem.brs.html | 2 +- .../components_options_OptionNode.brs.html | 2 +- .../components_options_OptionsSlider.brs.html | 2 +- .../components_photos_LoadPhotoTask.brs.html | 2 +- .../components_photos_PhotoDetails.brs.html | 2 +- ...ponents_quickConnect_QuickConnect.brs.html | 2 +- ...s_quickConnect_QuickConnectDialog.brs.html | 2 +- .../components_search_SearchResults.brs.html | 2 +- docs/api/components_search_SearchRow.brs.html | 2 +- .../api/components_search_SearchTask.brs.html | 2 +- docs/api/components_section_section.brs.html | 2 +- ...omponents_section_sectionScroller.brs.html | 2 +- .../api/components_settings_settings.brs.html | 2 +- .../components_tvshows_TVEpisodeRow.brs.html | 2 +- ...s_tvshows_TVEpisodeRowWithOptions.brs.html | 2 +- .../components_tvshows_TVEpisodes.brs.html | 2 +- .../components_tvshows_TVListDetails.brs.html | 2 +- .../components_tvshows_TVListOptions.brs.html | 2 +- .../components_tvshows_TVSeasonRow.brs.html | 2 +- ...ponents_tvshows_TVShowDescription.brs.html | 2 +- .../components_tvshows_TVShowDetails.brs.html | 2 +- .../components_video_VideoPlayerView.brs.html | 2 +- docs/api/index.html | 2 +- docs/api/module-AlbumData.html | 2 +- docs/api/module-AlbumGrid.html | 2 +- docs/api/module-AlbumTrackList.html | 2 +- docs/api/module-AlbumView.html | 2 +- docs/api/module-Alpha.html | 2 +- docs/api/module-ArtistView.html | 2 +- docs/api/module-AudioPlayer.html | 2 +- docs/api/module-AudioPlayerView.html | 2 +- docs/api/module-AudioTrackListItem.html | 2 +- docs/api/module-ButtonGroupHoriz.html | 2 +- docs/api/module-ChannelData.html | 2 +- docs/api/module-CollectionData.html | 2 +- docs/api/module-ConfigData.html | 2 +- docs/api/module-ConfigItem.html | 2 +- docs/api/module-ConfigList.html | 2 +- docs/api/module-ExtrasItem.html | 2 +- docs/api/module-ExtrasRowList.html | 2 +- docs/api/module-FavoriteItemsTask.html | 2 +- docs/api/module-FolderData.html | 2 +- docs/api/module-GetFiltersTask.html | 2 +- docs/api/module-GetNextEpisodeTask.html | 2 +- docs/api/module-GetPlaybackInfoTask.html | 2 +- docs/api/module-GetShuffleEpisodesTask.html | 2 +- docs/api/module-GridItem.html | 2 +- docs/api/module-GridItemSmall.html | 2 +- docs/api/module-Home.html | 2 +- docs/api/module-HomeData.html | 2 +- docs/api/module-HomeItem.html | 2 +- docs/api/module-HomeRows.html | 2 +- docs/api/module-IconButton.html | 2 +- docs/api/module-Image.html | 2 +- docs/api/module-ImageData.html | 2 +- docs/api/module-ItemGrid.html | 2 +- docs/api/module-ItemGridOptions.html | 2 +- docs/api/module-Items.html | 2 +- docs/api/module-JFButton.html | 2 +- docs/api/module-JFButtons.html | 2 +- docs/api/module-JFGroup.html | 2 +- docs/api/module-JFMessageDialog.html | 2 +- docs/api/module-JFOverhang.html | 2 +- docs/api/module-JFScene.html | 2 +- docs/api/module-JFScreen.html | 2 +- docs/api/module-JFServer.html | 2 +- docs/api/module-JFVideo.html | 2 +- docs/api/module-ListPoster.html | 2 +- docs/api/module-LoadChannelsTask.html | 2 +- docs/api/module-LoadItemsTask.html | 2 +- docs/api/module-LoadItemsTask2.html | 2 +- docs/api/module-LoadPhotoTask.html | 2 +- docs/api/module-LoadProgramDetailsTask.html | 2 +- .../module-LoadScreenSaverTimeoutTask.html | 2 +- docs/api/module-LoadSheduleTask.html | 2 +- docs/api/module-LoadVideoContentTask.html | 2 +- docs/api/module-LoginScene.html | 2 +- docs/api/module-Main.html | 2 +- docs/api/module-MovieData.html | 2 +- docs/api/module-MovieDetails.html | 2 +- docs/api/module-MovieLibraryView.html | 2 +- docs/api/module-MovieOptions.html | 2 +- docs/api/module-MusicAlbumData.html | 2 +- docs/api/module-MusicAlbumSongListData.html | 2 +- docs/api/module-MusicArtistData.html | 2 +- docs/api/module-MusicArtistGridItem.html | 2 +- docs/api/module-MusicLibraryView.html | 2 +- docs/api/module-MusicSongData.html | 2 +- docs/api/module-OptionNode.html | 2 +- docs/api/module-OptionsButton.html | 2 +- docs/api/module-OptionsData.html | 2 +- docs/api/module-OptionsSlider.html | 2 +- docs/api/module-OverviewDialog.html | 2 +- docs/api/module-PersonData.html | 2 +- docs/api/module-PersonDetails.html | 2 +- docs/api/module-PhotoData.html | 2 +- docs/api/module-PhotoDetails.html | 2 +- docs/api/module-PlaybackDialog.html | 2 +- docs/api/module-PlayedCheckmark.html | 2 +- docs/api/module-PlaylistData.html | 2 +- docs/api/module-PlaylistView.html | 2 +- docs/api/module-PlaystateTask.html | 2 +- docs/api/module-ProgramDetails.html | 2 +- docs/api/module-PublicUserData.html | 2 +- docs/api/module-QueueManager.html | 2 +- docs/api/module-QuickConnect.html | 2 +- docs/api/module-QuickConnectDialog.html | 2 +- docs/api/module-RadioDialog.html | 2 +- docs/api/module-RecordProgramTask.html | 2 +- docs/api/module-SceneManager.html | 2 +- docs/api/module-ScheduleProgramData.html | 2 +- docs/api/module-SearchBox.html | 2 +- docs/api/module-SearchData.html | 2 +- docs/api/module-SearchResults.html | 2 +- docs/api/module-SearchRow.html | 2 +- docs/api/module-SearchTask.html | 2 +- docs/api/module-SeriesData.html | 2 +- docs/api/module-ServerDiscoveryTask.html | 2 +- docs/api/module-SetServerScreen.html | 2 +- docs/api/module-ShowScenes.html | 2 +- docs/api/module-SongItem.html | 2 +- docs/api/module-Spinner.html | 2 +- docs/api/module-StandardDialog.html | 2 +- docs/api/module-Subtitles.html | 2 +- docs/api/module-TVEpisode.html | 2 +- docs/api/module-TVEpisodeData.html | 2 +- docs/api/module-TVEpisodeRow.html | 2 +- docs/api/module-TVEpisodeRowWithOptions.html | 2 +- docs/api/module-TVEpisodes.html | 2 +- docs/api/module-TVListDetails.html | 2 +- docs/api/module-TVListOptions.html | 2 +- docs/api/module-TVSeasonData.html | 2 +- docs/api/module-TVSeasonRow.html | 2 +- docs/api/module-TVShowDescription.html | 2 +- docs/api/module-TVShowDetails.html | 2 +- docs/api/module-TextSizeTask.html | 2 +- docs/api/module-UserData.html | 2 +- docs/api/module-UserItem.html | 2 +- docs/api/module-UserLibrary.html | 2 +- docs/api/module-UserRow.html | 2 +- docs/api/module-UserSelect.html | 2 +- docs/api/module-VideoData.html | 2 +- docs/api/module-VideoPlayer.html | 2 +- docs/api/module-VideoPlayerView.html | 2 +- docs/api/module-VideoTrackListItem.html | 2 +- docs/api/module-ViewCreator.html | 2 +- docs/api/module-WhatsNewDialog.html | 2 +- docs/api/module-baserequest.html | 2 +- docs/api/module-captionTask.html | 2 +- docs/api/module-config.html | 233 +++++++- docs/api/module-deviceCapabilities.html | 2 +- docs/api/module-globals.html | 2 +- docs/api/module-migrations.html | 555 ++++++++++++++++++ docs/api/module-misc.html | 2 +- docs/api/module-schedule.html | 2 +- docs/api/module-section.html | 2 +- docs/api/module-sectionScroller.html | 2 +- docs/api/module-settings.html | 2 +- docs/api/module-userauth.html | 2 +- docs/api/modules.list.html | 2 +- docs/api/quicksearch.html | 2 +- docs/api/source_Main.brs.html | 44 +- docs/api/source_ShowScenes.brs.html | 71 ++- docs/api/source_VideoPlayer.brs.html | 2 +- docs/api/source_api_Image.brs.html | 2 +- docs/api/source_api_Items.brs.html | 2 +- docs/api/source_api_UserLibrary.brs.html | 2 +- docs/api/source_api_baserequest.brs.html | 2 +- docs/api/source_api_userauth.brs.html | 4 +- docs/api/source_migrations.bs.html | 277 +++++++++ docs/api/source_utils_Subtitles.brs.html | 2 +- docs/api/source_utils_config.brs.html | 47 +- .../source_utils_deviceCapabilities.brs.html | 2 +- docs/api/source_utils_globals.brs.html | 6 +- docs/api/source_utils_misc.brs.html | 2 +- 275 files changed, 1439 insertions(+), 332 deletions(-) create mode 100644 docs/api/module-migrations.html create mode 100644 docs/api/source_migrations.bs.html diff --git a/docs/api/components_ButtonGroupHoriz.brs.html b/docs/api/components_ButtonGroupHoriz.brs.html index dc0010154..a40e295d1 100644 --- a/docs/api/components_ButtonGroupHoriz.brs.html +++ b/docs/api/components_ButtonGroupHoriz.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_Buttons_JFButtons.brs.html b/docs/api/components_Buttons_JFButtons.brs.html index a58a47da6..267700d8a 100644 --- a/docs/api/components_Buttons_JFButtons.brs.html +++ b/docs/api/components_Buttons_JFButtons.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_Buttons_TextSizeTask.brs.html b/docs/api/components_Buttons_TextSizeTask.brs.html index fd1e06e5c..d0fe3a48f 100644 --- a/docs/api/components_Buttons_TextSizeTask.brs.html +++ b/docs/api/components_Buttons_TextSizeTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_GetNextEpisodeTask.brs.html b/docs/api/components_GetNextEpisodeTask.brs.html index d2c340fda..b988f7cc3 100644 --- a/docs/api/components_GetNextEpisodeTask.brs.html +++ b/docs/api/components_GetNextEpisodeTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_GetPlaybackInfoTask.brs.html b/docs/api/components_GetPlaybackInfoTask.brs.html index 3667fcef5..4d53dad14 100644 --- a/docs/api/components_GetPlaybackInfoTask.brs.html +++ b/docs/api/components_GetPlaybackInfoTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_GetShuffleEpisodesTask.brs.html b/docs/api/components_GetShuffleEpisodesTask.brs.html index 20e3f5efd..f7aacea70 100644 --- a/docs/api/components_GetShuffleEpisodesTask.brs.html +++ b/docs/api/components_GetShuffleEpisodesTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_IconButton.brs.html b/docs/api/components_IconButton.brs.html index cfc6e9c91..c1ac3c536 100644 --- a/docs/api/components_IconButton.brs.html +++ b/docs/api/components_IconButton.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_Alpha.brs.html b/docs/api/components_ItemGrid_Alpha.brs.html index 62045a207..296485da4 100644 --- a/docs/api/components_ItemGrid_Alpha.brs.html +++ b/docs/api/components_ItemGrid_Alpha.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html b/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html index 87c55474e..05f95f849 100644 --- a/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html +++ b/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_GridItem.brs.html b/docs/api/components_ItemGrid_GridItem.brs.html index c844f1be5..c0fdc294c 100644 --- a/docs/api/components_ItemGrid_GridItem.brs.html +++ b/docs/api/components_ItemGrid_GridItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_GridItemSmall.brs.html b/docs/api/components_ItemGrid_GridItemSmall.brs.html index 6f69faa8c..03254f420 100644 --- a/docs/api/components_ItemGrid_GridItemSmall.brs.html +++ b/docs/api/components_ItemGrid_GridItemSmall.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_ItemGrid.brs.html b/docs/api/components_ItemGrid_ItemGrid.brs.html index 4ed758d3d..cb7ab38c2 100644 --- a/docs/api/components_ItemGrid_ItemGrid.brs.html +++ b/docs/api/components_ItemGrid_ItemGrid.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_ItemGridOptions.brs.html b/docs/api/components_ItemGrid_ItemGridOptions.brs.html index 9f1627ad5..b65b80423 100644 --- a/docs/api/components_ItemGrid_ItemGridOptions.brs.html +++ b/docs/api/components_ItemGrid_ItemGridOptions.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_LoadItemsTask2.brs.html b/docs/api/components_ItemGrid_LoadItemsTask2.brs.html index 7f4e075ee..c73d4db5c 100644 --- a/docs/api/components_ItemGrid_LoadItemsTask2.brs.html +++ b/docs/api/components_ItemGrid_LoadItemsTask2.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html b/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html index b673230db..455d0fcd7 100644 --- a/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html +++ b/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_MovieLibraryView.brs.html b/docs/api/components_ItemGrid_MovieLibraryView.brs.html index 272f2d4f0..3310980d3 100644 --- a/docs/api/components_ItemGrid_MovieLibraryView.brs.html +++ b/docs/api/components_ItemGrid_MovieLibraryView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html b/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html index 0b136e51c..3fcc79f38 100644 --- a/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html +++ b/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ItemGrid_MusicLibraryView.brs.html b/docs/api/components_ItemGrid_MusicLibraryView.brs.html index 7dca107a5..430757f62 100644 --- a/docs/api/components_ItemGrid_MusicLibraryView.brs.html +++ b/docs/api/components_ItemGrid_MusicLibraryView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFButton.brs.html b/docs/api/components_JFButton.brs.html index 233b244ed..192237e20 100644 --- a/docs/api/components_JFButton.brs.html +++ b/docs/api/components_JFButton.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFGroup.brs.html b/docs/api/components_JFGroup.brs.html index 66309c283..c206abb57 100644 --- a/docs/api/components_JFGroup.brs.html +++ b/docs/api/components_JFGroup.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFMessageDialog.brs.html b/docs/api/components_JFMessageDialog.brs.html index f915002a8..b46365a39 100644 --- a/docs/api/components_JFMessageDialog.brs.html +++ b/docs/api/components_JFMessageDialog.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFOverhang.brs.html b/docs/api/components_JFOverhang.brs.html index 83a233e35..d1452220e 100644 --- a/docs/api/components_JFOverhang.brs.html +++ b/docs/api/components_JFOverhang.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFScene.brs.html b/docs/api/components_JFScene.brs.html index 096d9d503..f41260281 100644 --- a/docs/api/components_JFScene.brs.html +++ b/docs/api/components_JFScene.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFScreen.brs.html b/docs/api/components_JFScreen.brs.html index 57939d8d1..8e6e5056a 100644 --- a/docs/api/components_JFScreen.brs.html +++ b/docs/api/components_JFScreen.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_JFVideo.brs.html b/docs/api/components_JFVideo.brs.html index 6fe04bb7c..e8c10dcbd 100644 --- a/docs/api/components_JFVideo.brs.html +++ b/docs/api/components_JFVideo.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_ListPoster.brs.html b/docs/api/components_ListPoster.brs.html index 2113b5392..bc1f67165 100644 --- a/docs/api/components_ListPoster.brs.html +++ b/docs/api/components_ListPoster.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_OverviewDialog.bs.html b/docs/api/components_OverviewDialog.bs.html index b5f4d6ef1..361904f05 100644 --- a/docs/api/components_OverviewDialog.bs.html +++ b/docs/api/components_OverviewDialog.bs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_PersonDetails.brs.html b/docs/api/components_PersonDetails.brs.html index baa569856..b94bf8d8a 100644 --- a/docs/api/components_PersonDetails.brs.html +++ b/docs/api/components_PersonDetails.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_PlaybackDialog.brs.html b/docs/api/components_PlaybackDialog.brs.html index b259b6f00..2dc5814ae 100644 --- a/docs/api/components_PlaybackDialog.brs.html +++ b/docs/api/components_PlaybackDialog.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_PlayedCheckmark.brs.html b/docs/api/components_PlayedCheckmark.brs.html index 3f9cef9d4..2cc7aa39c 100644 --- a/docs/api/components_PlayedCheckmark.brs.html +++ b/docs/api/components_PlayedCheckmark.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_PlaystateTask.brs.html b/docs/api/components_PlaystateTask.brs.html index e81018c5c..7f3f332d2 100644 --- a/docs/api/components_PlaystateTask.brs.html +++ b/docs/api/components_PlaystateTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_RadioDialog.brs.html b/docs/api/components_RadioDialog.brs.html index ea95cbc68..46543100f 100644 --- a/docs/api/components_RadioDialog.brs.html +++ b/docs/api/components_RadioDialog.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_SearchBox.brs.html b/docs/api/components_SearchBox.brs.html index 98e2d1e73..62d77d152 100644 --- a/docs/api/components_SearchBox.brs.html +++ b/docs/api/components_SearchBox.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_Spinner.brs.html b/docs/api/components_Spinner.brs.html index d63cb831c..d765e07f1 100644 --- a/docs/api/components_Spinner.brs.html +++ b/docs/api/components_Spinner.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_StandardDialog.brs.html b/docs/api/components_StandardDialog.brs.html index ce80d2b05..6fc82a29e 100644 --- a/docs/api/components_StandardDialog.brs.html +++ b/docs/api/components_StandardDialog.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_WhatsNewDialog.brs.html b/docs/api/components_WhatsNewDialog.brs.html index cc1de8540..3227fe613 100644 --- a/docs/api/components_WhatsNewDialog.brs.html +++ b/docs/api/components_WhatsNewDialog.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_captionTask.brs.html b/docs/api/components_captionTask.brs.html index f5ca36154..470ceb568 100644 --- a/docs/api/components_captionTask.brs.html +++ b/docs/api/components_captionTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_ConfigData.brs.html b/docs/api/components_config_ConfigData.brs.html index cbded0ef8..7ce2d4f04 100644 --- a/docs/api/components_config_ConfigData.brs.html +++ b/docs/api/components_config_ConfigData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_ConfigItem.brs.html b/docs/api/components_config_ConfigItem.brs.html index 03aab584c..f8fcb1441 100644 --- a/docs/api/components_config_ConfigItem.brs.html +++ b/docs/api/components_config_ConfigItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_ConfigList.brs.html b/docs/api/components_config_ConfigList.brs.html index f1e1213fb..a7d344899 100644 --- a/docs/api/components_config_ConfigList.brs.html +++ b/docs/api/components_config_ConfigList.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_JFServer.brs.html b/docs/api/components_config_JFServer.brs.html index 980ba132c..ada2f2e43 100644 --- a/docs/api/components_config_JFServer.brs.html +++ b/docs/api/components_config_JFServer.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_LoginScene.brs.html b/docs/api/components_config_LoginScene.brs.html index 9c727c00c..eca3d4a0d 100644 --- a/docs/api/components_config_LoginScene.brs.html +++ b/docs/api/components_config_LoginScene.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_ServerDiscoveryTask.brs.html b/docs/api/components_config_ServerDiscoveryTask.brs.html index 225e6d1a8..f56b8e20a 100644 --- a/docs/api/components_config_ServerDiscoveryTask.brs.html +++ b/docs/api/components_config_ServerDiscoveryTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_config_SetServerScreen.brs.html b/docs/api/components_config_SetServerScreen.brs.html index 8ac9930bc..37d97be8a 100644 --- a/docs/api/components_config_SetServerScreen.brs.html +++ b/docs/api/components_config_SetServerScreen.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_AlbumData.brs.html b/docs/api/components_data_AlbumData.brs.html index 6241ed548..0d4729659 100644 --- a/docs/api/components_data_AlbumData.brs.html +++ b/docs/api/components_data_AlbumData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_ChannelData.brs.html b/docs/api/components_data_ChannelData.brs.html index 55a4234f1..249d26ab8 100644 --- a/docs/api/components_data_ChannelData.brs.html +++ b/docs/api/components_data_ChannelData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_CollectionData.brs.html b/docs/api/components_data_CollectionData.brs.html index 22dc0d46f..8c59708e5 100644 --- a/docs/api/components_data_CollectionData.brs.html +++ b/docs/api/components_data_CollectionData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_FolderData.brs.html b/docs/api/components_data_FolderData.brs.html index 1fdef6fbf..842ddbbeb 100644 --- a/docs/api/components_data_FolderData.brs.html +++ b/docs/api/components_data_FolderData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_GetFiltersTask.brs.html b/docs/api/components_data_GetFiltersTask.brs.html index d243bcca5..8eb5e5792 100644 --- a/docs/api/components_data_GetFiltersTask.brs.html +++ b/docs/api/components_data_GetFiltersTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_HomeData.brs.html b/docs/api/components_data_HomeData.brs.html index 918e1420f..b43f289a5 100644 --- a/docs/api/components_data_HomeData.brs.html +++ b/docs/api/components_data_HomeData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_ImageData.brs.html b/docs/api/components_data_ImageData.brs.html index ed510d4ca..00482a830 100644 --- a/docs/api/components_data_ImageData.brs.html +++ b/docs/api/components_data_ImageData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_MovieData.brs.html b/docs/api/components_data_MovieData.brs.html index b92bbcc73..590033686 100644 --- a/docs/api/components_data_MovieData.brs.html +++ b/docs/api/components_data_MovieData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_MusicAlbumData.brs.html b/docs/api/components_data_MusicAlbumData.brs.html index b4b7f2480..0cef69e25 100644 --- a/docs/api/components_data_MusicAlbumData.brs.html +++ b/docs/api/components_data_MusicAlbumData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_MusicAlbumSongListData.brs.html b/docs/api/components_data_MusicAlbumSongListData.brs.html index 49dfe1c46..07386c526 100644 --- a/docs/api/components_data_MusicAlbumSongListData.brs.html +++ b/docs/api/components_data_MusicAlbumSongListData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_MusicArtistData.brs.html b/docs/api/components_data_MusicArtistData.brs.html index ee9d186dd..3c0aa8e15 100644 --- a/docs/api/components_data_MusicArtistData.brs.html +++ b/docs/api/components_data_MusicArtistData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_MusicSongData.brs.html b/docs/api/components_data_MusicSongData.brs.html index 99122b01f..c99a65f0b 100644 --- a/docs/api/components_data_MusicSongData.brs.html +++ b/docs/api/components_data_MusicSongData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_OptionsButton.brs.html b/docs/api/components_data_OptionsButton.brs.html index dca6dc6b1..e6d8d649d 100644 --- a/docs/api/components_data_OptionsButton.brs.html +++ b/docs/api/components_data_OptionsButton.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_OptionsData.brs.html b/docs/api/components_data_OptionsData.brs.html index 695494e77..f1f67e5ba 100644 --- a/docs/api/components_data_OptionsData.brs.html +++ b/docs/api/components_data_OptionsData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_PersonData.brs.html b/docs/api/components_data_PersonData.brs.html index 8e9fd9843..79e676937 100644 --- a/docs/api/components_data_PersonData.brs.html +++ b/docs/api/components_data_PersonData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_PhotoData.brs.html b/docs/api/components_data_PhotoData.brs.html index b8e7ebf09..395abcb6f 100644 --- a/docs/api/components_data_PhotoData.brs.html +++ b/docs/api/components_data_PhotoData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_PlaylistData.brs.html b/docs/api/components_data_PlaylistData.brs.html index 971a0cc5e..8a016aff1 100644 --- a/docs/api/components_data_PlaylistData.brs.html +++ b/docs/api/components_data_PlaylistData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_PublicUserData.brs.html b/docs/api/components_data_PublicUserData.brs.html index d80cbb492..71966a963 100644 --- a/docs/api/components_data_PublicUserData.brs.html +++ b/docs/api/components_data_PublicUserData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_SceneManager.brs.html b/docs/api/components_data_SceneManager.brs.html index a0c4946f5..67d268c9f 100644 --- a/docs/api/components_data_SceneManager.brs.html +++ b/docs/api/components_data_SceneManager.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_ScheduleProgramData.brs.html b/docs/api/components_data_ScheduleProgramData.brs.html index 7d1ce47ec..62979086e 100644 --- a/docs/api/components_data_ScheduleProgramData.brs.html +++ b/docs/api/components_data_ScheduleProgramData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_SearchData.brs.html b/docs/api/components_data_SearchData.brs.html index 787ccca96..c7dae4797 100644 --- a/docs/api/components_data_SearchData.brs.html +++ b/docs/api/components_data_SearchData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_SeriesData.brs.html b/docs/api/components_data_SeriesData.brs.html index 8cbb25da8..5abc59379 100644 --- a/docs/api/components_data_SeriesData.brs.html +++ b/docs/api/components_data_SeriesData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_TVEpisode.brs.html b/docs/api/components_data_TVEpisode.brs.html index 81db48abb..ac7b3c07b 100644 --- a/docs/api/components_data_TVEpisode.brs.html +++ b/docs/api/components_data_TVEpisode.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_TVEpisodeData.brs.html b/docs/api/components_data_TVEpisodeData.brs.html index 1d7234198..3de975406 100644 --- a/docs/api/components_data_TVEpisodeData.brs.html +++ b/docs/api/components_data_TVEpisodeData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_TVSeasonData.brs.html b/docs/api/components_data_TVSeasonData.brs.html index cd661535a..87538925d 100644 --- a/docs/api/components_data_TVSeasonData.brs.html +++ b/docs/api/components_data_TVSeasonData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_UserData.brs.html b/docs/api/components_data_UserData.brs.html index cba5f75ef..e0c4823c8 100644 --- a/docs/api/components_data_UserData.brs.html +++ b/docs/api/components_data_UserData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_data_VideoData.brs.html b/docs/api/components_data_VideoData.brs.html index 10db6e103..6e2a8ef7b 100644 --- a/docs/api/components_data_VideoData.brs.html +++ b/docs/api/components_data_VideoData.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_extras_ExtrasItem.brs.html b/docs/api/components_extras_ExtrasItem.brs.html index 1d056dc76..f225eb622 100644 --- a/docs/api/components_extras_ExtrasItem.brs.html +++ b/docs/api/components_extras_ExtrasItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_extras_ExtrasRowList.brs.html b/docs/api/components_extras_ExtrasRowList.brs.html index 9297e184b..2aeea0f42 100644 --- a/docs/api/components_extras_ExtrasRowList.brs.html +++ b/docs/api/components_extras_ExtrasRowList.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_home_Home.brs.html b/docs/api/components_home_Home.brs.html index 843669b39..624081e8e 100644 --- a/docs/api/components_home_Home.brs.html +++ b/docs/api/components_home_Home.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_home_HomeItem.brs.html b/docs/api/components_home_HomeItem.brs.html index 884ddb085..901b51832 100644 --- a/docs/api/components_home_HomeItem.brs.html +++ b/docs/api/components_home_HomeItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_home_HomeRows.brs.html b/docs/api/components_home_HomeRows.brs.html index 3d40229c4..b6fb8067a 100644 --- a/docs/api/components_home_HomeRows.brs.html +++ b/docs/api/components_home_HomeRows.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_home_LoadItemsTask.brs.html b/docs/api/components_home_LoadItemsTask.brs.html index ab7cbc4d1..82f60479d 100644 --- a/docs/api/components_home_LoadItemsTask.brs.html +++ b/docs/api/components_home_LoadItemsTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_liveTv_LoadChannelsTask.brs.html b/docs/api/components_liveTv_LoadChannelsTask.brs.html index d886bbb4b..f219b57e0 100644 --- a/docs/api/components_liveTv_LoadChannelsTask.brs.html +++ b/docs/api/components_liveTv_LoadChannelsTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html b/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html index 3aab0c0f1..1d3dbc6f5 100644 --- a/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html +++ b/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_liveTv_LoadSheduleTask.brs.html b/docs/api/components_liveTv_LoadSheduleTask.brs.html index 6d198bc45..450868175 100644 --- a/docs/api/components_liveTv_LoadSheduleTask.brs.html +++ b/docs/api/components_liveTv_LoadSheduleTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_liveTv_ProgramDetails.brs.html b/docs/api/components_liveTv_ProgramDetails.brs.html index a542950d7..57a1ff375 100644 --- a/docs/api/components_liveTv_ProgramDetails.brs.html +++ b/docs/api/components_liveTv_ProgramDetails.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_liveTv_RecordProgramTask.brs.html b/docs/api/components_liveTv_RecordProgramTask.brs.html index 3bd34d650..202cfa5a3 100644 --- a/docs/api/components_liveTv_RecordProgramTask.brs.html +++ b/docs/api/components_liveTv_RecordProgramTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_liveTv_schedule.brs.html b/docs/api/components_liveTv_schedule.brs.html index ae7d2c1ca..b39ad0f9a 100644 --- a/docs/api/components_liveTv_schedule.brs.html +++ b/docs/api/components_liveTv_schedule.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_login_UserItem.brs.html b/docs/api/components_login_UserItem.brs.html index e812dcf6c..76b422bcb 100644 --- a/docs/api/components_login_UserItem.brs.html +++ b/docs/api/components_login_UserItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_login_UserRow.brs.html b/docs/api/components_login_UserRow.brs.html index ff2df4848..20f6f2bb2 100644 --- a/docs/api/components_login_UserRow.brs.html +++ b/docs/api/components_login_UserRow.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_login_UserSelect.brs.html b/docs/api/components_login_UserSelect.brs.html index 6f9be12ad..a37de06b1 100644 --- a/docs/api/components_login_UserSelect.brs.html +++ b/docs/api/components_login_UserSelect.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_manager_QueueManager.brs.html b/docs/api/components_manager_QueueManager.brs.html index 4e4879e0e..a1987474f 100644 --- a/docs/api/components_manager_QueueManager.brs.html +++ b/docs/api/components_manager_QueueManager.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_manager_ViewCreator.brs.html b/docs/api/components_manager_ViewCreator.brs.html index 12d8fe629..2167b4abd 100644 --- a/docs/api/components_manager_ViewCreator.brs.html +++ b/docs/api/components_manager_ViewCreator.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_mediaPlayers_AudioPlayer.brs.html b/docs/api/components_mediaPlayers_AudioPlayer.brs.html index 0abc71dfc..3a995c7bd 100644 --- a/docs/api/components_mediaPlayers_AudioPlayer.brs.html +++ b/docs/api/components_mediaPlayers_AudioPlayer.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_movies_AudioTrackListItem.brs.html b/docs/api/components_movies_AudioTrackListItem.brs.html index 0500d1ddb..8d58de5be 100644 --- a/docs/api/components_movies_AudioTrackListItem.brs.html +++ b/docs/api/components_movies_AudioTrackListItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_movies_MovieDetails.brs.html b/docs/api/components_movies_MovieDetails.brs.html index a93d5776e..d3847af14 100644 --- a/docs/api/components_movies_MovieDetails.brs.html +++ b/docs/api/components_movies_MovieDetails.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_movies_MovieOptions.brs.html b/docs/api/components_movies_MovieOptions.brs.html index 0080bb6d4..dc12d5959 100644 --- a/docs/api/components_movies_MovieOptions.brs.html +++ b/docs/api/components_movies_MovieOptions.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_movies_VideoTrackListItem.brs.html b/docs/api/components_movies_VideoTrackListItem.brs.html index 333dbad3d..52f854898 100644 --- a/docs/api/components_movies_VideoTrackListItem.brs.html +++ b/docs/api/components_movies_VideoTrackListItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_AlbumGrid.brs.html b/docs/api/components_music_AlbumGrid.brs.html index 677903f5a..912f58897 100644 --- a/docs/api/components_music_AlbumGrid.brs.html +++ b/docs/api/components_music_AlbumGrid.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_AlbumTrackList.brs.html b/docs/api/components_music_AlbumTrackList.brs.html index 4ad14b0cf..217e61d28 100644 --- a/docs/api/components_music_AlbumTrackList.brs.html +++ b/docs/api/components_music_AlbumTrackList.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_AlbumView.brs.html b/docs/api/components_music_AlbumView.brs.html index ae75747a8..771dcf93c 100644 --- a/docs/api/components_music_AlbumView.brs.html +++ b/docs/api/components_music_AlbumView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_ArtistView.brs.html b/docs/api/components_music_ArtistView.brs.html index fb9ff991d..6a23471d1 100644 --- a/docs/api/components_music_ArtistView.brs.html +++ b/docs/api/components_music_ArtistView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_AudioPlayerView.brs.html b/docs/api/components_music_AudioPlayerView.brs.html index ce0100057..f1df46922 100644 --- a/docs/api/components_music_AudioPlayerView.brs.html +++ b/docs/api/components_music_AudioPlayerView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html b/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html index cbe633c6e..7a7bd7bab 100644 --- a/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html +++ b/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_PlaylistView.brs.html b/docs/api/components_music_PlaylistView.brs.html index 1a4fafa29..00cb5cd9b 100644 --- a/docs/api/components_music_PlaylistView.brs.html +++ b/docs/api/components_music_PlaylistView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_music_SongItem.brs.html b/docs/api/components_music_SongItem.brs.html index 607277d56..88bd61220 100644 --- a/docs/api/components_music_SongItem.brs.html +++ b/docs/api/components_music_SongItem.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_options_OptionNode.brs.html b/docs/api/components_options_OptionNode.brs.html index 264799b14..db243c9e0 100644 --- a/docs/api/components_options_OptionNode.brs.html +++ b/docs/api/components_options_OptionNode.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_options_OptionsSlider.brs.html b/docs/api/components_options_OptionsSlider.brs.html index 7b1648890..fd0289706 100644 --- a/docs/api/components_options_OptionsSlider.brs.html +++ b/docs/api/components_options_OptionsSlider.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_photos_LoadPhotoTask.brs.html b/docs/api/components_photos_LoadPhotoTask.brs.html index cc2150a7a..813fc19a2 100644 --- a/docs/api/components_photos_LoadPhotoTask.brs.html +++ b/docs/api/components_photos_LoadPhotoTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_photos_PhotoDetails.brs.html b/docs/api/components_photos_PhotoDetails.brs.html index d82c11759..2c02648a2 100644 --- a/docs/api/components_photos_PhotoDetails.brs.html +++ b/docs/api/components_photos_PhotoDetails.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_quickConnect_QuickConnect.brs.html b/docs/api/components_quickConnect_QuickConnect.brs.html index 183ec26e1..5f0fa1ebd 100644 --- a/docs/api/components_quickConnect_QuickConnect.brs.html +++ b/docs/api/components_quickConnect_QuickConnect.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_quickConnect_QuickConnectDialog.brs.html b/docs/api/components_quickConnect_QuickConnectDialog.brs.html index cae74f1ad..b44638a18 100644 --- a/docs/api/components_quickConnect_QuickConnectDialog.brs.html +++ b/docs/api/components_quickConnect_QuickConnectDialog.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_search_SearchResults.brs.html b/docs/api/components_search_SearchResults.brs.html index 86e20d44b..5c5e9317d 100644 --- a/docs/api/components_search_SearchResults.brs.html +++ b/docs/api/components_search_SearchResults.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_search_SearchRow.brs.html b/docs/api/components_search_SearchRow.brs.html index a99c23022..ee43072a8 100644 --- a/docs/api/components_search_SearchRow.brs.html +++ b/docs/api/components_search_SearchRow.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_search_SearchTask.brs.html b/docs/api/components_search_SearchTask.brs.html index 81de57d6d..b8acf27bb 100644 --- a/docs/api/components_search_SearchTask.brs.html +++ b/docs/api/components_search_SearchTask.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_section_section.brs.html b/docs/api/components_section_section.brs.html index e18634494..096e7c02e 100644 --- a/docs/api/components_section_section.brs.html +++ b/docs/api/components_section_section.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_section_sectionScroller.brs.html b/docs/api/components_section_sectionScroller.brs.html index 2b35c4167..9a58312dd 100644 --- a/docs/api/components_section_sectionScroller.brs.html +++ b/docs/api/components_section_sectionScroller.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_settings_settings.brs.html b/docs/api/components_settings_settings.brs.html index cf08b27d0..0cb8018b4 100644 --- a/docs/api/components_settings_settings.brs.html +++ b/docs/api/components_settings_settings.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVEpisodeRow.brs.html b/docs/api/components_tvshows_TVEpisodeRow.brs.html index bf85ab1ed..d99086c51 100644 --- a/docs/api/components_tvshows_TVEpisodeRow.brs.html +++ b/docs/api/components_tvshows_TVEpisodeRow.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html b/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html index e8f2bdaf1..f6940298d 100644 --- a/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html +++ b/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVEpisodes.brs.html b/docs/api/components_tvshows_TVEpisodes.brs.html index 65cef3d9a..515a6b0cc 100644 --- a/docs/api/components_tvshows_TVEpisodes.brs.html +++ b/docs/api/components_tvshows_TVEpisodes.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVListDetails.brs.html b/docs/api/components_tvshows_TVListDetails.brs.html index 92a7b0a0b..1d2b1e933 100644 --- a/docs/api/components_tvshows_TVListDetails.brs.html +++ b/docs/api/components_tvshows_TVListDetails.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVListOptions.brs.html b/docs/api/components_tvshows_TVListOptions.brs.html index ea7404ef6..90b74ba45 100644 --- a/docs/api/components_tvshows_TVListOptions.brs.html +++ b/docs/api/components_tvshows_TVListOptions.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVSeasonRow.brs.html b/docs/api/components_tvshows_TVSeasonRow.brs.html index 8d4cc1388..127738e8f 100644 --- a/docs/api/components_tvshows_TVSeasonRow.brs.html +++ b/docs/api/components_tvshows_TVSeasonRow.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVShowDescription.brs.html b/docs/api/components_tvshows_TVShowDescription.brs.html index 431c85c60..036ed4136 100644 --- a/docs/api/components_tvshows_TVShowDescription.brs.html +++ b/docs/api/components_tvshows_TVShowDescription.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_tvshows_TVShowDetails.brs.html b/docs/api/components_tvshows_TVShowDetails.brs.html index 1705eab11..ddae88606 100644 --- a/docs/api/components_tvshows_TVShowDetails.brs.html +++ b/docs/api/components_tvshows_TVShowDetails.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/components_video_VideoPlayerView.brs.html b/docs/api/components_video_VideoPlayerView.brs.html index 40de00f99..e5cc4c7ec 100644 --- a/docs/api/components_video_VideoPlayerView.brs.html +++ b/docs/api/components_video_VideoPlayerView.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/index.html b/docs/api/index.html index 48af3d83c..987555f8c 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AlbumData.html b/docs/api/module-AlbumData.html index c5c98589e..37dfeda0a 100644 --- a/docs/api/module-AlbumData.html +++ b/docs/api/module-AlbumData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AlbumGrid.html b/docs/api/module-AlbumGrid.html index c2387c4a7..880c4aa84 100644 --- a/docs/api/module-AlbumGrid.html +++ b/docs/api/module-AlbumGrid.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AlbumTrackList.html b/docs/api/module-AlbumTrackList.html index f28625d26..9571bfadf 100644 --- a/docs/api/module-AlbumTrackList.html +++ b/docs/api/module-AlbumTrackList.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AlbumView.html b/docs/api/module-AlbumView.html index 119befe50..5aeb5d1d2 100644 --- a/docs/api/module-AlbumView.html +++ b/docs/api/module-AlbumView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Alpha.html b/docs/api/module-Alpha.html index b51c1572b..2c952c5e3 100644 --- a/docs/api/module-Alpha.html +++ b/docs/api/module-Alpha.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ArtistView.html b/docs/api/module-ArtistView.html index 910edec63..b7c18abde 100644 --- a/docs/api/module-ArtistView.html +++ b/docs/api/module-ArtistView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AudioPlayer.html b/docs/api/module-AudioPlayer.html index c8f80e97c..2625a8496 100644 --- a/docs/api/module-AudioPlayer.html +++ b/docs/api/module-AudioPlayer.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AudioPlayerView.html b/docs/api/module-AudioPlayerView.html index 8f5376f38..880c68a62 100644 --- a/docs/api/module-AudioPlayerView.html +++ b/docs/api/module-AudioPlayerView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-AudioTrackListItem.html b/docs/api/module-AudioTrackListItem.html index 485d291fe..292e65045 100644 --- a/docs/api/module-AudioTrackListItem.html +++ b/docs/api/module-AudioTrackListItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ButtonGroupHoriz.html b/docs/api/module-ButtonGroupHoriz.html index 49ad403a0..8ed3fb7ee 100644 --- a/docs/api/module-ButtonGroupHoriz.html +++ b/docs/api/module-ButtonGroupHoriz.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ChannelData.html b/docs/api/module-ChannelData.html index 59e1590ff..7e9fcbbf9 100644 --- a/docs/api/module-ChannelData.html +++ b/docs/api/module-ChannelData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-CollectionData.html b/docs/api/module-CollectionData.html index 0a02750a1..736d8ed49 100644 --- a/docs/api/module-CollectionData.html +++ b/docs/api/module-CollectionData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ConfigData.html b/docs/api/module-ConfigData.html index 798f2bdce..178c49cf1 100644 --- a/docs/api/module-ConfigData.html +++ b/docs/api/module-ConfigData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ConfigItem.html b/docs/api/module-ConfigItem.html index ae5cdf556..9b78453c4 100644 --- a/docs/api/module-ConfigItem.html +++ b/docs/api/module-ConfigItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ConfigList.html b/docs/api/module-ConfigList.html index 11c222627..fcfad2387 100644 --- a/docs/api/module-ConfigList.html +++ b/docs/api/module-ConfigList.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ExtrasItem.html b/docs/api/module-ExtrasItem.html index 3a370936b..346c1334e 100644 --- a/docs/api/module-ExtrasItem.html +++ b/docs/api/module-ExtrasItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ExtrasRowList.html b/docs/api/module-ExtrasRowList.html index 9413e50d5..cfcf9826e 100644 --- a/docs/api/module-ExtrasRowList.html +++ b/docs/api/module-ExtrasRowList.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-FavoriteItemsTask.html b/docs/api/module-FavoriteItemsTask.html index 1cfb04a29..8e5447e89 100644 --- a/docs/api/module-FavoriteItemsTask.html +++ b/docs/api/module-FavoriteItemsTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-FolderData.html b/docs/api/module-FolderData.html index 83cf0531b..7623b2f4c 100644 --- a/docs/api/module-FolderData.html +++ b/docs/api/module-FolderData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-GetFiltersTask.html b/docs/api/module-GetFiltersTask.html index 253dbffab..aac5cd1e8 100644 --- a/docs/api/module-GetFiltersTask.html +++ b/docs/api/module-GetFiltersTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-GetNextEpisodeTask.html b/docs/api/module-GetNextEpisodeTask.html index af309b5ee..7c69b7fea 100644 --- a/docs/api/module-GetNextEpisodeTask.html +++ b/docs/api/module-GetNextEpisodeTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-GetPlaybackInfoTask.html b/docs/api/module-GetPlaybackInfoTask.html index 13d4f166f..2c46121c2 100644 --- a/docs/api/module-GetPlaybackInfoTask.html +++ b/docs/api/module-GetPlaybackInfoTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-GetShuffleEpisodesTask.html b/docs/api/module-GetShuffleEpisodesTask.html index 750809f46..efbcf6c18 100644 --- a/docs/api/module-GetShuffleEpisodesTask.html +++ b/docs/api/module-GetShuffleEpisodesTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-GridItem.html b/docs/api/module-GridItem.html index 4de2fee40..4ff6bf950 100644 --- a/docs/api/module-GridItem.html +++ b/docs/api/module-GridItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-GridItemSmall.html b/docs/api/module-GridItemSmall.html index 14017959b..6a90a60bd 100644 --- a/docs/api/module-GridItemSmall.html +++ b/docs/api/module-GridItemSmall.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Home.html b/docs/api/module-Home.html index 9fdcbeeb9..a54a5eff8 100644 --- a/docs/api/module-Home.html +++ b/docs/api/module-Home.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-HomeData.html b/docs/api/module-HomeData.html index 39a368b4b..1b689708d 100644 --- a/docs/api/module-HomeData.html +++ b/docs/api/module-HomeData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-HomeItem.html b/docs/api/module-HomeItem.html index 14c46ae1c..9a2987551 100644 --- a/docs/api/module-HomeItem.html +++ b/docs/api/module-HomeItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-HomeRows.html b/docs/api/module-HomeRows.html index 4d2d9adcb..b5c4c7167 100644 --- a/docs/api/module-HomeRows.html +++ b/docs/api/module-HomeRows.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-IconButton.html b/docs/api/module-IconButton.html index bc20c3895..e472cb125 100644 --- a/docs/api/module-IconButton.html +++ b/docs/api/module-IconButton.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Image.html b/docs/api/module-Image.html index fe69f6030..e87e63db0 100644 --- a/docs/api/module-Image.html +++ b/docs/api/module-Image.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ImageData.html b/docs/api/module-ImageData.html index f8c4b6cc5..a2d966340 100644 --- a/docs/api/module-ImageData.html +++ b/docs/api/module-ImageData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ItemGrid.html b/docs/api/module-ItemGrid.html index 7f3ef40bf..fd6b8e409 100644 --- a/docs/api/module-ItemGrid.html +++ b/docs/api/module-ItemGrid.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ItemGridOptions.html b/docs/api/module-ItemGridOptions.html index 592577b13..bea32fbcf 100644 --- a/docs/api/module-ItemGridOptions.html +++ b/docs/api/module-ItemGridOptions.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Items.html b/docs/api/module-Items.html index 6a9d13f3b..6cfb0abb5 100644 --- a/docs/api/module-Items.html +++ b/docs/api/module-Items.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFButton.html b/docs/api/module-JFButton.html index 6e981a70f..6b94451e8 100644 --- a/docs/api/module-JFButton.html +++ b/docs/api/module-JFButton.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFButtons.html b/docs/api/module-JFButtons.html index 8452dce1f..474c06caa 100644 --- a/docs/api/module-JFButtons.html +++ b/docs/api/module-JFButtons.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFGroup.html b/docs/api/module-JFGroup.html index acdc1a7df..7578b2ec6 100644 --- a/docs/api/module-JFGroup.html +++ b/docs/api/module-JFGroup.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFMessageDialog.html b/docs/api/module-JFMessageDialog.html index 44e08a94b..b1e8ec0e1 100644 --- a/docs/api/module-JFMessageDialog.html +++ b/docs/api/module-JFMessageDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFOverhang.html b/docs/api/module-JFOverhang.html index 8b4ae203c..a9b1e25a5 100644 --- a/docs/api/module-JFOverhang.html +++ b/docs/api/module-JFOverhang.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFScene.html b/docs/api/module-JFScene.html index 1f84e7822..19faf757b 100644 --- a/docs/api/module-JFScene.html +++ b/docs/api/module-JFScene.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFScreen.html b/docs/api/module-JFScreen.html index d90316203..621370cc2 100644 --- a/docs/api/module-JFScreen.html +++ b/docs/api/module-JFScreen.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFServer.html b/docs/api/module-JFServer.html index f079656f2..cd97da40b 100644 --- a/docs/api/module-JFServer.html +++ b/docs/api/module-JFServer.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-JFVideo.html b/docs/api/module-JFVideo.html index 6bc93c783..be4241a00 100644 --- a/docs/api/module-JFVideo.html +++ b/docs/api/module-JFVideo.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ListPoster.html b/docs/api/module-ListPoster.html index 724607a4c..14dc9cb7d 100644 --- a/docs/api/module-ListPoster.html +++ b/docs/api/module-ListPoster.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadChannelsTask.html b/docs/api/module-LoadChannelsTask.html index fd53fd74f..1e26d61ef 100644 --- a/docs/api/module-LoadChannelsTask.html +++ b/docs/api/module-LoadChannelsTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadItemsTask.html b/docs/api/module-LoadItemsTask.html index 6d8a826a6..e0291afcd 100644 --- a/docs/api/module-LoadItemsTask.html +++ b/docs/api/module-LoadItemsTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadItemsTask2.html b/docs/api/module-LoadItemsTask2.html index c36414503..0c10da9f6 100644 --- a/docs/api/module-LoadItemsTask2.html +++ b/docs/api/module-LoadItemsTask2.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadPhotoTask.html b/docs/api/module-LoadPhotoTask.html index 3bc4dc4f9..e1cd0319c 100644 --- a/docs/api/module-LoadPhotoTask.html +++ b/docs/api/module-LoadPhotoTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadProgramDetailsTask.html b/docs/api/module-LoadProgramDetailsTask.html index 0ed872367..38bc96cd5 100644 --- a/docs/api/module-LoadProgramDetailsTask.html +++ b/docs/api/module-LoadProgramDetailsTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadScreenSaverTimeoutTask.html b/docs/api/module-LoadScreenSaverTimeoutTask.html index 9df9c3383..cdd0ed746 100644 --- a/docs/api/module-LoadScreenSaverTimeoutTask.html +++ b/docs/api/module-LoadScreenSaverTimeoutTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadSheduleTask.html b/docs/api/module-LoadSheduleTask.html index f5f6b3d08..fce815e39 100644 --- a/docs/api/module-LoadSheduleTask.html +++ b/docs/api/module-LoadSheduleTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoadVideoContentTask.html b/docs/api/module-LoadVideoContentTask.html index 785642b9e..1e715dacd 100644 --- a/docs/api/module-LoadVideoContentTask.html +++ b/docs/api/module-LoadVideoContentTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-LoginScene.html b/docs/api/module-LoginScene.html index 3b8e1764b..78b34c450 100644 --- a/docs/api/module-LoginScene.html +++ b/docs/api/module-LoginScene.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Main.html b/docs/api/module-Main.html index 784de4f7a..f31c06abd 100644 --- a/docs/api/module-Main.html +++ b/docs/api/module-Main.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MovieData.html b/docs/api/module-MovieData.html index 61536c309..1d41b8181 100644 --- a/docs/api/module-MovieData.html +++ b/docs/api/module-MovieData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MovieDetails.html b/docs/api/module-MovieDetails.html index c3ad0a5ba..e021f6281 100644 --- a/docs/api/module-MovieDetails.html +++ b/docs/api/module-MovieDetails.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MovieLibraryView.html b/docs/api/module-MovieLibraryView.html index 6514c4858..9498167ae 100644 --- a/docs/api/module-MovieLibraryView.html +++ b/docs/api/module-MovieLibraryView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MovieOptions.html b/docs/api/module-MovieOptions.html index 60de765d8..192db5ba1 100644 --- a/docs/api/module-MovieOptions.html +++ b/docs/api/module-MovieOptions.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MusicAlbumData.html b/docs/api/module-MusicAlbumData.html index 682278230..704b0e833 100644 --- a/docs/api/module-MusicAlbumData.html +++ b/docs/api/module-MusicAlbumData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MusicAlbumSongListData.html b/docs/api/module-MusicAlbumSongListData.html index 0cc936420..6ffd8eb5b 100644 --- a/docs/api/module-MusicAlbumSongListData.html +++ b/docs/api/module-MusicAlbumSongListData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MusicArtistData.html b/docs/api/module-MusicArtistData.html index 414a06ade..73bef4e51 100644 --- a/docs/api/module-MusicArtistData.html +++ b/docs/api/module-MusicArtistData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MusicArtistGridItem.html b/docs/api/module-MusicArtistGridItem.html index 6fea3fd2c..20585ceb8 100644 --- a/docs/api/module-MusicArtistGridItem.html +++ b/docs/api/module-MusicArtistGridItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MusicLibraryView.html b/docs/api/module-MusicLibraryView.html index 16add94b7..6362e4c27 100644 --- a/docs/api/module-MusicLibraryView.html +++ b/docs/api/module-MusicLibraryView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-MusicSongData.html b/docs/api/module-MusicSongData.html index 140889562..8c4df7116 100644 --- a/docs/api/module-MusicSongData.html +++ b/docs/api/module-MusicSongData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-OptionNode.html b/docs/api/module-OptionNode.html index b733c9057..6b7b5ccf5 100644 --- a/docs/api/module-OptionNode.html +++ b/docs/api/module-OptionNode.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-OptionsButton.html b/docs/api/module-OptionsButton.html index 367e4fd0d..564b2843e 100644 --- a/docs/api/module-OptionsButton.html +++ b/docs/api/module-OptionsButton.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-OptionsData.html b/docs/api/module-OptionsData.html index 1b83607ed..a1ad41ead 100644 --- a/docs/api/module-OptionsData.html +++ b/docs/api/module-OptionsData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-OptionsSlider.html b/docs/api/module-OptionsSlider.html index 89282475e..5ed0792bd 100644 --- a/docs/api/module-OptionsSlider.html +++ b/docs/api/module-OptionsSlider.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-OverviewDialog.html b/docs/api/module-OverviewDialog.html index 3d2b20004..f5b050be6 100644 --- a/docs/api/module-OverviewDialog.html +++ b/docs/api/module-OverviewDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PersonData.html b/docs/api/module-PersonData.html index c727f17f5..e4aef2fa4 100644 --- a/docs/api/module-PersonData.html +++ b/docs/api/module-PersonData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PersonDetails.html b/docs/api/module-PersonDetails.html index c738e0cd0..925c2c6c2 100644 --- a/docs/api/module-PersonDetails.html +++ b/docs/api/module-PersonDetails.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PhotoData.html b/docs/api/module-PhotoData.html index c0fa64d2f..37ce92752 100644 --- a/docs/api/module-PhotoData.html +++ b/docs/api/module-PhotoData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PhotoDetails.html b/docs/api/module-PhotoDetails.html index 2bc6bf66c..f55f31bed 100644 --- a/docs/api/module-PhotoDetails.html +++ b/docs/api/module-PhotoDetails.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PlaybackDialog.html b/docs/api/module-PlaybackDialog.html index 9d90a523b..87d5cdef3 100644 --- a/docs/api/module-PlaybackDialog.html +++ b/docs/api/module-PlaybackDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PlayedCheckmark.html b/docs/api/module-PlayedCheckmark.html index ccc216575..7a0c61798 100644 --- a/docs/api/module-PlayedCheckmark.html +++ b/docs/api/module-PlayedCheckmark.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PlaylistData.html b/docs/api/module-PlaylistData.html index 9cda827aa..84fc7a6ff 100644 --- a/docs/api/module-PlaylistData.html +++ b/docs/api/module-PlaylistData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PlaylistView.html b/docs/api/module-PlaylistView.html index 45a8914ab..3690d8604 100644 --- a/docs/api/module-PlaylistView.html +++ b/docs/api/module-PlaylistView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PlaystateTask.html b/docs/api/module-PlaystateTask.html index 2133b0016..840dc37c8 100644 --- a/docs/api/module-PlaystateTask.html +++ b/docs/api/module-PlaystateTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ProgramDetails.html b/docs/api/module-ProgramDetails.html index d3bb6bbd7..edcd2aafa 100644 --- a/docs/api/module-ProgramDetails.html +++ b/docs/api/module-ProgramDetails.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-PublicUserData.html b/docs/api/module-PublicUserData.html index cbba768c0..26bf0a6af 100644 --- a/docs/api/module-PublicUserData.html +++ b/docs/api/module-PublicUserData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-QueueManager.html b/docs/api/module-QueueManager.html index 22f7b68ef..9e7b7e864 100644 --- a/docs/api/module-QueueManager.html +++ b/docs/api/module-QueueManager.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-QuickConnect.html b/docs/api/module-QuickConnect.html index 810a59a58..54b8075ed 100644 --- a/docs/api/module-QuickConnect.html +++ b/docs/api/module-QuickConnect.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-QuickConnectDialog.html b/docs/api/module-QuickConnectDialog.html index 11db5dd3a..1f2bbc651 100644 --- a/docs/api/module-QuickConnectDialog.html +++ b/docs/api/module-QuickConnectDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-RadioDialog.html b/docs/api/module-RadioDialog.html index f7b30a38a..32eacb370 100644 --- a/docs/api/module-RadioDialog.html +++ b/docs/api/module-RadioDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-RecordProgramTask.html b/docs/api/module-RecordProgramTask.html index ad14f2f6e..556381f87 100644 --- a/docs/api/module-RecordProgramTask.html +++ b/docs/api/module-RecordProgramTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SceneManager.html b/docs/api/module-SceneManager.html index 95e1cda0f..c91af5837 100644 --- a/docs/api/module-SceneManager.html +++ b/docs/api/module-SceneManager.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ScheduleProgramData.html b/docs/api/module-ScheduleProgramData.html index d23a8e361..58c79e8fd 100644 --- a/docs/api/module-ScheduleProgramData.html +++ b/docs/api/module-ScheduleProgramData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SearchBox.html b/docs/api/module-SearchBox.html index c121feff9..29efe1a16 100644 --- a/docs/api/module-SearchBox.html +++ b/docs/api/module-SearchBox.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SearchData.html b/docs/api/module-SearchData.html index eea2e6862..210795da9 100644 --- a/docs/api/module-SearchData.html +++ b/docs/api/module-SearchData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SearchResults.html b/docs/api/module-SearchResults.html index 53ad6a947..ae8c4692b 100644 --- a/docs/api/module-SearchResults.html +++ b/docs/api/module-SearchResults.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SearchRow.html b/docs/api/module-SearchRow.html index 55f4dee9c..a138fea0d 100644 --- a/docs/api/module-SearchRow.html +++ b/docs/api/module-SearchRow.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SearchTask.html b/docs/api/module-SearchTask.html index 39367897d..0b6c58b4f 100644 --- a/docs/api/module-SearchTask.html +++ b/docs/api/module-SearchTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SeriesData.html b/docs/api/module-SeriesData.html index 2a9dada90..780d7b5a1 100644 --- a/docs/api/module-SeriesData.html +++ b/docs/api/module-SeriesData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ServerDiscoveryTask.html b/docs/api/module-ServerDiscoveryTask.html index 0cf5c114f..7ec62d51b 100644 --- a/docs/api/module-ServerDiscoveryTask.html +++ b/docs/api/module-ServerDiscoveryTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SetServerScreen.html b/docs/api/module-SetServerScreen.html index a3c8d17da..7b4bc1c8b 100644 --- a/docs/api/module-SetServerScreen.html +++ b/docs/api/module-SetServerScreen.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ShowScenes.html b/docs/api/module-ShowScenes.html index 3a857197b..53bc60d01 100644 --- a/docs/api/module-ShowScenes.html +++ b/docs/api/module-ShowScenes.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-SongItem.html b/docs/api/module-SongItem.html index 398a2fcad..ec1cf2daa 100644 --- a/docs/api/module-SongItem.html +++ b/docs/api/module-SongItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Spinner.html b/docs/api/module-Spinner.html index fd793aba4..733b0a9e7 100644 --- a/docs/api/module-Spinner.html +++ b/docs/api/module-Spinner.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-StandardDialog.html b/docs/api/module-StandardDialog.html index 4d3deff79..4d61b14ec 100644 --- a/docs/api/module-StandardDialog.html +++ b/docs/api/module-StandardDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-Subtitles.html b/docs/api/module-Subtitles.html index aa459c004..50521da4b 100644 --- a/docs/api/module-Subtitles.html +++ b/docs/api/module-Subtitles.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVEpisode.html b/docs/api/module-TVEpisode.html index 0887ff898..411e46c45 100644 --- a/docs/api/module-TVEpisode.html +++ b/docs/api/module-TVEpisode.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVEpisodeData.html b/docs/api/module-TVEpisodeData.html index 286be94d1..82eedf525 100644 --- a/docs/api/module-TVEpisodeData.html +++ b/docs/api/module-TVEpisodeData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVEpisodeRow.html b/docs/api/module-TVEpisodeRow.html index 47ff659bb..e2d06300a 100644 --- a/docs/api/module-TVEpisodeRow.html +++ b/docs/api/module-TVEpisodeRow.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVEpisodeRowWithOptions.html b/docs/api/module-TVEpisodeRowWithOptions.html index a2e395b5e..c14bfde2a 100644 --- a/docs/api/module-TVEpisodeRowWithOptions.html +++ b/docs/api/module-TVEpisodeRowWithOptions.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVEpisodes.html b/docs/api/module-TVEpisodes.html index 3cbf17166..bec999369 100644 --- a/docs/api/module-TVEpisodes.html +++ b/docs/api/module-TVEpisodes.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVListDetails.html b/docs/api/module-TVListDetails.html index da016ca13..2e35ff596 100644 --- a/docs/api/module-TVListDetails.html +++ b/docs/api/module-TVListDetails.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVListOptions.html b/docs/api/module-TVListOptions.html index 290b1b04d..488b012b4 100644 --- a/docs/api/module-TVListOptions.html +++ b/docs/api/module-TVListOptions.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVSeasonData.html b/docs/api/module-TVSeasonData.html index 57de63dbb..c2008442f 100644 --- a/docs/api/module-TVSeasonData.html +++ b/docs/api/module-TVSeasonData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVSeasonRow.html b/docs/api/module-TVSeasonRow.html index 2006b3afd..c8bcdf55b 100644 --- a/docs/api/module-TVSeasonRow.html +++ b/docs/api/module-TVSeasonRow.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVShowDescription.html b/docs/api/module-TVShowDescription.html index 2300de21f..e13f1cb08 100644 --- a/docs/api/module-TVShowDescription.html +++ b/docs/api/module-TVShowDescription.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TVShowDetails.html b/docs/api/module-TVShowDetails.html index e7385092f..7a3584f3e 100644 --- a/docs/api/module-TVShowDetails.html +++ b/docs/api/module-TVShowDetails.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-TextSizeTask.html b/docs/api/module-TextSizeTask.html index 754756106..c93a7e622 100644 --- a/docs/api/module-TextSizeTask.html +++ b/docs/api/module-TextSizeTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-UserData.html b/docs/api/module-UserData.html index 2205f6ac3..0e4be24e6 100644 --- a/docs/api/module-UserData.html +++ b/docs/api/module-UserData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-UserItem.html b/docs/api/module-UserItem.html index e4c12c01b..dc3cd6e2b 100644 --- a/docs/api/module-UserItem.html +++ b/docs/api/module-UserItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-UserLibrary.html b/docs/api/module-UserLibrary.html index b1037764d..5a749c827 100644 --- a/docs/api/module-UserLibrary.html +++ b/docs/api/module-UserLibrary.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-UserRow.html b/docs/api/module-UserRow.html index bda53f65d..623f1b22c 100644 --- a/docs/api/module-UserRow.html +++ b/docs/api/module-UserRow.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-UserSelect.html b/docs/api/module-UserSelect.html index b7b0917ba..6119cfaf6 100644 --- a/docs/api/module-UserSelect.html +++ b/docs/api/module-UserSelect.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-VideoData.html b/docs/api/module-VideoData.html index 050b1de6b..2d2c0b656 100644 --- a/docs/api/module-VideoData.html +++ b/docs/api/module-VideoData.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-VideoPlayer.html b/docs/api/module-VideoPlayer.html index ff6106fb5..5464705ea 100644 --- a/docs/api/module-VideoPlayer.html +++ b/docs/api/module-VideoPlayer.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-VideoPlayerView.html b/docs/api/module-VideoPlayerView.html index a5fd51c98..0530646ca 100644 --- a/docs/api/module-VideoPlayerView.html +++ b/docs/api/module-VideoPlayerView.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-VideoTrackListItem.html b/docs/api/module-VideoTrackListItem.html index c901d7d27..1d617a226 100644 --- a/docs/api/module-VideoTrackListItem.html +++ b/docs/api/module-VideoTrackListItem.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-ViewCreator.html b/docs/api/module-ViewCreator.html index d2622f2fd..eecd5ff20 100644 --- a/docs/api/module-ViewCreator.html +++ b/docs/api/module-ViewCreator.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-WhatsNewDialog.html b/docs/api/module-WhatsNewDialog.html index a02348a66..fc75a1bc3 100644 --- a/docs/api/module-WhatsNewDialog.html +++ b/docs/api/module-WhatsNewDialog.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-baserequest.html b/docs/api/module-baserequest.html index d7f26cbad..e03276171 100644 --- a/docs/api/module-baserequest.html +++ b/docs/api/module-baserequest.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-captionTask.html b/docs/api/module-captionTask.html index 5e1073673..018aa35f0 100644 --- a/docs/api/module-captionTask.html +++ b/docs/api/module-captionTask.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-config.html b/docs/api/module-config.html index a35e637b4..9375a7151 100644 --- a/docs/api/module-config.html +++ b/docs/api/module-config.html @@ -33,7 +33,7 @@ @@ -546,7 +546,7 @@
Parameters:
@@ -593,6 +593,223 @@
Returns:
+ + + + +
+
+

<static> getRegistrySections()

+ + +
+
+ + +
+

Return an array of all the registry section keys

+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +object + + + +
+
+ + + + + +
+ + + +
+
+

<static> getSavedUsers()

+ + +
+
+ + +
+

Returns an array of saved users from the registry
+that belong to the active server

+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +object + + + +
+
+ + + + +
@@ -760,7 +977,7 @@
Parameters:
@@ -918,7 +1135,7 @@
Parameters:
@@ -1766,7 +1983,7 @@
Parameters:
@@ -1944,7 +2161,7 @@
Parameters:
@@ -2098,7 +2315,7 @@
Parameters:
@@ -2252,7 +2469,7 @@
Parameters:
diff --git a/docs/api/module-deviceCapabilities.html b/docs/api/module-deviceCapabilities.html index dadcbf7c2..4aaf0df3e 100644 --- a/docs/api/module-deviceCapabilities.html +++ b/docs/api/module-deviceCapabilities.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-globals.html b/docs/api/module-globals.html index ebfc84db3..339cac673 100644 --- a/docs/api/module-globals.html +++ b/docs/api/module-globals.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-migrations.html b/docs/api/module-migrations.html new file mode 100644 index 000000000..4a5f40e04 --- /dev/null +++ b/docs/api/module-migrations.html @@ -0,0 +1,555 @@ + + + + + + + jellyfin-roku api docs Module: migrations + + + + + + + + + + + + + +
+
+ + +
+ +
+ + +

Module: migrations

+
+ +
+ +
+ + +
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + +

Methods

+ +
+ +
+
+

<static> runGlobalMigrations()

+ + +
+
+ + +
+

Run all necessary registry mirations on the "global" Jellyfin registry section

+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +void + + + +
+
+ + + + + +
+ + + +
+
+

<static> runRegistryUserMigrations(version)

+ + +
+
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
version + + +string + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +void + + + +
+
+ + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+
+ +
+ + +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/module-misc.html b/docs/api/module-misc.html index a444a93a3..963aaf5e4 100644 --- a/docs/api/module-misc.html +++ b/docs/api/module-misc.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-schedule.html b/docs/api/module-schedule.html index 0cb968756..969e78c54 100644 --- a/docs/api/module-schedule.html +++ b/docs/api/module-schedule.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-section.html b/docs/api/module-section.html index 91cb9cda6..b2239e1cf 100644 --- a/docs/api/module-section.html +++ b/docs/api/module-section.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-sectionScroller.html b/docs/api/module-sectionScroller.html index 96f130d4b..fd14d699e 100644 --- a/docs/api/module-sectionScroller.html +++ b/docs/api/module-sectionScroller.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-settings.html b/docs/api/module-settings.html index 9e2362059..a4ba364e9 100644 --- a/docs/api/module-settings.html +++ b/docs/api/module-settings.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-userauth.html b/docs/api/module-userauth.html index 251c4ff58..247c74d3a 100644 --- a/docs/api/module-userauth.html +++ b/docs/api/module-userauth.html @@ -33,7 +33,7 @@ diff --git a/docs/api/modules.list.html b/docs/api/modules.list.html index ca161e32b..f27b6dd5a 100644 --- a/docs/api/modules.list.html +++ b/docs/api/modules.list.html @@ -33,7 +33,7 @@ diff --git a/docs/api/quicksearch.html b/docs/api/quicksearch.html index d934d7c1a..c5b2b1db1 100644 --- a/docs/api/quicksearch.html +++ b/docs/api/quicksearch.html @@ -7,7 +7,7 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/api/source_utils_Subtitles.brs.html b/docs/api/source_utils_Subtitles.brs.html index 4216c4f97..d0b1ceabf 100644 --- a/docs/api/source_utils_Subtitles.brs.html +++ b/docs/api/source_utils_Subtitles.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/source_utils_config.brs.html b/docs/api/source_utils_config.brs.html index 2fe07ba19..54c9d0357 100644 --- a/docs/api/source_utils_config.brs.html +++ b/docs/api/source_utils_config.brs.html @@ -33,7 +33,7 @@ @@ -109,7 +109,7 @@

Source: source/utils/config.brs

registryData = {} for each item in regKeyList ' ignore session related tokens - if item <> "token" and item <> "username" and item <> "password" + if item <> "token" and item <> "username" and item <> "password" and LCase(item) <> "lastrunversion" if registry.Exists(item) registryData.AddReplace(item, registry.Read(item)) end if @@ -119,6 +119,12 @@

Source: source/utils/config.brs

return registryData end function +' Return an array of all the registry section keys +function getRegistrySections() as object + registry = CreateObject("roRegistry") + return registry.GetSectionList() +end function + ' "Jellyfin" registry accessors for the default global settings function get_setting(key, defaultValue = invalid) value = registry_read(key, "Jellyfin") @@ -166,6 +172,43 @@

Source: source/utils/config.brs

return invalid end function + +' Returns an array of saved users from the registry +' that belong to the active server +function getSavedUsers() as object + registrySections = getRegistrySections() + + savedUsers = [] + for each section in registrySections + if LCase(section) <> "jellyfin" + savedUsers.push(section) + end if + end for + + savedServerUsers = [] + for each userId in savedUsers + userArray = { + id: userId + } + token = registry_read("token", userId) + + username = registry_read("username", userId) + if username <> invalid + userArray["username"] = username + end if + + serverId = registry_read("serverId", userId) + if serverId <> invalid + userArray["serverId"] = serverId + end if + + if username <> invalid and token <> invalid and serverId <> invalid and serverId = m.global.session.server.id + savedServerUsers.push(userArray) + end if + end for + + return savedServerUsers +end function diff --git a/docs/api/source_utils_deviceCapabilities.brs.html b/docs/api/source_utils_deviceCapabilities.brs.html index 3abf35b07..3af03f5ca 100644 --- a/docs/api/source_utils_deviceCapabilities.brs.html +++ b/docs/api/source_utils_deviceCapabilities.brs.html @@ -33,7 +33,7 @@ diff --git a/docs/api/source_utils_globals.brs.html b/docs/api/source_utils_globals.brs.html index efda3c01b..7f3f08b39 100644 --- a/docs/api/source_utils_globals.brs.html +++ b/docs/api/source_utils_globals.brs.html @@ -33,7 +33,7 @@ @@ -100,11 +100,13 @@

Source: source/utils/globals.brs

' Save information from roAppInfo to m.global.app sub SaveAppToGlobal() appInfo = CreateObject("roAppInfo") + lastRunVersion = get_setting("LastRunVersion") m.global.addFields({ app: { id: appInfo.GetID(), isDev: appInfo.IsDev(), - version: appInfo.GetVersion() + version: appInfo.GetVersion(), + lastRunVersion: lastRunVersion } }) end sub diff --git a/docs/api/source_utils_misc.brs.html b/docs/api/source_utils_misc.brs.html index c4bc602e7..09cfe2824 100644 --- a/docs/api/source_utils_misc.brs.html +++ b/docs/api/source_utils_misc.brs.html @@ -33,7 +33,7 @@ From a78dcca4f7722e20e799095635b9457c66db244e Mon Sep 17 00:00:00 2001 From: 1hitsong <3330318+1hitsong@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:51:09 -0400 Subject: [PATCH 32/47] Calculate device id on login and use for API calls Fixes #1417 --- components/GetPlaybackInfoTask.brs | 2 +- source/VideoPlayer.brs | 3 ++- source/api/sdk.bs | 2 +- source/utils/globals.brs | 1 + source/utils/session.bs | 7 +++++++ 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/components/GetPlaybackInfoTask.brs b/components/GetPlaybackInfoTask.brs index 0cd6374dd..147028747 100644 --- a/components/GetPlaybackInfoTask.brs +++ b/components/GetPlaybackInfoTask.brs @@ -35,7 +35,7 @@ end function ' Returns an array of playback info to be displayed during playback. ' In the future, with a custom playback info view, we can return an associated array. sub getPlaybackInfoTask() - sessions = api.sessions.Get() + sessions = api.sessions.Get({ "deviceId": m.global.device.serverDeviceName }) m.playbackInfo = ItemPostPlaybackInfo(m.top.videoID) diff --git a/source/VideoPlayer.brs b/source/VideoPlayer.brs index d8615ec7c..f992b1cd4 100644 --- a/source/VideoPlayer.brs +++ b/source/VideoPlayer.brs @@ -468,7 +468,8 @@ end sub ' Returns an array of playback info to be displayed during playback. ' In the future, with a custom playback info view, we can return an associated array. function GetPlaybackInfo() - sessions = api.sessions.Get() + sessions = api.sessions.Get({ "deviceId": m.global.device.serverDeviceName }) + if isValid(sessions) and sessions.Count() > 0 return GetTranscodingStats(sessions[0]) end if diff --git a/source/api/sdk.bs b/source/api/sdk.bs index 51bca7834..45be12d86 100644 --- a/source/api/sdk.bs +++ b/source/api/sdk.bs @@ -1374,7 +1374,7 @@ namespace api end function ' Gets a list of sessions. - function Get(params = { "deviceId": m.global.device.id } as object) + function Get(params = {} as object) req = APIRequest("/sessions", params) return getJson(req) end function diff --git a/source/utils/globals.brs b/source/utils/globals.brs index 538ce30d6..5006641cf 100644 --- a/source/utils/globals.brs +++ b/source/utils/globals.brs @@ -107,6 +107,7 @@ sub SaveDeviceToGlobal() uuid: deviceInfo.GetRandomUUID(), name: displayName, friendlyName: filteredFriendly, + serverDeviceName: "", model: deviceInfo.GetModel(), modelType: deviceInfo.GetModelType(), modelDetails: deviceInfo.GetModelDetails(), diff --git a/source/utils/session.bs b/source/utils/session.bs index 9b5665a7a..d8e6dfc92 100644 --- a/source/utils/session.bs +++ b/source/utils/session.bs @@ -177,6 +177,13 @@ namespace session ' Load and parse Display Settings from server sub LoadUserPreferences() + ' Save device id so we don't calculate it every time we need it + if isValid(m.global.session.user) and isValid(m.global.session.user.friendlyName) + m.global.device.serverDeviceName = m.global.device.id + m.global.session.user.friendlyName + else + m.global.device.serverDeviceName = m.global.device.id + end if + id = m.global.session.user.id ' Currently using client "emby", which is what website uses so we get same Display prefs as web. ' May want to change to specific Roku display settings From f3c04377c159e67a55bdde118c55ea5ed0d7f863 Mon Sep 17 00:00:00 2001 From: 1hitsong <3330318+1hitsong@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:53:33 -0400 Subject: [PATCH 33/47] Use device severDeviceName in base request --- source/api/baserequest.brs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/api/baserequest.brs b/source/api/baserequest.brs index 103461339..d68fcba45 100644 --- a/source/api/baserequest.brs +++ b/source/api/baserequest.brs @@ -205,11 +205,7 @@ function authRequest(request as object) as object auth = auth + ", UserId=" + QUOTE + m.global.session.user.id + QUOTE end if - if m.global.session.user <> invalid and m.global.session.user.friendlyName <> invalid - auth = auth + ", DeviceId=" + QUOTE + m.global.device.id + m.global.session.user.friendlyName + QUOTE - else - auth = auth + ", DeviceId=" + QUOTE + m.global.device.id + QUOTE - end if + auth = auth + ", DeviceId=" + QUOTE + m.global.device.serverDeviceName + QUOTE if m.global.session.user.authToken <> invalid auth = auth + ", Token=" + QUOTE + m.global.session.user.authToken + QUOTE From 71fe9da9c700ee5334f1a245b83c9438a7571e30 Mon Sep 17 00:00:00 2001 From: 1hitsong <3330318+1hitsong@users.noreply.github.com> Date: Fri, 27 Oct 2023 14:27:14 -0400 Subject: [PATCH 34/47] Order boxsets by release date by default Fixes #391 --- components/ItemGrid/ItemGrid.brs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/components/ItemGrid/ItemGrid.brs b/components/ItemGrid/ItemGrid.brs index 0cd567b54..a1d57ab51 100644 --- a/components/ItemGrid/ItemGrid.brs +++ b/components/ItemGrid/ItemGrid.brs @@ -134,7 +134,15 @@ sub loadInitialItems() m.view = m.global.session.user.settings["display." + m.top.parentItem.Id + ".landing"] end if - if m.sortField = invalid then m.sortField = "SortName" + if m.sortField = invalid + ' Set the default order for boxsets to the Release Date - API calls it PremiereDate + if LCase(m.top.parentItem.json.Type) = "boxset" + m.sortField = "PremiereDate" + else + m.sortField = "SortName" + end if + end if + if m.filter = invalid then m.filter = "All" if sortAscendingStr = invalid or sortAscendingStr = true From ac592aa78f280d0a31aad21ffb597824b17024a4 Mon Sep 17 00:00:00 2001 From: 1hitsong <3330318+1hitsong@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:39:35 -0400 Subject: [PATCH 35/47] Add support quickplay program --- source/Main.brs | 2 ++ source/utils/quickplay.bs | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/source/Main.brs b/source/Main.brs index 43787084c..358934f7f 100644 --- a/source/Main.brs +++ b/source/Main.brs @@ -189,6 +189,8 @@ sub Main (args as dynamic) as void quickplay.person(itemNode) else if itemType = "tvchannel" quickplay.tvChannel(itemNode) + else if itemType = "program" + quickplay.program(itemNode) end if m.global.queueManager.callFunc("playQueue") diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 910329f7d..90d155283 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -324,6 +324,15 @@ namespace quickplay m.global.sceneManager.callFunc("pushScene", group) end sub + ' Quick Play A Live Program + sub program(itemNode as object) + if not isValid(itemNode) or not isValid(itemNode.json) or not isValid(itemNode.json.ChannelId) then return + + stopLoadingSpinner() + group = CreateVideoPlayerGroup(itemNode.json.ChannelId) + m.global.sceneManager.callFunc("pushScene", group) + end sub + ' Quick Play A Playlist. ' Play the first unwatched episode. ' If none, play the whole season starting with episode 1. From 22f4152ee5c8ff25a3e827a73a6d95fca8084dcf Mon Sep 17 00:00:00 2001 From: 1hitsong <3330318+1hitsong@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:53:44 -0400 Subject: [PATCH 36/47] Fix Recording library quickplay from home view --- source/utils/quickplay.bs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/utils/quickplay.bs b/source/utils/quickplay.bs index 90d155283..794d8ef67 100644 --- a/source/utils/quickplay.bs +++ b/source/utils/quickplay.bs @@ -483,7 +483,7 @@ namespace quickplay quickplay.pushToQueue(boxsetData.Items) end if end if - else if collectionType = "tvshows" + else if collectionType = "tvshows" or collectionType = "collectionfolder" ' get list of tv shows inside tvshowsData = api.users.GetItemsByQuery(m.global.session.user.id, { "parentId": itemNode.id, From c0d710ae5e6444d366214f19efaa7d3d2325e295 Mon Sep 17 00:00:00 2001 From: cewert Date: Sat, 28 Oct 2023 01:54:11 +0000 Subject: [PATCH 37/47] Update API docs --- docs/api/components_ButtonGroupHoriz.brs.html | 2 +- docs/api/components_Buttons_JFButtons.brs.html | 2 +- docs/api/components_Buttons_TextSizeTask.brs.html | 2 +- docs/api/components_GetNextEpisodeTask.brs.html | 2 +- docs/api/components_GetPlaybackInfoTask.brs.html | 2 +- docs/api/components_GetShuffleEpisodesTask.brs.html | 2 +- docs/api/components_IconButton.brs.html | 2 +- docs/api/components_ItemGrid_Alpha.brs.html | 2 +- .../components_ItemGrid_FavoriteItemsTask.brs.html | 2 +- docs/api/components_ItemGrid_GridItem.brs.html | 2 +- docs/api/components_ItemGrid_GridItemSmall.brs.html | 2 +- docs/api/components_ItemGrid_ItemGrid.brs.html | 12 ++++++++++-- .../api/components_ItemGrid_ItemGridOptions.brs.html | 2 +- docs/api/components_ItemGrid_LoadItemsTask2.brs.html | 2 +- ...components_ItemGrid_LoadVideoContentTask.brs.html | 2 +- .../components_ItemGrid_MovieLibraryView.brs.html | 2 +- .../components_ItemGrid_MusicArtistGridItem.brs.html | 2 +- .../components_ItemGrid_MusicLibraryView.brs.html | 2 +- docs/api/components_JFButton.brs.html | 2 +- docs/api/components_JFGroup.brs.html | 2 +- docs/api/components_JFMessageDialog.brs.html | 2 +- docs/api/components_JFOverhang.brs.html | 2 +- docs/api/components_JFScene.brs.html | 2 +- docs/api/components_JFScreen.brs.html | 2 +- docs/api/components_JFVideo.brs.html | 2 +- docs/api/components_ListPoster.brs.html | 2 +- docs/api/components_OverviewDialog.bs.html | 2 +- docs/api/components_PersonDetails.brs.html | 2 +- docs/api/components_PlaybackDialog.brs.html | 2 +- docs/api/components_PlayedCheckmark.brs.html | 2 +- docs/api/components_PlaystateTask.brs.html | 2 +- docs/api/components_RadioDialog.brs.html | 2 +- docs/api/components_SearchBox.brs.html | 2 +- docs/api/components_Spinner.brs.html | 2 +- docs/api/components_StandardDialog.brs.html | 2 +- docs/api/components_WhatsNewDialog.brs.html | 2 +- docs/api/components_captionTask.brs.html | 2 +- docs/api/components_config_ConfigData.brs.html | 2 +- docs/api/components_config_ConfigItem.brs.html | 2 +- docs/api/components_config_ConfigList.brs.html | 2 +- docs/api/components_config_JFServer.brs.html | 2 +- docs/api/components_config_LoginScene.brs.html | 2 +- .../components_config_ServerDiscoveryTask.brs.html | 2 +- docs/api/components_config_SetServerScreen.brs.html | 2 +- docs/api/components_data_AlbumData.brs.html | 2 +- docs/api/components_data_ChannelData.brs.html | 2 +- docs/api/components_data_CollectionData.brs.html | 2 +- docs/api/components_data_FolderData.brs.html | 2 +- docs/api/components_data_GetFiltersTask.brs.html | 2 +- docs/api/components_data_HomeData.brs.html | 2 +- docs/api/components_data_ImageData.brs.html | 2 +- docs/api/components_data_MovieData.brs.html | 2 +- docs/api/components_data_MusicAlbumData.brs.html | 2 +- .../components_data_MusicAlbumSongListData.brs.html | 2 +- docs/api/components_data_MusicArtistData.brs.html | 2 +- docs/api/components_data_MusicSongData.brs.html | 2 +- docs/api/components_data_OptionsButton.brs.html | 2 +- docs/api/components_data_OptionsData.brs.html | 2 +- docs/api/components_data_PersonData.brs.html | 2 +- docs/api/components_data_PhotoData.brs.html | 2 +- docs/api/components_data_PlaylistData.brs.html | 2 +- docs/api/components_data_PublicUserData.brs.html | 2 +- docs/api/components_data_SceneManager.brs.html | 2 +- .../api/components_data_ScheduleProgramData.brs.html | 2 +- docs/api/components_data_SearchData.brs.html | 2 +- docs/api/components_data_SeriesData.brs.html | 2 +- docs/api/components_data_TVEpisode.brs.html | 2 +- docs/api/components_data_TVEpisodeData.brs.html | 2 +- docs/api/components_data_TVSeasonData.brs.html | 2 +- docs/api/components_data_UserData.brs.html | 2 +- docs/api/components_data_VideoData.brs.html | 2 +- docs/api/components_extras_ExtrasItem.brs.html | 2 +- docs/api/components_extras_ExtrasRowList.brs.html | 2 +- docs/api/components_home_Home.brs.html | 2 +- docs/api/components_home_HomeItem.brs.html | 2 +- docs/api/components_home_HomeRows.brs.html | 2 +- docs/api/components_home_LoadItemsTask.brs.html | 2 +- docs/api/components_liveTv_LoadChannelsTask.brs.html | 2 +- ...components_liveTv_LoadProgramDetailsTask.brs.html | 2 +- docs/api/components_liveTv_LoadSheduleTask.brs.html | 2 +- docs/api/components_liveTv_ProgramDetails.brs.html | 2 +- .../api/components_liveTv_RecordProgramTask.brs.html | 2 +- docs/api/components_liveTv_schedule.brs.html | 2 +- docs/api/components_login_UserItem.brs.html | 2 +- docs/api/components_login_UserRow.brs.html | 2 +- docs/api/components_login_UserSelect.brs.html | 2 +- docs/api/components_manager_QueueManager.brs.html | 2 +- docs/api/components_manager_ViewCreator.brs.html | 2 +- .../api/components_mediaPlayers_AudioPlayer.brs.html | 2 +- .../components_movies_AudioTrackListItem.brs.html | 2 +- docs/api/components_movies_MovieDetails.brs.html | 2 +- docs/api/components_movies_MovieOptions.brs.html | 2 +- .../components_movies_VideoTrackListItem.brs.html | 2 +- docs/api/components_music_AlbumGrid.brs.html | 2 +- docs/api/components_music_AlbumTrackList.brs.html | 2 +- docs/api/components_music_AlbumView.brs.html | 2 +- docs/api/components_music_ArtistView.brs.html | 2 +- docs/api/components_music_AudioPlayerView.brs.html | 2 +- ...ponents_music_LoadScreenSaverTimeoutTask.brs.html | 2 +- docs/api/components_music_PlaylistView.brs.html | 2 +- docs/api/components_music_SongItem.brs.html | 2 +- docs/api/components_options_OptionNode.brs.html | 2 +- docs/api/components_options_OptionsSlider.brs.html | 2 +- docs/api/components_photos_LoadPhotoTask.brs.html | 2 +- docs/api/components_photos_PhotoDetails.brs.html | 2 +- .../components_quickConnect_QuickConnect.brs.html | 2 +- ...mponents_quickConnect_QuickConnectDialog.brs.html | 2 +- docs/api/components_search_SearchResults.brs.html | 2 +- docs/api/components_search_SearchRow.brs.html | 2 +- docs/api/components_search_SearchTask.brs.html | 2 +- docs/api/components_section_section.brs.html | 2 +- docs/api/components_section_sectionScroller.brs.html | 2 +- docs/api/components_settings_settings.brs.html | 2 +- docs/api/components_tvshows_TVEpisodeRow.brs.html | 2 +- ...mponents_tvshows_TVEpisodeRowWithOptions.brs.html | 2 +- docs/api/components_tvshows_TVEpisodes.brs.html | 2 +- docs/api/components_tvshows_TVListDetails.brs.html | 2 +- docs/api/components_tvshows_TVListOptions.brs.html | 2 +- docs/api/components_tvshows_TVSeasonRow.brs.html | 2 +- .../components_tvshows_TVShowDescription.brs.html | 2 +- docs/api/components_tvshows_TVShowDetails.brs.html | 2 +- docs/api/components_video_VideoPlayerView.brs.html | 2 +- docs/api/index.html | 2 +- docs/api/module-AlbumData.html | 2 +- docs/api/module-AlbumGrid.html | 2 +- docs/api/module-AlbumTrackList.html | 2 +- docs/api/module-AlbumView.html | 2 +- docs/api/module-Alpha.html | 2 +- docs/api/module-ArtistView.html | 2 +- docs/api/module-AudioPlayer.html | 2 +- docs/api/module-AudioPlayerView.html | 2 +- docs/api/module-AudioTrackListItem.html | 2 +- docs/api/module-ButtonGroupHoriz.html | 2 +- docs/api/module-ChannelData.html | 2 +- docs/api/module-CollectionData.html | 2 +- docs/api/module-ConfigData.html | 2 +- docs/api/module-ConfigItem.html | 2 +- docs/api/module-ConfigList.html | 2 +- docs/api/module-ExtrasItem.html | 2 +- docs/api/module-ExtrasRowList.html | 2 +- docs/api/module-FavoriteItemsTask.html | 2 +- docs/api/module-FolderData.html | 2 +- docs/api/module-GetFiltersTask.html | 2 +- docs/api/module-GetNextEpisodeTask.html | 2 +- docs/api/module-GetPlaybackInfoTask.html | 2 +- docs/api/module-GetShuffleEpisodesTask.html | 2 +- docs/api/module-GridItem.html | 2 +- docs/api/module-GridItemSmall.html | 2 +- docs/api/module-Home.html | 2 +- docs/api/module-HomeData.html | 2 +- docs/api/module-HomeItem.html | 2 +- docs/api/module-HomeRows.html | 2 +- docs/api/module-IconButton.html | 2 +- docs/api/module-Image.html | 2 +- docs/api/module-ImageData.html | 2 +- docs/api/module-ItemGrid.html | 2 +- docs/api/module-ItemGridOptions.html | 2 +- docs/api/module-Items.html | 2 +- docs/api/module-JFButton.html | 2 +- docs/api/module-JFButtons.html | 2 +- docs/api/module-JFGroup.html | 2 +- docs/api/module-JFMessageDialog.html | 2 +- docs/api/module-JFOverhang.html | 2 +- docs/api/module-JFScene.html | 2 +- docs/api/module-JFScreen.html | 2 +- docs/api/module-JFServer.html | 2 +- docs/api/module-JFVideo.html | 2 +- docs/api/module-ListPoster.html | 2 +- docs/api/module-LoadChannelsTask.html | 2 +- docs/api/module-LoadItemsTask.html | 2 +- docs/api/module-LoadItemsTask2.html | 2 +- docs/api/module-LoadPhotoTask.html | 2 +- docs/api/module-LoadProgramDetailsTask.html | 2 +- docs/api/module-LoadScreenSaverTimeoutTask.html | 2 +- docs/api/module-LoadSheduleTask.html | 2 +- docs/api/module-LoadVideoContentTask.html | 2 +- docs/api/module-LoginScene.html | 2 +- docs/api/module-Main.html | 2 +- docs/api/module-MovieData.html | 2 +- docs/api/module-MovieDetails.html | 2 +- docs/api/module-MovieLibraryView.html | 2 +- docs/api/module-MovieOptions.html | 2 +- docs/api/module-MusicAlbumData.html | 2 +- docs/api/module-MusicAlbumSongListData.html | 2 +- docs/api/module-MusicArtistData.html | 2 +- docs/api/module-MusicArtistGridItem.html | 2 +- docs/api/module-MusicLibraryView.html | 2 +- docs/api/module-MusicSongData.html | 2 +- docs/api/module-OptionNode.html | 2 +- docs/api/module-OptionsButton.html | 2 +- docs/api/module-OptionsData.html | 2 +- docs/api/module-OptionsSlider.html | 2 +- docs/api/module-OverviewDialog.html | 2 +- docs/api/module-PersonData.html | 2 +- docs/api/module-PersonDetails.html | 2 +- docs/api/module-PhotoData.html | 2 +- docs/api/module-PhotoDetails.html | 2 +- docs/api/module-PlaybackDialog.html | 2 +- docs/api/module-PlayedCheckmark.html | 2 +- docs/api/module-PlaylistData.html | 2 +- docs/api/module-PlaylistView.html | 2 +- docs/api/module-PlaystateTask.html | 2 +- docs/api/module-ProgramDetails.html | 2 +- docs/api/module-PublicUserData.html | 2 +- docs/api/module-QueueManager.html | 2 +- docs/api/module-QuickConnect.html | 2 +- docs/api/module-QuickConnectDialog.html | 2 +- docs/api/module-RadioDialog.html | 2 +- docs/api/module-RecordProgramTask.html | 2 +- docs/api/module-SceneManager.html | 2 +- docs/api/module-ScheduleProgramData.html | 2 +- docs/api/module-SearchBox.html | 2 +- docs/api/module-SearchData.html | 2 +- docs/api/module-SearchResults.html | 2 +- docs/api/module-SearchRow.html | 2 +- docs/api/module-SearchTask.html | 2 +- docs/api/module-SeriesData.html | 2 +- docs/api/module-ServerDiscoveryTask.html | 2 +- docs/api/module-SetServerScreen.html | 2 +- docs/api/module-ShowScenes.html | 2 +- docs/api/module-SongItem.html | 2 +- docs/api/module-Spinner.html | 2 +- docs/api/module-StandardDialog.html | 2 +- docs/api/module-Subtitles.html | 2 +- docs/api/module-TVEpisode.html | 2 +- docs/api/module-TVEpisodeData.html | 2 +- docs/api/module-TVEpisodeRow.html | 2 +- docs/api/module-TVEpisodeRowWithOptions.html | 2 +- docs/api/module-TVEpisodes.html | 2 +- docs/api/module-TVListDetails.html | 2 +- docs/api/module-TVListOptions.html | 2 +- docs/api/module-TVSeasonData.html | 2 +- docs/api/module-TVSeasonRow.html | 2 +- docs/api/module-TVShowDescription.html | 2 +- docs/api/module-TVShowDetails.html | 2 +- docs/api/module-TextSizeTask.html | 2 +- docs/api/module-UserData.html | 2 +- docs/api/module-UserItem.html | 2 +- docs/api/module-UserLibrary.html | 2 +- docs/api/module-UserRow.html | 2 +- docs/api/module-UserSelect.html | 2 +- docs/api/module-VideoData.html | 2 +- docs/api/module-VideoPlayer.html | 2 +- docs/api/module-VideoPlayerView.html | 2 +- docs/api/module-VideoTrackListItem.html | 2 +- docs/api/module-ViewCreator.html | 2 +- docs/api/module-WhatsNewDialog.html | 2 +- docs/api/module-baserequest.html | 2 +- docs/api/module-captionTask.html | 2 +- docs/api/module-config.html | 2 +- docs/api/module-deviceCapabilities.html | 2 +- docs/api/module-globals.html | 2 +- docs/api/module-migrations.html | 2 +- docs/api/module-misc.html | 2 +- docs/api/module-schedule.html | 2 +- docs/api/module-section.html | 2 +- docs/api/module-sectionScroller.html | 2 +- docs/api/module-settings.html | 2 +- docs/api/module-userauth.html | 2 +- docs/api/modules.list.html | 2 +- docs/api/quicksearch.html | 2 +- docs/api/source_Main.brs.html | 2 +- docs/api/source_ShowScenes.brs.html | 2 +- docs/api/source_VideoPlayer.brs.html | 2 +- docs/api/source_api_Image.brs.html | 2 +- docs/api/source_api_Items.brs.html | 2 +- docs/api/source_api_UserLibrary.brs.html | 2 +- docs/api/source_api_baserequest.brs.html | 2 +- docs/api/source_api_userauth.brs.html | 2 +- docs/api/source_migrations.bs.html | 2 +- docs/api/source_utils_Subtitles.brs.html | 2 +- docs/api/source_utils_config.brs.html | 2 +- docs/api/source_utils_deviceCapabilities.brs.html | 2 +- docs/api/source_utils_globals.brs.html | 2 +- docs/api/source_utils_misc.brs.html | 2 +- 275 files changed, 284 insertions(+), 276 deletions(-) diff --git a/docs/api/components_ButtonGroupHoriz.brs.html b/docs/api/components_ButtonGroupHoriz.brs.html index a40e295d1..30cf1bf2b 100644 --- a/docs/api/components_ButtonGroupHoriz.brs.html +++ b/docs/api/components_ButtonGroupHoriz.brs.html @@ -138,7 +138,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_Buttons_JFButtons.brs.html b/docs/api/components_Buttons_JFButtons.brs.html index 267700d8a..5cf345648 100644 --- a/docs/api/components_Buttons_JFButtons.brs.html +++ b/docs/api/components_Buttons_JFButtons.brs.html @@ -235,7 +235,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_Buttons_TextSizeTask.brs.html b/docs/api/components_Buttons_TextSizeTask.brs.html index d0fe3a48f..c312aeeb9 100644 --- a/docs/api/components_Buttons_TextSizeTask.brs.html +++ b/docs/api/components_Buttons_TextSizeTask.brs.html @@ -134,7 +134,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_GetNextEpisodeTask.brs.html b/docs/api/components_GetNextEpisodeTask.brs.html index b988f7cc3..a3c3768ca 100644 --- a/docs/api/components_GetNextEpisodeTask.brs.html +++ b/docs/api/components_GetNextEpisodeTask.brs.html @@ -129,7 +129,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_GetPlaybackInfoTask.brs.html b/docs/api/components_GetPlaybackInfoTask.brs.html index 4d53dad14..79bad3f78 100644 --- a/docs/api/components_GetPlaybackInfoTask.brs.html +++ b/docs/api/components_GetPlaybackInfoTask.brs.html @@ -283,7 +283,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_GetShuffleEpisodesTask.brs.html b/docs/api/components_GetShuffleEpisodesTask.brs.html index f7aacea70..487d96734 100644 --- a/docs/api/components_GetShuffleEpisodesTask.brs.html +++ b/docs/api/components_GetShuffleEpisodesTask.brs.html @@ -129,7 +129,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_IconButton.brs.html b/docs/api/components_IconButton.brs.html index c1ac3c536..42707591c 100644 --- a/docs/api/components_IconButton.brs.html +++ b/docs/api/components_IconButton.brs.html @@ -194,7 +194,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_Alpha.brs.html b/docs/api/components_ItemGrid_Alpha.brs.html index 296485da4..92e9328a0 100644 --- a/docs/api/components_ItemGrid_Alpha.brs.html +++ b/docs/api/components_ItemGrid_Alpha.brs.html @@ -156,7 +156,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html b/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html index 05f95f849..7817a1179 100644 --- a/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html +++ b/docs/api/components_ItemGrid_FavoriteItemsTask.brs.html @@ -132,7 +132,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_GridItem.brs.html b/docs/api/components_ItemGrid_GridItem.brs.html index c0fdc294c..131510a80 100644 --- a/docs/api/components_ItemGrid_GridItem.brs.html +++ b/docs/api/components_ItemGrid_GridItem.brs.html @@ -284,7 +284,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_GridItemSmall.brs.html b/docs/api/components_ItemGrid_GridItemSmall.brs.html index 03254f420..ccf43456a 100644 --- a/docs/api/components_ItemGrid_GridItemSmall.brs.html +++ b/docs/api/components_ItemGrid_GridItemSmall.brs.html @@ -184,7 +184,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_ItemGrid.brs.html b/docs/api/components_ItemGrid_ItemGrid.brs.html index cb7ab38c2..b2edff8be 100644 --- a/docs/api/components_ItemGrid_ItemGrid.brs.html +++ b/docs/api/components_ItemGrid_ItemGrid.brs.html @@ -206,7 +206,15 @@

Source: components/ItemGrid/ItemGrid.brs

m.view = m.global.session.user.settings["display." + m.top.parentItem.Id + ".landing"] end if - if m.sortField = invalid then m.sortField = "SortName" + if m.sortField = invalid + ' Set the default order for boxsets to the Release Date - API calls it PremiereDate + if LCase(m.top.parentItem.json.Type) = "boxset" + m.sortField = "PremiereDate" + else + m.sortField = "SortName" + end if + end if + if m.filter = invalid then m.filter = "All" if sortAscendingStr = invalid or sortAscendingStr = true @@ -988,7 +996,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_ItemGridOptions.brs.html b/docs/api/components_ItemGrid_ItemGridOptions.brs.html index b65b80423..9991129c8 100644 --- a/docs/api/components_ItemGrid_ItemGridOptions.brs.html +++ b/docs/api/components_ItemGrid_ItemGridOptions.brs.html @@ -501,7 +501,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_LoadItemsTask2.brs.html b/docs/api/components_ItemGrid_LoadItemsTask2.brs.html index c73d4db5c..338e20f71 100644 --- a/docs/api/components_ItemGrid_LoadItemsTask2.brs.html +++ b/docs/api/components_ItemGrid_LoadItemsTask2.brs.html @@ -378,7 +378,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html b/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html index 455d0fcd7..d3e03ec75 100644 --- a/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html +++ b/docs/api/components_ItemGrid_LoadVideoContentTask.brs.html @@ -1024,7 +1024,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_MovieLibraryView.brs.html b/docs/api/components_ItemGrid_MovieLibraryView.brs.html index 3310980d3..132b7697d 100644 --- a/docs/api/components_ItemGrid_MovieLibraryView.brs.html +++ b/docs/api/components_ItemGrid_MovieLibraryView.brs.html @@ -1050,7 +1050,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html b/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html index 3fcc79f38..b4a5b2490 100644 --- a/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html +++ b/docs/api/components_ItemGrid_MusicArtistGridItem.brs.html @@ -196,7 +196,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ItemGrid_MusicLibraryView.brs.html b/docs/api/components_ItemGrid_MusicLibraryView.brs.html index 430757f62..53901fa46 100644 --- a/docs/api/components_ItemGrid_MusicLibraryView.brs.html +++ b/docs/api/components_ItemGrid_MusicLibraryView.brs.html @@ -908,7 +908,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFButton.brs.html b/docs/api/components_JFButton.brs.html index 192237e20..e97dcce80 100644 --- a/docs/api/components_JFButton.brs.html +++ b/docs/api/components_JFButton.brs.html @@ -137,7 +137,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFGroup.brs.html b/docs/api/components_JFGroup.brs.html index c206abb57..3a792832d 100644 --- a/docs/api/components_JFGroup.brs.html +++ b/docs/api/components_JFGroup.brs.html @@ -121,7 +121,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFMessageDialog.brs.html b/docs/api/components_JFMessageDialog.brs.html index b46365a39..329bf6a67 100644 --- a/docs/api/components_JFMessageDialog.brs.html +++ b/docs/api/components_JFMessageDialog.brs.html @@ -186,7 +186,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFOverhang.brs.html b/docs/api/components_JFOverhang.brs.html index d1452220e..62f26f52d 100644 --- a/docs/api/components_JFOverhang.brs.html +++ b/docs/api/components_JFOverhang.brs.html @@ -260,7 +260,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFScene.brs.html b/docs/api/components_JFScene.brs.html index f41260281..b3e184ce0 100644 --- a/docs/api/components_JFScene.brs.html +++ b/docs/api/components_JFScene.brs.html @@ -139,7 +139,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFScreen.brs.html b/docs/api/components_JFScreen.brs.html index 8e6e5056a..4035e053a 100644 --- a/docs/api/components_JFScreen.brs.html +++ b/docs/api/components_JFScreen.brs.html @@ -137,7 +137,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_JFVideo.brs.html b/docs/api/components_JFVideo.brs.html index e8c10dcbd..58d535498 100644 --- a/docs/api/components_JFVideo.brs.html +++ b/docs/api/components_JFVideo.brs.html @@ -410,7 +410,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_ListPoster.brs.html b/docs/api/components_ListPoster.brs.html index bc1f67165..4fc310986 100644 --- a/docs/api/components_ListPoster.brs.html +++ b/docs/api/components_ListPoster.brs.html @@ -229,7 +229,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_OverviewDialog.bs.html b/docs/api/components_OverviewDialog.bs.html index 361904f05..ca41cf333 100644 --- a/docs/api/components_OverviewDialog.bs.html +++ b/docs/api/components_OverviewDialog.bs.html @@ -130,7 +130,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_PersonDetails.brs.html b/docs/api/components_PersonDetails.brs.html index b94bf8d8a..bc98b7724 100644 --- a/docs/api/components_PersonDetails.brs.html +++ b/docs/api/components_PersonDetails.brs.html @@ -287,7 +287,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_PlaybackDialog.brs.html b/docs/api/components_PlaybackDialog.brs.html index 2dc5814ae..03aaa0e82 100644 --- a/docs/api/components_PlaybackDialog.brs.html +++ b/docs/api/components_PlaybackDialog.brs.html @@ -122,7 +122,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_PlayedCheckmark.brs.html b/docs/api/components_PlayedCheckmark.brs.html index 2cc7aa39c..24162050f 100644 --- a/docs/api/components_PlayedCheckmark.brs.html +++ b/docs/api/components_PlayedCheckmark.brs.html @@ -117,7 +117,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_PlaystateTask.brs.html b/docs/api/components_PlaystateTask.brs.html index 7f3f332d2..839aade94 100644 --- a/docs/api/components_PlaystateTask.brs.html +++ b/docs/api/components_PlaystateTask.brs.html @@ -167,7 +167,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_RadioDialog.brs.html b/docs/api/components_RadioDialog.brs.html index 46543100f..96934d7e4 100644 --- a/docs/api/components_RadioDialog.brs.html +++ b/docs/api/components_RadioDialog.brs.html @@ -251,7 +251,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_SearchBox.brs.html b/docs/api/components_SearchBox.brs.html index 62d77d152..78e27bd0b 100644 --- a/docs/api/components_SearchBox.brs.html +++ b/docs/api/components_SearchBox.brs.html @@ -146,7 +146,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_Spinner.brs.html b/docs/api/components_Spinner.brs.html index d765e07f1..2eea0a1a7 100644 --- a/docs/api/components_Spinner.brs.html +++ b/docs/api/components_Spinner.brs.html @@ -119,7 +119,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_StandardDialog.brs.html b/docs/api/components_StandardDialog.brs.html index 6fc82a29e..50cef978c 100644 --- a/docs/api/components_StandardDialog.brs.html +++ b/docs/api/components_StandardDialog.brs.html @@ -149,7 +149,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_WhatsNewDialog.brs.html b/docs/api/components_WhatsNewDialog.brs.html index 3227fe613..401de9b42 100644 --- a/docs/api/components_WhatsNewDialog.brs.html +++ b/docs/api/components_WhatsNewDialog.brs.html @@ -159,7 +159,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_captionTask.brs.html b/docs/api/components_captionTask.brs.html index 470ceb568..15cce2f0f 100644 --- a/docs/api/components_captionTask.brs.html +++ b/docs/api/components_captionTask.brs.html @@ -263,7 +263,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_ConfigData.brs.html b/docs/api/components_config_ConfigData.brs.html index 7ce2d4f04..ad7d50550 100644 --- a/docs/api/components_config_ConfigData.brs.html +++ b/docs/api/components_config_ConfigData.brs.html @@ -115,7 +115,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_ConfigItem.brs.html b/docs/api/components_config_ConfigItem.brs.html index f8fcb1441..6fd5a9a16 100644 --- a/docs/api/components_config_ConfigItem.brs.html +++ b/docs/api/components_config_ConfigItem.brs.html @@ -150,7 +150,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_ConfigList.brs.html b/docs/api/components_config_ConfigList.brs.html index a7d344899..ae96034e6 100644 --- a/docs/api/components_config_ConfigList.brs.html +++ b/docs/api/components_config_ConfigList.brs.html @@ -189,7 +189,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_JFServer.brs.html b/docs/api/components_config_JFServer.brs.html index ada2f2e43..0ec477b9f 100644 --- a/docs/api/components_config_JFServer.brs.html +++ b/docs/api/components_config_JFServer.brs.html @@ -147,7 +147,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_LoginScene.brs.html b/docs/api/components_config_LoginScene.brs.html index eca3d4a0d..dc2ff70e7 100644 --- a/docs/api/components_config_LoginScene.brs.html +++ b/docs/api/components_config_LoginScene.brs.html @@ -159,7 +159,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_ServerDiscoveryTask.brs.html b/docs/api/components_config_ServerDiscoveryTask.brs.html index f56b8e20a..46456cb70 100644 --- a/docs/api/components_config_ServerDiscoveryTask.brs.html +++ b/docs/api/components_config_ServerDiscoveryTask.brs.html @@ -284,7 +284,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_config_SetServerScreen.brs.html b/docs/api/components_config_SetServerScreen.brs.html index 37d97be8a..4356fc834 100644 --- a/docs/api/components_config_SetServerScreen.brs.html +++ b/docs/api/components_config_SetServerScreen.brs.html @@ -272,7 +272,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_AlbumData.brs.html b/docs/api/components_data_AlbumData.brs.html index 0d4729659..58b5fedf8 100644 --- a/docs/api/components_data_AlbumData.brs.html +++ b/docs/api/components_data_AlbumData.brs.html @@ -120,7 +120,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_ChannelData.brs.html b/docs/api/components_data_ChannelData.brs.html index 249d26ab8..7fda4c41c 100644 --- a/docs/api/components_data_ChannelData.brs.html +++ b/docs/api/components_data_ChannelData.brs.html @@ -137,7 +137,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_CollectionData.brs.html b/docs/api/components_data_CollectionData.brs.html index 8c59708e5..eddc98e65 100644 --- a/docs/api/components_data_CollectionData.brs.html +++ b/docs/api/components_data_CollectionData.brs.html @@ -153,7 +153,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_FolderData.brs.html b/docs/api/components_data_FolderData.brs.html index 842ddbbeb..e1417d72a 100644 --- a/docs/api/components_data_FolderData.brs.html +++ b/docs/api/components_data_FolderData.brs.html @@ -146,7 +146,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_GetFiltersTask.brs.html b/docs/api/components_data_GetFiltersTask.brs.html index 8eb5e5792..0ae4672bc 100644 --- a/docs/api/components_data_GetFiltersTask.brs.html +++ b/docs/api/components_data_GetFiltersTask.brs.html @@ -124,7 +124,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_HomeData.brs.html b/docs/api/components_data_HomeData.brs.html index b43f289a5..b916ed9ce 100644 --- a/docs/api/components_data_HomeData.brs.html +++ b/docs/api/components_data_HomeData.brs.html @@ -250,7 +250,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_ImageData.brs.html b/docs/api/components_data_ImageData.brs.html index 00482a830..ed49de6e1 100644 --- a/docs/api/components_data_ImageData.brs.html +++ b/docs/api/components_data_ImageData.brs.html @@ -120,7 +120,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_MovieData.brs.html b/docs/api/components_data_MovieData.brs.html index 590033686..736fd5fd6 100644 --- a/docs/api/components_data_MovieData.brs.html +++ b/docs/api/components_data_MovieData.brs.html @@ -193,7 +193,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_MusicAlbumData.brs.html b/docs/api/components_data_MusicAlbumData.brs.html index 0cef69e25..161987a23 100644 --- a/docs/api/components_data_MusicAlbumData.brs.html +++ b/docs/api/components_data_MusicAlbumData.brs.html @@ -128,7 +128,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_MusicAlbumSongListData.brs.html b/docs/api/components_data_MusicAlbumSongListData.brs.html index 07386c526..691fb1421 100644 --- a/docs/api/components_data_MusicAlbumSongListData.brs.html +++ b/docs/api/components_data_MusicAlbumSongListData.brs.html @@ -149,7 +149,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_MusicArtistData.brs.html b/docs/api/components_data_MusicArtistData.brs.html index 3c0aa8e15..a2ae8e728 100644 --- a/docs/api/components_data_MusicArtistData.brs.html +++ b/docs/api/components_data_MusicArtistData.brs.html @@ -152,7 +152,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_MusicSongData.brs.html b/docs/api/components_data_MusicSongData.brs.html index c99a65f0b..dbec7d80b 100644 --- a/docs/api/components_data_MusicSongData.brs.html +++ b/docs/api/components_data_MusicSongData.brs.html @@ -130,7 +130,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_OptionsButton.brs.html b/docs/api/components_data_OptionsButton.brs.html index e6d8d649d..1e41e7f83 100644 --- a/docs/api/components_data_OptionsButton.brs.html +++ b/docs/api/components_data_OptionsButton.brs.html @@ -120,7 +120,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_OptionsData.brs.html b/docs/api/components_data_OptionsData.brs.html index f1f67e5ba..dc2f0e06d 100644 --- a/docs/api/components_data_OptionsData.brs.html +++ b/docs/api/components_data_OptionsData.brs.html @@ -153,7 +153,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_PersonData.brs.html b/docs/api/components_data_PersonData.brs.html index 79e676937..6f4e647b9 100644 --- a/docs/api/components_data_PersonData.brs.html +++ b/docs/api/components_data_PersonData.brs.html @@ -149,7 +149,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_PhotoData.brs.html b/docs/api/components_data_PhotoData.brs.html index 395abcb6f..f6ab90c61 100644 --- a/docs/api/components_data_PhotoData.brs.html +++ b/docs/api/components_data_PhotoData.brs.html @@ -151,7 +151,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_PlaylistData.brs.html b/docs/api/components_data_PlaylistData.brs.html index 8a016aff1..b064d135a 100644 --- a/docs/api/components_data_PlaylistData.brs.html +++ b/docs/api/components_data_PlaylistData.brs.html @@ -128,7 +128,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_PublicUserData.brs.html b/docs/api/components_data_PublicUserData.brs.html index 71966a963..6b5180bb0 100644 --- a/docs/api/components_data_PublicUserData.brs.html +++ b/docs/api/components_data_PublicUserData.brs.html @@ -115,7 +115,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_SceneManager.brs.html b/docs/api/components_data_SceneManager.brs.html index 67d268c9f..73629a606 100644 --- a/docs/api/components_data_SceneManager.brs.html +++ b/docs/api/components_data_SceneManager.brs.html @@ -470,7 +470,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_ScheduleProgramData.brs.html b/docs/api/components_data_ScheduleProgramData.brs.html index 62979086e..e2fbd8a42 100644 --- a/docs/api/components_data_ScheduleProgramData.brs.html +++ b/docs/api/components_data_ScheduleProgramData.brs.html @@ -160,7 +160,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_SearchData.brs.html b/docs/api/components_data_SearchData.brs.html index c7dae4797..b03338b2f 100644 --- a/docs/api/components_data_SearchData.brs.html +++ b/docs/api/components_data_SearchData.brs.html @@ -128,7 +128,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_SeriesData.brs.html b/docs/api/components_data_SeriesData.brs.html index 5abc59379..fbe310f24 100644 --- a/docs/api/components_data_SeriesData.brs.html +++ b/docs/api/components_data_SeriesData.brs.html @@ -166,7 +166,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_TVEpisode.brs.html b/docs/api/components_data_TVEpisode.brs.html index ac7b3c07b..0c714a4b3 100644 --- a/docs/api/components_data_TVEpisode.brs.html +++ b/docs/api/components_data_TVEpisode.brs.html @@ -138,7 +138,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_TVEpisodeData.brs.html b/docs/api/components_data_TVEpisodeData.brs.html index 3de975406..90677e8da 100644 --- a/docs/api/components_data_TVEpisodeData.brs.html +++ b/docs/api/components_data_TVEpisodeData.brs.html @@ -131,7 +131,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_TVSeasonData.brs.html b/docs/api/components_data_TVSeasonData.brs.html index 87538925d..ddd07454e 100644 --- a/docs/api/components_data_TVSeasonData.brs.html +++ b/docs/api/components_data_TVSeasonData.brs.html @@ -131,7 +131,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_UserData.brs.html b/docs/api/components_data_UserData.brs.html index e0c4823c8..06fc976d8 100644 --- a/docs/api/components_data_UserData.brs.html +++ b/docs/api/components_data_UserData.brs.html @@ -177,7 +177,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_data_VideoData.brs.html b/docs/api/components_data_VideoData.brs.html index 6e2a8ef7b..55c0fcc75 100644 --- a/docs/api/components_data_VideoData.brs.html +++ b/docs/api/components_data_VideoData.brs.html @@ -138,7 +138,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_extras_ExtrasItem.brs.html b/docs/api/components_extras_ExtrasItem.brs.html index f225eb622..2864e4799 100644 --- a/docs/api/components_extras_ExtrasItem.brs.html +++ b/docs/api/components_extras_ExtrasItem.brs.html @@ -150,7 +150,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_extras_ExtrasRowList.brs.html b/docs/api/components_extras_ExtrasRowList.brs.html index 2aeea0f42..69c6e2371 100644 --- a/docs/api/components_extras_ExtrasRowList.brs.html +++ b/docs/api/components_extras_ExtrasRowList.brs.html @@ -322,7 +322,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_home_Home.brs.html b/docs/api/components_home_Home.brs.html index 624081e8e..0f9b4213e 100644 --- a/docs/api/components_home_Home.brs.html +++ b/docs/api/components_home_Home.brs.html @@ -133,7 +133,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_home_HomeItem.brs.html b/docs/api/components_home_HomeItem.brs.html index 901b51832..aefffaeea 100644 --- a/docs/api/components_home_HomeItem.brs.html +++ b/docs/api/components_home_HomeItem.brs.html @@ -409,7 +409,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_home_HomeRows.brs.html b/docs/api/components_home_HomeRows.brs.html index b6fb8067a..26c06e6ba 100644 --- a/docs/api/components_home_HomeRows.brs.html +++ b/docs/api/components_home_HomeRows.brs.html @@ -671,7 +671,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_home_LoadItemsTask.brs.html b/docs/api/components_home_LoadItemsTask.brs.html index 82f60479d..b3e335e38 100644 --- a/docs/api/components_home_LoadItemsTask.brs.html +++ b/docs/api/components_home_LoadItemsTask.brs.html @@ -380,7 +380,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_liveTv_LoadChannelsTask.brs.html b/docs/api/components_liveTv_LoadChannelsTask.brs.html index f219b57e0..3e63fedec 100644 --- a/docs/api/components_liveTv_LoadChannelsTask.brs.html +++ b/docs/api/components_liveTv_LoadChannelsTask.brs.html @@ -185,7 +185,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html b/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html index 1d3dbc6f5..5fa28242e 100644 --- a/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html +++ b/docs/api/components_liveTv_LoadProgramDetailsTask.brs.html @@ -157,7 +157,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_liveTv_LoadSheduleTask.brs.html b/docs/api/components_liveTv_LoadSheduleTask.brs.html index 450868175..1713ade4c 100644 --- a/docs/api/components_liveTv_LoadSheduleTask.brs.html +++ b/docs/api/components_liveTv_LoadSheduleTask.brs.html @@ -163,7 +163,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_liveTv_ProgramDetails.brs.html b/docs/api/components_liveTv_ProgramDetails.brs.html index 57a1ff375..83e10f020 100644 --- a/docs/api/components_liveTv_ProgramDetails.brs.html +++ b/docs/api/components_liveTv_ProgramDetails.brs.html @@ -487,7 +487,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_liveTv_RecordProgramTask.brs.html b/docs/api/components_liveTv_RecordProgramTask.brs.html index 202cfa5a3..e9cb50b64 100644 --- a/docs/api/components_liveTv_RecordProgramTask.brs.html +++ b/docs/api/components_liveTv_RecordProgramTask.brs.html @@ -173,7 +173,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_liveTv_schedule.brs.html b/docs/api/components_liveTv_schedule.brs.html index b39ad0f9a..c6e453d94 100644 --- a/docs/api/components_liveTv_schedule.brs.html +++ b/docs/api/components_liveTv_schedule.brs.html @@ -418,7 +418,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_login_UserItem.brs.html b/docs/api/components_login_UserItem.brs.html index 76b422bcb..17546129f 100644 --- a/docs/api/components_login_UserItem.brs.html +++ b/docs/api/components_login_UserItem.brs.html @@ -130,7 +130,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_login_UserRow.brs.html b/docs/api/components_login_UserRow.brs.html index 20f6f2bb2..89499523d 100644 --- a/docs/api/components_login_UserRow.brs.html +++ b/docs/api/components_login_UserRow.brs.html @@ -166,7 +166,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_login_UserSelect.brs.html b/docs/api/components_login_UserSelect.brs.html index a37de06b1..b9c5dcb28 100644 --- a/docs/api/components_login_UserSelect.brs.html +++ b/docs/api/components_login_UserSelect.brs.html @@ -154,7 +154,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_manager_QueueManager.brs.html b/docs/api/components_manager_QueueManager.brs.html index a1987474f..5f5704ab3 100644 --- a/docs/api/components_manager_QueueManager.brs.html +++ b/docs/api/components_manager_QueueManager.brs.html @@ -356,7 +356,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_manager_ViewCreator.brs.html b/docs/api/components_manager_ViewCreator.brs.html index 2167b4abd..0965efc1a 100644 --- a/docs/api/components_manager_ViewCreator.brs.html +++ b/docs/api/components_manager_ViewCreator.brs.html @@ -301,7 +301,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_mediaPlayers_AudioPlayer.brs.html b/docs/api/components_mediaPlayers_AudioPlayer.brs.html index 3a995c7bd..b6358bd74 100644 --- a/docs/api/components_mediaPlayers_AudioPlayer.brs.html +++ b/docs/api/components_mediaPlayers_AudioPlayer.brs.html @@ -156,7 +156,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_movies_AudioTrackListItem.brs.html b/docs/api/components_movies_AudioTrackListItem.brs.html index 8d58de5be..e9f32cd72 100644 --- a/docs/api/components_movies_AudioTrackListItem.brs.html +++ b/docs/api/components_movies_AudioTrackListItem.brs.html @@ -146,7 +146,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_movies_MovieDetails.brs.html b/docs/api/components_movies_MovieDetails.brs.html index d3847af14..4e49bf81b 100644 --- a/docs/api/components_movies_MovieDetails.brs.html +++ b/docs/api/components_movies_MovieDetails.brs.html @@ -503,7 +503,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_movies_MovieOptions.brs.html b/docs/api/components_movies_MovieOptions.brs.html index dc12d5959..e61dea77e 100644 --- a/docs/api/components_movies_MovieOptions.brs.html +++ b/docs/api/components_movies_MovieOptions.brs.html @@ -268,7 +268,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_movies_VideoTrackListItem.brs.html b/docs/api/components_movies_VideoTrackListItem.brs.html index 52f854898..4aa288f43 100644 --- a/docs/api/components_movies_VideoTrackListItem.brs.html +++ b/docs/api/components_movies_VideoTrackListItem.brs.html @@ -146,7 +146,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_AlbumGrid.brs.html b/docs/api/components_music_AlbumGrid.brs.html index 912f58897..fcd60f18a 100644 --- a/docs/api/components_music_AlbumGrid.brs.html +++ b/docs/api/components_music_AlbumGrid.brs.html @@ -182,7 +182,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_AlbumTrackList.brs.html b/docs/api/components_music_AlbumTrackList.brs.html index 217e61d28..1a6bcc9ca 100644 --- a/docs/api/components_music_AlbumTrackList.brs.html +++ b/docs/api/components_music_AlbumTrackList.brs.html @@ -138,7 +138,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_AlbumView.brs.html b/docs/api/components_music_AlbumView.brs.html index 771dcf93c..b69aaaa9b 100644 --- a/docs/api/components_music_AlbumView.brs.html +++ b/docs/api/components_music_AlbumView.brs.html @@ -290,7 +290,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_ArtistView.brs.html b/docs/api/components_music_ArtistView.brs.html index 6a23471d1..43b4f79d0 100644 --- a/docs/api/components_music_ArtistView.brs.html +++ b/docs/api/components_music_ArtistView.brs.html @@ -430,7 +430,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_AudioPlayerView.brs.html b/docs/api/components_music_AudioPlayerView.brs.html index f1df46922..d3de89e59 100644 --- a/docs/api/components_music_AudioPlayerView.brs.html +++ b/docs/api/components_music_AudioPlayerView.brs.html @@ -711,7 +711,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html b/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html index 7a7bd7bab..01217a744 100644 --- a/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html +++ b/docs/api/components_music_LoadScreenSaverTimeoutTask.brs.html @@ -121,7 +121,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_PlaylistView.brs.html b/docs/api/components_music_PlaylistView.brs.html index 00cb5cd9b..4f499db0a 100644 --- a/docs/api/components_music_PlaylistView.brs.html +++ b/docs/api/components_music_PlaylistView.brs.html @@ -281,7 +281,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_music_SongItem.brs.html b/docs/api/components_music_SongItem.brs.html index 88bd61220..60b8ba6f3 100644 --- a/docs/api/components_music_SongItem.brs.html +++ b/docs/api/components_music_SongItem.brs.html @@ -144,7 +144,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_options_OptionNode.brs.html b/docs/api/components_options_OptionNode.brs.html index db243c9e0..54704811d 100644 --- a/docs/api/components_options_OptionNode.brs.html +++ b/docs/api/components_options_OptionNode.brs.html @@ -115,7 +115,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_options_OptionsSlider.brs.html b/docs/api/components_options_OptionsSlider.brs.html index fd0289706..353f94dfe 100644 --- a/docs/api/components_options_OptionsSlider.brs.html +++ b/docs/api/components_options_OptionsSlider.brs.html @@ -154,7 +154,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_photos_LoadPhotoTask.brs.html b/docs/api/components_photos_LoadPhotoTask.brs.html index 813fc19a2..37c3f3855 100644 --- a/docs/api/components_photos_LoadPhotoTask.brs.html +++ b/docs/api/components_photos_LoadPhotoTask.brs.html @@ -133,7 +133,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_photos_PhotoDetails.brs.html b/docs/api/components_photos_PhotoDetails.brs.html index 2c02648a2..99afc71d9 100644 --- a/docs/api/components_photos_PhotoDetails.brs.html +++ b/docs/api/components_photos_PhotoDetails.brs.html @@ -239,7 +239,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_quickConnect_QuickConnect.brs.html b/docs/api/components_quickConnect_QuickConnect.brs.html index 5f0fa1ebd..c6b241173 100644 --- a/docs/api/components_quickConnect_QuickConnect.brs.html +++ b/docs/api/components_quickConnect_QuickConnect.brs.html @@ -130,7 +130,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_quickConnect_QuickConnectDialog.brs.html b/docs/api/components_quickConnect_QuickConnectDialog.brs.html index b44638a18..42b075493 100644 --- a/docs/api/components_quickConnect_QuickConnectDialog.brs.html +++ b/docs/api/components_quickConnect_QuickConnectDialog.brs.html @@ -184,7 +184,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_search_SearchResults.brs.html b/docs/api/components_search_SearchResults.brs.html index 5c5e9317d..b1cce099a 100644 --- a/docs/api/components_search_SearchResults.brs.html +++ b/docs/api/components_search_SearchResults.brs.html @@ -179,7 +179,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_search_SearchRow.brs.html b/docs/api/components_search_SearchRow.brs.html index ee43072a8..5063d0b90 100644 --- a/docs/api/components_search_SearchRow.brs.html +++ b/docs/api/components_search_SearchRow.brs.html @@ -208,7 +208,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_search_SearchTask.brs.html b/docs/api/components_search_SearchTask.brs.html index b8acf27bb..89a2e6ba9 100644 --- a/docs/api/components_search_SearchTask.brs.html +++ b/docs/api/components_search_SearchTask.brs.html @@ -128,7 +128,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_section_section.brs.html b/docs/api/components_section_section.brs.html index 096e7c02e..b3aec3011 100644 --- a/docs/api/components_section_section.brs.html +++ b/docs/api/components_section_section.brs.html @@ -210,7 +210,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_section_sectionScroller.brs.html b/docs/api/components_section_sectionScroller.brs.html index 9a58312dd..c448f5a51 100644 --- a/docs/api/components_section_sectionScroller.brs.html +++ b/docs/api/components_section_sectionScroller.brs.html @@ -173,7 +173,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_settings_settings.brs.html b/docs/api/components_settings_settings.brs.html index 0cb8018b4..4e5c244f8 100644 --- a/docs/api/components_settings_settings.brs.html +++ b/docs/api/components_settings_settings.brs.html @@ -342,7 +342,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVEpisodeRow.brs.html b/docs/api/components_tvshows_TVEpisodeRow.brs.html index d99086c51..80a6b5135 100644 --- a/docs/api/components_tvshows_TVEpisodeRow.brs.html +++ b/docs/api/components_tvshows_TVEpisodeRow.brs.html @@ -175,7 +175,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html b/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html index f6940298d..89eb42ea8 100644 --- a/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html +++ b/docs/api/components_tvshows_TVEpisodeRowWithOptions.brs.html @@ -236,7 +236,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVEpisodes.brs.html b/docs/api/components_tvshows_TVEpisodes.brs.html index 515a6b0cc..23fb4271c 100644 --- a/docs/api/components_tvshows_TVEpisodes.brs.html +++ b/docs/api/components_tvshows_TVEpisodes.brs.html @@ -231,7 +231,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVListDetails.brs.html b/docs/api/components_tvshows_TVListDetails.brs.html index 1d2b1e933..9a551a27d 100644 --- a/docs/api/components_tvshows_TVListDetails.brs.html +++ b/docs/api/components_tvshows_TVListDetails.brs.html @@ -304,7 +304,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVListOptions.brs.html b/docs/api/components_tvshows_TVListOptions.brs.html index 90b74ba45..c1e5991fd 100644 --- a/docs/api/components_tvshows_TVListOptions.brs.html +++ b/docs/api/components_tvshows_TVListOptions.brs.html @@ -267,7 +267,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVSeasonRow.brs.html b/docs/api/components_tvshows_TVSeasonRow.brs.html index 127738e8f..fd9a66c63 100644 --- a/docs/api/components_tvshows_TVSeasonRow.brs.html +++ b/docs/api/components_tvshows_TVSeasonRow.brs.html @@ -161,7 +161,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVShowDescription.brs.html b/docs/api/components_tvshows_TVShowDescription.brs.html index 036ed4136..c34aff1b1 100644 --- a/docs/api/components_tvshows_TVShowDescription.brs.html +++ b/docs/api/components_tvshows_TVShowDescription.brs.html @@ -245,7 +245,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_tvshows_TVShowDetails.brs.html b/docs/api/components_tvshows_TVShowDetails.brs.html index ddae88606..9ecb51b8b 100644 --- a/docs/api/components_tvshows_TVShowDetails.brs.html +++ b/docs/api/components_tvshows_TVShowDetails.brs.html @@ -342,7 +342,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/components_video_VideoPlayerView.brs.html b/docs/api/components_video_VideoPlayerView.brs.html index e5cc4c7ec..2e9e46429 100644 --- a/docs/api/components_video_VideoPlayerView.brs.html +++ b/docs/api/components_video_VideoPlayerView.brs.html @@ -517,7 +517,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/index.html b/docs/api/index.html index 987555f8c..0cec8f59e 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -149,7 +149,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AlbumData.html b/docs/api/module-AlbumData.html index 37dfeda0a..d555336dc 100644 --- a/docs/api/module-AlbumData.html +++ b/docs/api/module-AlbumData.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AlbumGrid.html b/docs/api/module-AlbumGrid.html index 880c4aa84..6e9afd1a8 100644 --- a/docs/api/module-AlbumGrid.html +++ b/docs/api/module-AlbumGrid.html @@ -585,7 +585,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AlbumTrackList.html b/docs/api/module-AlbumTrackList.html index 9571bfadf..c227f547e 100644 --- a/docs/api/module-AlbumTrackList.html +++ b/docs/api/module-AlbumTrackList.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AlbumView.html b/docs/api/module-AlbumView.html index 5aeb5d1d2..e6c1434c8 100644 --- a/docs/api/module-AlbumView.html +++ b/docs/api/module-AlbumView.html @@ -1691,7 +1691,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Alpha.html b/docs/api/module-Alpha.html index 2c952c5e3..2346d0575 100644 --- a/docs/api/module-Alpha.html +++ b/docs/api/module-Alpha.html @@ -481,7 +481,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ArtistView.html b/docs/api/module-ArtistView.html index b7c18abde..33c78b6e9 100644 --- a/docs/api/module-ArtistView.html +++ b/docs/api/module-ArtistView.html @@ -2939,7 +2939,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AudioPlayer.html b/docs/api/module-AudioPlayer.html index 2625a8496..aae1eebc6 100644 --- a/docs/api/module-AudioPlayer.html +++ b/docs/api/module-AudioPlayer.html @@ -569,7 +569,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AudioPlayerView.html b/docs/api/module-AudioPlayerView.html index 880c68a62..f2009effb 100644 --- a/docs/api/module-AudioPlayerView.html +++ b/docs/api/module-AudioPlayerView.html @@ -4519,7 +4519,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-AudioTrackListItem.html b/docs/api/module-AudioTrackListItem.html index 292e65045..fa12980d0 100644 --- a/docs/api/module-AudioTrackListItem.html +++ b/docs/api/module-AudioTrackListItem.html @@ -515,7 +515,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ButtonGroupHoriz.html b/docs/api/module-ButtonGroupHoriz.html index 8ed3fb7ee..fd193bb6d 100644 --- a/docs/api/module-ButtonGroupHoriz.html +++ b/docs/api/module-ButtonGroupHoriz.html @@ -481,7 +481,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ChannelData.html b/docs/api/module-ChannelData.html index 7e9fcbbf9..16768e943 100644 --- a/docs/api/module-ChannelData.html +++ b/docs/api/module-ChannelData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-CollectionData.html b/docs/api/module-CollectionData.html index 736d8ed49..ab079e9ef 100644 --- a/docs/api/module-CollectionData.html +++ b/docs/api/module-CollectionData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ConfigData.html b/docs/api/module-ConfigData.html index 178c49cf1..4b85d7141 100644 --- a/docs/api/module-ConfigData.html +++ b/docs/api/module-ConfigData.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ConfigItem.html b/docs/api/module-ConfigItem.html index 9b78453c4..46602ad64 100644 --- a/docs/api/module-ConfigItem.html +++ b/docs/api/module-ConfigItem.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ConfigList.html b/docs/api/module-ConfigList.html index fcfad2387..c1fa93b0d 100644 --- a/docs/api/module-ConfigList.html +++ b/docs/api/module-ConfigList.html @@ -873,7 +873,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ExtrasItem.html b/docs/api/module-ExtrasItem.html index 346c1334e..cb6a2b71f 100644 --- a/docs/api/module-ExtrasItem.html +++ b/docs/api/module-ExtrasItem.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ExtrasRowList.html b/docs/api/module-ExtrasRowList.html index cfcf9826e..95a7d6262 100644 --- a/docs/api/module-ExtrasRowList.html +++ b/docs/api/module-ExtrasRowList.html @@ -1947,7 +1947,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-FavoriteItemsTask.html b/docs/api/module-FavoriteItemsTask.html index 8e5447e89..c7cbf7f06 100644 --- a/docs/api/module-FavoriteItemsTask.html +++ b/docs/api/module-FavoriteItemsTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-FolderData.html b/docs/api/module-FolderData.html index 7623b2f4c..22551d4da 100644 --- a/docs/api/module-FolderData.html +++ b/docs/api/module-FolderData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-GetFiltersTask.html b/docs/api/module-GetFiltersTask.html index aac5cd1e8..5791a95dd 100644 --- a/docs/api/module-GetFiltersTask.html +++ b/docs/api/module-GetFiltersTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-GetNextEpisodeTask.html b/docs/api/module-GetNextEpisodeTask.html index 7c69b7fea..d892fb9cc 100644 --- a/docs/api/module-GetNextEpisodeTask.html +++ b/docs/api/module-GetNextEpisodeTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-GetPlaybackInfoTask.html b/docs/api/module-GetPlaybackInfoTask.html index 2c46121c2..d4d59d6b3 100644 --- a/docs/api/module-GetPlaybackInfoTask.html +++ b/docs/api/module-GetPlaybackInfoTask.html @@ -1114,7 +1114,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-GetShuffleEpisodesTask.html b/docs/api/module-GetShuffleEpisodesTask.html index efbcf6c18..b203651cb 100644 --- a/docs/api/module-GetShuffleEpisodesTask.html +++ b/docs/api/module-GetShuffleEpisodesTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-GridItem.html b/docs/api/module-GridItem.html index 4ff6bf950..be5291a94 100644 --- a/docs/api/module-GridItem.html +++ b/docs/api/module-GridItem.html @@ -731,7 +731,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-GridItemSmall.html b/docs/api/module-GridItemSmall.html index 6a90a60bd..9e9885ddb 100644 --- a/docs/api/module-GridItemSmall.html +++ b/docs/api/module-GridItemSmall.html @@ -619,7 +619,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Home.html b/docs/api/module-Home.html index a54a5eff8..18adc8f1e 100644 --- a/docs/api/module-Home.html +++ b/docs/api/module-Home.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-HomeData.html b/docs/api/module-HomeData.html index 1b689708d..b4123c436 100644 --- a/docs/api/module-HomeData.html +++ b/docs/api/module-HomeData.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-HomeItem.html b/docs/api/module-HomeItem.html index 9a2987551..c4893c3d5 100644 --- a/docs/api/module-HomeItem.html +++ b/docs/api/module-HomeItem.html @@ -781,7 +781,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-HomeRows.html b/docs/api/module-HomeRows.html index b5c4c7167..40c1429ac 100644 --- a/docs/api/module-HomeRows.html +++ b/docs/api/module-HomeRows.html @@ -3592,7 +3592,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-IconButton.html b/docs/api/module-IconButton.html index e472cb125..15be095e3 100644 --- a/docs/api/module-IconButton.html +++ b/docs/api/module-IconButton.html @@ -1313,7 +1313,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Image.html b/docs/api/module-Image.html index e87e63db0..c0328aa55 100644 --- a/docs/api/module-Image.html +++ b/docs/api/module-Image.html @@ -1083,7 +1083,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ImageData.html b/docs/api/module-ImageData.html index a2d966340..af0580ca8 100644 --- a/docs/api/module-ImageData.html +++ b/docs/api/module-ImageData.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ItemGrid.html b/docs/api/module-ItemGrid.html index fd6b8e409..1c085dd25 100644 --- a/docs/api/module-ItemGrid.html +++ b/docs/api/module-ItemGrid.html @@ -3889,7 +3889,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ItemGridOptions.html b/docs/api/module-ItemGridOptions.html index bea32fbcf..7f2e0f484 100644 --- a/docs/api/module-ItemGridOptions.html +++ b/docs/api/module-ItemGridOptions.html @@ -1525,7 +1525,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Items.html b/docs/api/module-Items.html index 6cfb0abb5..fb6df8fef 100644 --- a/docs/api/module-Items.html +++ b/docs/api/module-Items.html @@ -3751,7 +3751,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFButton.html b/docs/api/module-JFButton.html index 6b94451e8..d8ab7784c 100644 --- a/docs/api/module-JFButton.html +++ b/docs/api/module-JFButton.html @@ -411,7 +411,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFButtons.html b/docs/api/module-JFButtons.html index 474c06caa..1f1964afe 100644 --- a/docs/api/module-JFButtons.html +++ b/docs/api/module-JFButtons.html @@ -1227,7 +1227,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFGroup.html b/docs/api/module-JFGroup.html index 7578b2ec6..ba2f28ee0 100644 --- a/docs/api/module-JFGroup.html +++ b/docs/api/module-JFGroup.html @@ -481,7 +481,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFMessageDialog.html b/docs/api/module-JFMessageDialog.html index b1e8ec0e1..828870c88 100644 --- a/docs/api/module-JFMessageDialog.html +++ b/docs/api/module-JFMessageDialog.html @@ -793,7 +793,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFOverhang.html b/docs/api/module-JFOverhang.html index a9b1e25a5..7edddff13 100644 --- a/docs/api/module-JFOverhang.html +++ b/docs/api/module-JFOverhang.html @@ -1239,7 +1239,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFScene.html b/docs/api/module-JFScene.html index 19faf757b..212184076 100644 --- a/docs/api/module-JFScene.html +++ b/docs/api/module-JFScene.html @@ -481,7 +481,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFScreen.html b/docs/api/module-JFScreen.html index 621370cc2..577be4c7d 100644 --- a/docs/api/module-JFScreen.html +++ b/docs/api/module-JFScreen.html @@ -523,7 +523,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFServer.html b/docs/api/module-JFServer.html index cd97da40b..75dba5430 100644 --- a/docs/api/module-JFServer.html +++ b/docs/api/module-JFServer.html @@ -715,7 +715,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-JFVideo.html b/docs/api/module-JFVideo.html index be4241a00..8e514ed02 100644 --- a/docs/api/module-JFVideo.html +++ b/docs/api/module-JFVideo.html @@ -2143,7 +2143,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ListPoster.html b/docs/api/module-ListPoster.html index 14dc9cb7d..d9198b910 100644 --- a/docs/api/module-ListPoster.html +++ b/docs/api/module-ListPoster.html @@ -619,7 +619,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadChannelsTask.html b/docs/api/module-LoadChannelsTask.html index 1e26d61ef..f54929f8a 100644 --- a/docs/api/module-LoadChannelsTask.html +++ b/docs/api/module-LoadChannelsTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadItemsTask.html b/docs/api/module-LoadItemsTask.html index e0291afcd..97362ac65 100644 --- a/docs/api/module-LoadItemsTask.html +++ b/docs/api/module-LoadItemsTask.html @@ -609,7 +609,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadItemsTask2.html b/docs/api/module-LoadItemsTask2.html index 0c10da9f6..0fbfc2010 100644 --- a/docs/api/module-LoadItemsTask2.html +++ b/docs/api/module-LoadItemsTask2.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadPhotoTask.html b/docs/api/module-LoadPhotoTask.html index e1cd0319c..782d57da5 100644 --- a/docs/api/module-LoadPhotoTask.html +++ b/docs/api/module-LoadPhotoTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadProgramDetailsTask.html b/docs/api/module-LoadProgramDetailsTask.html index 38bc96cd5..027dbbbeb 100644 --- a/docs/api/module-LoadProgramDetailsTask.html +++ b/docs/api/module-LoadProgramDetailsTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadScreenSaverTimeoutTask.html b/docs/api/module-LoadScreenSaverTimeoutTask.html index cdd0ed746..081ab3ccb 100644 --- a/docs/api/module-LoadScreenSaverTimeoutTask.html +++ b/docs/api/module-LoadScreenSaverTimeoutTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadSheduleTask.html b/docs/api/module-LoadSheduleTask.html index fce815e39..384ce500c 100644 --- a/docs/api/module-LoadSheduleTask.html +++ b/docs/api/module-LoadSheduleTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoadVideoContentTask.html b/docs/api/module-LoadVideoContentTask.html index 1e715dacd..7b2e6d871 100644 --- a/docs/api/module-LoadVideoContentTask.html +++ b/docs/api/module-LoadVideoContentTask.html @@ -2537,7 +2537,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-LoginScene.html b/docs/api/module-LoginScene.html index 78b34c450..07d1821ab 100644 --- a/docs/api/module-LoginScene.html +++ b/docs/api/module-LoginScene.html @@ -481,7 +481,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Main.html b/docs/api/module-Main.html index f31c06abd..68e387970 100644 --- a/docs/api/module-Main.html +++ b/docs/api/module-Main.html @@ -353,7 +353,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MovieData.html b/docs/api/module-MovieData.html index 1d41b8181..2b7a9ca5c 100644 --- a/docs/api/module-MovieData.html +++ b/docs/api/module-MovieData.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MovieDetails.html b/docs/api/module-MovieDetails.html index e021f6281..3b1dccf7a 100644 --- a/docs/api/module-MovieDetails.html +++ b/docs/api/module-MovieDetails.html @@ -2219,7 +2219,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MovieLibraryView.html b/docs/api/module-MovieLibraryView.html index 9498167ae..36328e302 100644 --- a/docs/api/module-MovieLibraryView.html +++ b/docs/api/module-MovieLibraryView.html @@ -4483,7 +4483,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MovieOptions.html b/docs/api/module-MovieOptions.html index 192db5ba1..fe5a19fdf 100644 --- a/docs/api/module-MovieOptions.html +++ b/docs/api/module-MovieOptions.html @@ -693,7 +693,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MusicAlbumData.html b/docs/api/module-MusicAlbumData.html index 704b0e833..bb08d4eac 100644 --- a/docs/api/module-MusicAlbumData.html +++ b/docs/api/module-MusicAlbumData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MusicAlbumSongListData.html b/docs/api/module-MusicAlbumSongListData.html index 6ffd8eb5b..79c07cffb 100644 --- a/docs/api/module-MusicAlbumSongListData.html +++ b/docs/api/module-MusicAlbumSongListData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MusicArtistData.html b/docs/api/module-MusicArtistData.html index 73bef4e51..827aea115 100644 --- a/docs/api/module-MusicArtistData.html +++ b/docs/api/module-MusicArtistData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MusicArtistGridItem.html b/docs/api/module-MusicArtistGridItem.html index 20585ceb8..2241869e7 100644 --- a/docs/api/module-MusicArtistGridItem.html +++ b/docs/api/module-MusicArtistGridItem.html @@ -623,7 +623,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MusicLibraryView.html b/docs/api/module-MusicLibraryView.html index 6362e4c27..b0b9c5ac1 100644 --- a/docs/api/module-MusicLibraryView.html +++ b/docs/api/module-MusicLibraryView.html @@ -4075,7 +4075,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-MusicSongData.html b/docs/api/module-MusicSongData.html index 8c4df7116..59394d2b3 100644 --- a/docs/api/module-MusicSongData.html +++ b/docs/api/module-MusicSongData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-OptionNode.html b/docs/api/module-OptionNode.html index 6b7b5ccf5..3cfc83f3a 100644 --- a/docs/api/module-OptionNode.html +++ b/docs/api/module-OptionNode.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-OptionsButton.html b/docs/api/module-OptionsButton.html index 564b2843e..60ec41aed 100644 --- a/docs/api/module-OptionsButton.html +++ b/docs/api/module-OptionsButton.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-OptionsData.html b/docs/api/module-OptionsData.html index a1ad41ead..b50b80250 100644 --- a/docs/api/module-OptionsData.html +++ b/docs/api/module-OptionsData.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-OptionsSlider.html b/docs/api/module-OptionsSlider.html index 5ed0792bd..10fe3a2fd 100644 --- a/docs/api/module-OptionsSlider.html +++ b/docs/api/module-OptionsSlider.html @@ -585,7 +585,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-OverviewDialog.html b/docs/api/module-OverviewDialog.html index f5b050be6..d9af26f2a 100644 --- a/docs/api/module-OverviewDialog.html +++ b/docs/api/module-OverviewDialog.html @@ -585,7 +585,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PersonData.html b/docs/api/module-PersonData.html index e4aef2fa4..0c3740066 100644 --- a/docs/api/module-PersonData.html +++ b/docs/api/module-PersonData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PersonDetails.html b/docs/api/module-PersonDetails.html index 925c2c6c2..13161968f 100644 --- a/docs/api/module-PersonDetails.html +++ b/docs/api/module-PersonDetails.html @@ -1259,7 +1259,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PhotoData.html b/docs/api/module-PhotoData.html index 37ce92752..319582888 100644 --- a/docs/api/module-PhotoData.html +++ b/docs/api/module-PhotoData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PhotoDetails.html b/docs/api/module-PhotoDetails.html index f55f31bed..a3741b94a 100644 --- a/docs/api/module-PhotoDetails.html +++ b/docs/api/module-PhotoDetails.html @@ -1051,7 +1051,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PlaybackDialog.html b/docs/api/module-PlaybackDialog.html index 87d5cdef3..9557750bc 100644 --- a/docs/api/module-PlaybackDialog.html +++ b/docs/api/module-PlaybackDialog.html @@ -377,7 +377,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PlayedCheckmark.html b/docs/api/module-PlayedCheckmark.html index 7a0c61798..97f304880 100644 --- a/docs/api/module-PlayedCheckmark.html +++ b/docs/api/module-PlayedCheckmark.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PlaylistData.html b/docs/api/module-PlaylistData.html index 84fc7a6ff..79df3cc01 100644 --- a/docs/api/module-PlaylistData.html +++ b/docs/api/module-PlaylistData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PlaylistView.html b/docs/api/module-PlaylistView.html index 3690d8604..c3587d2f0 100644 --- a/docs/api/module-PlaylistView.html +++ b/docs/api/module-PlaylistView.html @@ -1691,7 +1691,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PlaystateTask.html b/docs/api/module-PlaystateTask.html index 840dc37c8..a05f7d91d 100644 --- a/docs/api/module-PlaystateTask.html +++ b/docs/api/module-PlaystateTask.html @@ -581,7 +581,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ProgramDetails.html b/docs/api/module-ProgramDetails.html index edcd2aafa..1808007ae 100644 --- a/docs/api/module-ProgramDetails.html +++ b/docs/api/module-ProgramDetails.html @@ -1539,7 +1539,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-PublicUserData.html b/docs/api/module-PublicUserData.html index 26bf0a6af..b24a47102 100644 --- a/docs/api/module-PublicUserData.html +++ b/docs/api/module-PublicUserData.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-QueueManager.html b/docs/api/module-QueueManager.html index 9e7b7e864..01df3c969 100644 --- a/docs/api/module-QueueManager.html +++ b/docs/api/module-QueueManager.html @@ -4097,7 +4097,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-QuickConnect.html b/docs/api/module-QuickConnect.html index 54b8075ed..37954c26d 100644 --- a/docs/api/module-QuickConnect.html +++ b/docs/api/module-QuickConnect.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-QuickConnectDialog.html b/docs/api/module-QuickConnectDialog.html index 1f2bbc651..aa106c370 100644 --- a/docs/api/module-QuickConnectDialog.html +++ b/docs/api/module-QuickConnectDialog.html @@ -897,7 +897,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-RadioDialog.html b/docs/api/module-RadioDialog.html index 32eacb370..73d2a1273 100644 --- a/docs/api/module-RadioDialog.html +++ b/docs/api/module-RadioDialog.html @@ -1125,7 +1125,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-RecordProgramTask.html b/docs/api/module-RecordProgramTask.html index 556381f87..39cbf94c3 100644 --- a/docs/api/module-RecordProgramTask.html +++ b/docs/api/module-RecordProgramTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SceneManager.html b/docs/api/module-SceneManager.html index c91af5837..9cd6c06cf 100644 --- a/docs/api/module-SceneManager.html +++ b/docs/api/module-SceneManager.html @@ -3369,7 +3369,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ScheduleProgramData.html b/docs/api/module-ScheduleProgramData.html index 58c79e8fd..00613ac74 100644 --- a/docs/api/module-ScheduleProgramData.html +++ b/docs/api/module-ScheduleProgramData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SearchBox.html b/docs/api/module-SearchBox.html index 29efe1a16..506e93ecb 100644 --- a/docs/api/module-SearchBox.html +++ b/docs/api/module-SearchBox.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SearchData.html b/docs/api/module-SearchData.html index 210795da9..a6ff9a9c3 100644 --- a/docs/api/module-SearchData.html +++ b/docs/api/module-SearchData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SearchResults.html b/docs/api/module-SearchResults.html index ae8c4692b..a1a0032b2 100644 --- a/docs/api/module-SearchResults.html +++ b/docs/api/module-SearchResults.html @@ -689,7 +689,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SearchRow.html b/docs/api/module-SearchRow.html index a138fea0d..17c35ee9b 100644 --- a/docs/api/module-SearchRow.html +++ b/docs/api/module-SearchRow.html @@ -713,7 +713,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SearchTask.html b/docs/api/module-SearchTask.html index 0b6c58b4f..8f082092c 100644 --- a/docs/api/module-SearchTask.html +++ b/docs/api/module-SearchTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SeriesData.html b/docs/api/module-SeriesData.html index 780d7b5a1..478b75547 100644 --- a/docs/api/module-SeriesData.html +++ b/docs/api/module-SeriesData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ServerDiscoveryTask.html b/docs/api/module-ServerDiscoveryTask.html index 7ec62d51b..91badd7d7 100644 --- a/docs/api/module-ServerDiscoveryTask.html +++ b/docs/api/module-ServerDiscoveryTask.html @@ -1081,7 +1081,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SetServerScreen.html b/docs/api/module-SetServerScreen.html index 7b4bc1c8b..426038168 100644 --- a/docs/api/module-SetServerScreen.html +++ b/docs/api/module-SetServerScreen.html @@ -1051,7 +1051,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ShowScenes.html b/docs/api/module-ShowScenes.html index 53bc60d01..0bf6eb981 100644 --- a/docs/api/module-ShowScenes.html +++ b/docs/api/module-ShowScenes.html @@ -3685,7 +3685,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-SongItem.html b/docs/api/module-SongItem.html index ec1cf2daa..f7d01a11e 100644 --- a/docs/api/module-SongItem.html +++ b/docs/api/module-SongItem.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Spinner.html b/docs/api/module-Spinner.html index 733b0a9e7..3ae300c7b 100644 --- a/docs/api/module-Spinner.html +++ b/docs/api/module-Spinner.html @@ -303,7 +303,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-StandardDialog.html b/docs/api/module-StandardDialog.html index 4d61b14ec..a3ee9ce83 100644 --- a/docs/api/module-StandardDialog.html +++ b/docs/api/module-StandardDialog.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-Subtitles.html b/docs/api/module-Subtitles.html index 50521da4b..55b148392 100644 --- a/docs/api/module-Subtitles.html +++ b/docs/api/module-Subtitles.html @@ -2163,7 +2163,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVEpisode.html b/docs/api/module-TVEpisode.html index 411e46c45..52df617df 100644 --- a/docs/api/module-TVEpisode.html +++ b/docs/api/module-TVEpisode.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVEpisodeData.html b/docs/api/module-TVEpisodeData.html index 82eedf525..ed02f9d03 100644 --- a/docs/api/module-TVEpisodeData.html +++ b/docs/api/module-TVEpisodeData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVEpisodeRow.html b/docs/api/module-TVEpisodeRow.html index e2d06300a..45743597c 100644 --- a/docs/api/module-TVEpisodeRow.html +++ b/docs/api/module-TVEpisodeRow.html @@ -793,7 +793,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVEpisodeRowWithOptions.html b/docs/api/module-TVEpisodeRowWithOptions.html index c14bfde2a..5dcc81ea3 100644 --- a/docs/api/module-TVEpisodeRowWithOptions.html +++ b/docs/api/module-TVEpisodeRowWithOptions.html @@ -1213,7 +1213,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVEpisodes.html b/docs/api/module-TVEpisodes.html index bec999369..9c36e3d6d 100644 --- a/docs/api/module-TVEpisodes.html +++ b/docs/api/module-TVEpisodes.html @@ -801,7 +801,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVListDetails.html b/docs/api/module-TVListDetails.html index 2e35ff596..72224ab34 100644 --- a/docs/api/module-TVListDetails.html +++ b/docs/api/module-TVListDetails.html @@ -1217,7 +1217,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVListOptions.html b/docs/api/module-TVListOptions.html index 488b012b4..4b5300035 100644 --- a/docs/api/module-TVListOptions.html +++ b/docs/api/module-TVListOptions.html @@ -693,7 +693,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVSeasonData.html b/docs/api/module-TVSeasonData.html index c2008442f..c9426608a 100644 --- a/docs/api/module-TVSeasonData.html +++ b/docs/api/module-TVSeasonData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVSeasonRow.html b/docs/api/module-TVSeasonRow.html index c8bcdf55b..7488e93c8 100644 --- a/docs/api/module-TVSeasonRow.html +++ b/docs/api/module-TVSeasonRow.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVShowDescription.html b/docs/api/module-TVShowDescription.html index e13f1cb08..5085d8997 100644 --- a/docs/api/module-TVShowDescription.html +++ b/docs/api/module-TVShowDescription.html @@ -1051,7 +1051,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TVShowDetails.html b/docs/api/module-TVShowDetails.html index 7a3584f3e..d956131d7 100644 --- a/docs/api/module-TVShowDetails.html +++ b/docs/api/module-TVShowDetails.html @@ -1333,7 +1333,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-TextSizeTask.html b/docs/api/module-TextSizeTask.html index c93a7e622..badffcc1b 100644 --- a/docs/api/module-TextSizeTask.html +++ b/docs/api/module-TextSizeTask.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-UserData.html b/docs/api/module-UserData.html index 0e4be24e6..ea8631ded 100644 --- a/docs/api/module-UserData.html +++ b/docs/api/module-UserData.html @@ -1409,7 +1409,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-UserItem.html b/docs/api/module-UserItem.html index dc3cd6e2b..d43e2f010 100644 --- a/docs/api/module-UserItem.html +++ b/docs/api/module-UserItem.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-UserLibrary.html b/docs/api/module-UserLibrary.html index 5a749c827..809f83074 100644 --- a/docs/api/module-UserLibrary.html +++ b/docs/api/module-UserLibrary.html @@ -815,7 +815,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-UserRow.html b/docs/api/module-UserRow.html index 623f1b22c..737df7c3d 100644 --- a/docs/api/module-UserRow.html +++ b/docs/api/module-UserRow.html @@ -793,7 +793,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-UserSelect.html b/docs/api/module-UserSelect.html index 6119cfaf6..3369ec866 100644 --- a/docs/api/module-UserSelect.html +++ b/docs/api/module-UserSelect.html @@ -689,7 +689,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-VideoData.html b/docs/api/module-VideoData.html index 2d2c0b656..1e87bc981 100644 --- a/docs/api/module-VideoData.html +++ b/docs/api/module-VideoData.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-VideoPlayer.html b/docs/api/module-VideoPlayer.html index 5464705ea..290475d2e 100644 --- a/docs/api/module-VideoPlayer.html +++ b/docs/api/module-VideoPlayer.html @@ -2870,7 +2870,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-VideoPlayerView.html b/docs/api/module-VideoPlayerView.html index 0530646ca..78de7a6c4 100644 --- a/docs/api/module-VideoPlayerView.html +++ b/docs/api/module-VideoPlayerView.html @@ -2833,7 +2833,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-VideoTrackListItem.html b/docs/api/module-VideoTrackListItem.html index 1d617a226..6c6c7a062 100644 --- a/docs/api/module-VideoTrackListItem.html +++ b/docs/api/module-VideoTrackListItem.html @@ -515,7 +515,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-ViewCreator.html b/docs/api/module-ViewCreator.html index eecd5ff20..b00539ca0 100644 --- a/docs/api/module-ViewCreator.html +++ b/docs/api/module-ViewCreator.html @@ -1220,7 +1220,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-WhatsNewDialog.html b/docs/api/module-WhatsNewDialog.html index fc75a1bc3..960034901 100644 --- a/docs/api/module-WhatsNewDialog.html +++ b/docs/api/module-WhatsNewDialog.html @@ -407,7 +407,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-baserequest.html b/docs/api/module-baserequest.html index e03276171..f29c20337 100644 --- a/docs/api/module-baserequest.html +++ b/docs/api/module-baserequest.html @@ -2617,7 +2617,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-captionTask.html b/docs/api/module-captionTask.html index 018aa35f0..c8e81d5b2 100644 --- a/docs/api/module-captionTask.html +++ b/docs/api/module-captionTask.html @@ -1539,7 +1539,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-config.html b/docs/api/module-config.html index 9375a7151..47c9b642f 100644 --- a/docs/api/module-config.html +++ b/docs/api/module-config.html @@ -2570,7 +2570,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-deviceCapabilities.html b/docs/api/module-deviceCapabilities.html index 4aaf0df3e..5de7d54f8 100644 --- a/docs/api/module-deviceCapabilities.html +++ b/docs/api/module-deviceCapabilities.html @@ -1405,7 +1405,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-globals.html b/docs/api/module-globals.html index 339cac673..0267ec74f 100644 --- a/docs/api/module-globals.html +++ b/docs/api/module-globals.html @@ -523,7 +523,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-migrations.html b/docs/api/module-migrations.html index 4a5f40e04..a5e630152 100644 --- a/docs/api/module-migrations.html +++ b/docs/api/module-migrations.html @@ -461,7 +461,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-misc.html b/docs/api/module-misc.html index 963aaf5e4..d21dcf175 100644 --- a/docs/api/module-misc.html +++ b/docs/api/module-misc.html @@ -5310,7 +5310,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-schedule.html b/docs/api/module-schedule.html index 969e78c54..06672c56a 100644 --- a/docs/api/module-schedule.html +++ b/docs/api/module-schedule.html @@ -1919,7 +1919,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-section.html b/docs/api/module-section.html index b2239e1cf..e0f3a1593 100644 --- a/docs/api/module-section.html +++ b/docs/api/module-section.html @@ -1343,7 +1343,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-sectionScroller.html b/docs/api/module-sectionScroller.html index fd14d699e..e570c3dae 100644 --- a/docs/api/module-sectionScroller.html +++ b/docs/api/module-sectionScroller.html @@ -511,7 +511,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-settings.html b/docs/api/module-settings.html index a4ba364e9..0617c9e7e 100644 --- a/docs/api/module-settings.html +++ b/docs/api/module-settings.html @@ -1259,7 +1259,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/module-userauth.html b/docs/api/module-userauth.html index 247c74d3a..fa2cb74a5 100644 --- a/docs/api/module-userauth.html +++ b/docs/api/module-userauth.html @@ -1553,7 +1553,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/modules.list.html b/docs/api/modules.list.html index f27b6dd5a..741473673 100644 --- a/docs/api/modules.list.html +++ b/docs/api/modules.list.html @@ -190,7 +190,7 @@ Documentation generated by JSDoc 4.0.2 - on Oct 27th 2023 + on Oct 28th 2023 using the DocStrap template. diff --git a/docs/api/quicksearch.html b/docs/api/quicksearch.html index c5b2b1db1..6f8434443 100644 --- a/docs/api/quicksearch.html +++ b/docs/api/quicksearch.html @@ -7,7 +7,7 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/module-schedule.html b/docs/api/module-schedule.html index 06672c56a..a17c95402 100644 --- a/docs/api/module-schedule.html +++ b/docs/api/module-schedule.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-section.html b/docs/api/module-section.html index e0f3a1593..669e248c6 100644 --- a/docs/api/module-section.html +++ b/docs/api/module-section.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-sectionScroller.html b/docs/api/module-sectionScroller.html index e570c3dae..d217204b8 100644 --- a/docs/api/module-sectionScroller.html +++ b/docs/api/module-sectionScroller.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-settings.html b/docs/api/module-settings.html index 0617c9e7e..f006999f9 100644 --- a/docs/api/module-settings.html +++ b/docs/api/module-settings.html @@ -33,7 +33,7 @@ diff --git a/docs/api/module-userauth.html b/docs/api/module-userauth.html index fa2cb74a5..7c619c83b 100644 --- a/docs/api/module-userauth.html +++ b/docs/api/module-userauth.html @@ -33,7 +33,7 @@ diff --git a/docs/api/modules.list.html b/docs/api/modules.list.html index 741473673..2248233cc 100644 --- a/docs/api/modules.list.html +++ b/docs/api/modules.list.html @@ -33,7 +33,7 @@ diff --git a/docs/api/quicksearch.html b/docs/api/quicksearch.html index 9c204d027..1316de3ce 100644 --- a/docs/api/quicksearch.html +++ b/docs/api/quicksearch.html @@ -7,7 +7,7 @@ + + + + + + + + + + + + + + + + + + + + +