mirror of
https://github.com/jellyfin/jellyfin-roku.git
synced 2024-11-23 06:09:41 +00:00
move spinner to JFScene and migrate all other screnes to use it + use booleans on JFScene to control spinner + resize spinner to be similar size as video player spinner
This commit is contained in:
parent
26cf3517f8
commit
d2fcc932b2
@ -64,9 +64,6 @@ sub init()
|
||||
'set inital counts for overhang before content is loaded.
|
||||
m.loadItemsTask.totalRecordCount = 0
|
||||
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
m.spinner.visible = true
|
||||
|
||||
m.Alpha = m.top.findNode("AlphaMenu")
|
||||
m.AlphaSelected = m.top.findNode("AlphaSelected")
|
||||
|
||||
@ -92,7 +89,7 @@ end sub
|
||||
'Load initial set of Data
|
||||
sub loadInitialItems()
|
||||
m.loadItemsTask.control = "stop"
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner()
|
||||
|
||||
if m.top.parentItem.json.Type = "CollectionFolder" 'or m.top.parentItem.json.Type = "Folder"
|
||||
m.top.HomeLibraryItem = m.top.parentItem.Id
|
||||
@ -238,7 +235,7 @@ sub loadInitialItems()
|
||||
end if
|
||||
|
||||
m.loadItemsTask.observeField("content", "ItemDataLoaded")
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
m.loadItemsTask.control = "RUN"
|
||||
SetUpOptions()
|
||||
end sub
|
||||
@ -450,6 +447,7 @@ end sub
|
||||
'
|
||||
'Handle loaded data, and add to Grid
|
||||
sub ItemDataLoaded(msg)
|
||||
stopLoadingSpinner()
|
||||
m.top.alphaActive = false
|
||||
itemData = msg.GetData()
|
||||
m.loadItemsTask.unobserveField("content")
|
||||
@ -475,7 +473,7 @@ sub ItemDataLoaded(msg)
|
||||
m.genreList.setFocus(true)
|
||||
|
||||
m.loading = false
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
return
|
||||
end if
|
||||
|
||||
@ -498,7 +496,7 @@ sub ItemDataLoaded(msg)
|
||||
|
||||
m.itemGrid.setFocus(true)
|
||||
m.genreList.setFocus(false)
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
end sub
|
||||
|
||||
'
|
||||
@ -571,7 +569,7 @@ end sub
|
||||
'
|
||||
'Load next set of items
|
||||
sub loadMoreData()
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
if m.Loading = true then return
|
||||
m.Loading = true
|
||||
m.loadItemsTask.startIndex = m.loadedItems
|
||||
@ -594,7 +592,7 @@ sub onItemalphaSelected()
|
||||
m.loadItemsTask.searchTerm = ""
|
||||
m.VoiceBox.text = ""
|
||||
m.loadItemsTask.nameStartsWith = m.alpha.itemAlphaSelected
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
loadInitialItems()
|
||||
end if
|
||||
end sub
|
||||
@ -609,7 +607,7 @@ sub onvoiceFilter()
|
||||
m.loadItemsTask.NameStartsWith = " "
|
||||
m.loadItemsTask.searchTerm = m.voiceBox.text
|
||||
m.loadItemsTask.recursive = true
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
loadInitialItems()
|
||||
end if
|
||||
end sub
|
||||
@ -842,7 +840,6 @@ function onKeyEvent(key as string, press as boolean) as boolean
|
||||
end if
|
||||
|
||||
if key = "replay"
|
||||
m.spinner.visible = true
|
||||
m.loadItemsTask.searchTerm = ""
|
||||
m.loadItemsTask.nameStartsWith = ""
|
||||
m.voiceBox.text = ""
|
||||
|
@ -22,7 +22,6 @@
|
||||
<Button id="micButton" maxWidth="20" translation="[20, 120]" iconUri="pkg:/images/icons/mic_icon.png" />
|
||||
<Label translation="[0,540]" id="emptyText" font="font:LargeSystemFont" width="1910" horizAlign="center" vertAlign="center" height="64" visible="false" />
|
||||
<ItemGridOptions id="options" visible="false" />
|
||||
<Spinner id="spinner" translation="[900, 450]" />
|
||||
<Animation id="backroundSwapAnimation" duration="1" repeat="false" easeFunction="linear">
|
||||
<FloatFieldInterpolator id="fadeinLoading" key="[0.0, 1.0]" keyValue="[ 0.00, 0.25 ]" fieldToInterp="backdropTransition.opacity" />
|
||||
<FloatFieldInterpolator id="fadeoutLoaded" key="[0.0, 1.0]" keyValue="[ 0.25, 0.00 ]" fieldToInterp="backdrop.opacity" />
|
||||
|
@ -17,7 +17,6 @@ sub setupNodes()
|
||||
m.selectedMovieOfficialRating = m.top.findNode("selectedMovieOfficialRating")
|
||||
m.movieLogo = m.top.findNode("movieLogo")
|
||||
m.swapAnimation = m.top.findNode("backroundSwapAnimation")
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
m.Alpha = m.top.findNode("AlphaMenu")
|
||||
m.AlphaSelected = m.top.findNode("AlphaSelected")
|
||||
m.micButton = m.top.findNode("micButton")
|
||||
@ -83,8 +82,6 @@ sub init()
|
||||
'set inital counts for overhang before content is loaded.
|
||||
m.loadItemsTask.totalRecordCount = 0
|
||||
|
||||
m.spinner.visible = true
|
||||
|
||||
'Get reset folder setting
|
||||
m.resetGrid = m.global.session.user.settings["itemgrid.reset"]
|
||||
|
||||
@ -117,7 +114,7 @@ end sub
|
||||
'Load initial set of Data
|
||||
sub loadInitialItems()
|
||||
m.loadItemsTask.control = "stop"
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
|
||||
if m.top.parentItem.json.Type = "CollectionFolder"
|
||||
m.top.HomeLibraryItem = m.top.parentItem.Id
|
||||
@ -219,7 +216,6 @@ sub loadInitialItems()
|
||||
end if
|
||||
|
||||
m.loadItemsTask.observeField("content", "ItemDataLoaded")
|
||||
m.spinner.visible = true
|
||||
m.loadItemsTask.control = "RUN"
|
||||
|
||||
m.getFiltersTask.observeField("filters", "FilterDataLoaded")
|
||||
@ -436,7 +432,7 @@ sub ItemDataLoaded(msg)
|
||||
m.genreList.setFocus(true)
|
||||
|
||||
m.loading = false
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
' Return focus to options menu if it was opened while library was loading
|
||||
if m.options.visible
|
||||
m.options.setFocus(true)
|
||||
@ -486,7 +482,7 @@ sub ItemDataLoaded(msg)
|
||||
m.emptyText.visible = true
|
||||
end if
|
||||
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
' Return focus to options menu if it was opened while library was loading
|
||||
if m.options.visible
|
||||
m.options.setFocus(true)
|
||||
@ -691,7 +687,7 @@ end sub
|
||||
'
|
||||
'Load next set of items
|
||||
sub loadMoreData()
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
if m.Loading = true then return
|
||||
m.Loading = true
|
||||
m.loadItemsTask.startIndex = m.loadedItems
|
||||
@ -736,7 +732,6 @@ sub onItemalphaSelected()
|
||||
m.loadItemsTask.searchTerm = ""
|
||||
m.VoiceBox.text = ""
|
||||
m.loadItemsTask.nameStartsWith = m.alpha.itemAlphaSelected
|
||||
m.spinner.visible = true
|
||||
loadInitialItems()
|
||||
end if
|
||||
end sub
|
||||
@ -751,7 +746,6 @@ sub onvoiceFilter()
|
||||
m.loadItemsTask.NameStartsWith = " "
|
||||
m.loadItemsTask.searchTerm = m.voiceBox.text
|
||||
m.loadItemsTask.recursive = true
|
||||
m.spinner.visible = true
|
||||
loadInitialItems()
|
||||
end if
|
||||
end sub
|
||||
@ -924,7 +918,6 @@ function onKeyEvent(key as string, press as boolean) as boolean
|
||||
end if
|
||||
|
||||
if key = "replay"
|
||||
m.spinner.visible = true
|
||||
m.loadItemsTask.searchTerm = ""
|
||||
m.loadItemsTask.nameStartsWith = ""
|
||||
m.voiceBox.text = ""
|
||||
|
@ -39,7 +39,6 @@
|
||||
<Button id="micButton" maxWidth="20" translation="[20, 120]" iconUri="pkg:/images/icons/mic_icon.png" />
|
||||
<Label translation="[0,540]" id="emptyText" font="font:LargeSystemFont" width="1910" horizAlign="center" vertAlign="center" height="64" visible="false" />
|
||||
<ItemGridOptions id="options" visible="false" />
|
||||
<Spinner id="spinner" translation="[900, 450]" />
|
||||
<Animation id="backroundSwapAnimation" duration="1" repeat="false" easeFunction="linear">
|
||||
<FloatFieldInterpolator id="fadeinLoading" key="[0.0, 1.0]" keyValue="[ 0.00, 1.00 ]" fieldToInterp="backdropTransition.opacity" />
|
||||
<FloatFieldInterpolator id="fadeoutLoaded" key="[0.0, 1.0]" keyValue="[ 1.00, 0.00 ]" fieldToInterp="backdrop.opacity" />
|
||||
|
@ -17,7 +17,6 @@ sub setupNodes()
|
||||
m.selectedArtistGenres = m.top.findNode("selectedArtistGenres")
|
||||
m.artistLogo = m.top.findNode("artistLogo")
|
||||
m.swapAnimation = m.top.findNode("backroundSwapAnimation")
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
m.Alpha = m.top.findNode("AlphaMenu")
|
||||
m.AlphaSelected = m.top.findNode("AlphaSelected")
|
||||
m.micButton = m.top.findNode("micButton")
|
||||
@ -77,8 +76,6 @@ sub init()
|
||||
'set inital counts for overhang before content is loaded.
|
||||
m.loadItemsTask.totalRecordCount = 0
|
||||
|
||||
m.spinner.visible = true
|
||||
|
||||
'Get reset folder setting
|
||||
m.resetGrid = m.global.session.user.settings["itemgrid.reset"]
|
||||
|
||||
@ -111,7 +108,7 @@ end sub
|
||||
'Load initial set of Data
|
||||
sub loadInitialItems()
|
||||
m.loadItemsTask.control = "stop"
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner()
|
||||
|
||||
if LCase(m.top.parentItem.json.Type) = "collectionfolder"
|
||||
m.top.HomeLibraryItem = m.top.parentItem.Id
|
||||
@ -204,7 +201,6 @@ sub loadInitialItems()
|
||||
end if
|
||||
|
||||
m.loadItemsTask.observeField("content", "ItemDataLoaded")
|
||||
m.spinner.visible = true
|
||||
m.loadItemsTask.control = "RUN"
|
||||
SetUpOptions()
|
||||
end sub
|
||||
@ -326,6 +322,7 @@ end sub
|
||||
'
|
||||
'Handle loaded data, and add to Grid
|
||||
sub ItemDataLoaded(msg)
|
||||
stopLoadingSpinner()
|
||||
m.top.alphaActive = false
|
||||
itemData = msg.GetData()
|
||||
m.loadItemsTask.unobserveField("content")
|
||||
@ -351,7 +348,6 @@ sub ItemDataLoaded(msg)
|
||||
m.loadedRows = m.loadedItems / m.genreList.numColumns
|
||||
|
||||
m.loading = false
|
||||
m.spinner.visible = false
|
||||
return
|
||||
end if
|
||||
|
||||
@ -374,8 +370,6 @@ sub ItemDataLoaded(msg)
|
||||
m.emptyText.text = tr("NO_ITEMS").Replace("%1", m.top.parentItem.Type)
|
||||
m.emptyText.visible = true
|
||||
end if
|
||||
|
||||
m.spinner.visible = false
|
||||
end sub
|
||||
|
||||
'
|
||||
@ -612,7 +606,6 @@ sub onItemalphaSelected()
|
||||
m.loadItemsTask.searchTerm = ""
|
||||
m.VoiceBox.text = ""
|
||||
m.loadItemsTask.nameStartsWith = m.alpha.itemAlphaSelected
|
||||
m.spinner.visible = true
|
||||
loadInitialItems()
|
||||
end if
|
||||
end sub
|
||||
@ -627,7 +620,6 @@ sub onvoiceFilter()
|
||||
m.loadItemsTask.NameStartsWith = " "
|
||||
m.loadItemsTask.searchTerm = m.voiceBox.text
|
||||
m.loadItemsTask.recursive = true
|
||||
m.spinner.visible = true
|
||||
loadInitialItems()
|
||||
end if
|
||||
end sub
|
||||
@ -787,7 +779,6 @@ function onKeyEvent(key as string, press as boolean) as boolean
|
||||
end if
|
||||
|
||||
if key = "replay"
|
||||
m.spinner.visible = true
|
||||
m.loadItemsTask.searchTerm = ""
|
||||
m.loadItemsTask.nameStartsWith = ""
|
||||
m.voiceBox.text = ""
|
||||
|
@ -24,7 +24,6 @@
|
||||
<Button id="micButton" maxWidth="20" translation="[20, 120]" iconUri="pkg:/images/icons/mic_icon.png" />
|
||||
<Label translation="[0,540]" id="emptyText" font="font:LargeSystemFont" width="1910" horizAlign="center" vertAlign="center" height="64" visible="false" />
|
||||
<ItemGridOptions id="options" visible="false" />
|
||||
<Spinner id="spinner" translation="[900, 450]" />
|
||||
<Animation id="backroundSwapAnimation" duration="1" repeat="false" easeFunction="linear">
|
||||
<FloatFieldInterpolator id="fadeinLoading" key="[0.0, 1.0]" keyValue="[ 0.00, 1.00 ]" fieldToInterp="backdropTransition.opacity" />
|
||||
<FloatFieldInterpolator id="fadeoutLoaded" key="[0.0, 1.0]" keyValue="[ 1.00, 0.00 ]" fieldToInterp="backdrop.opacity" />
|
||||
|
@ -3,6 +3,31 @@ import "pkg:/source/utils/misc.bs"
|
||||
sub init()
|
||||
m.top.backgroundColor = "#262626" '"#101010"
|
||||
m.top.backgroundURI = ""
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
end sub
|
||||
|
||||
' Triggered when the isLoading boolean component field is changed
|
||||
sub isLoadingChanged()
|
||||
if m.top.isLoading
|
||||
m.spinner.visible = true
|
||||
else
|
||||
m.spinner.visible = false
|
||||
end if
|
||||
end sub
|
||||
|
||||
' Triggered when the disableRemote boolean component field is changed
|
||||
sub disableRemoteChanged()
|
||||
if m.top.disableRemote
|
||||
dialog = createObject("roSGNode", "ProgressDialog")
|
||||
dialog.id = "invisibiledialog"
|
||||
dialog.visible = false
|
||||
dialog.opacity = 0
|
||||
m.top.dialog = dialog
|
||||
else
|
||||
if isValid(m.top.dialog)
|
||||
m.top.dialog.close = true
|
||||
end if
|
||||
end if
|
||||
end sub
|
||||
|
||||
function onKeyEvent(key as string, press as boolean) as boolean
|
||||
|
@ -3,9 +3,11 @@
|
||||
<children>
|
||||
<Group id="content" />
|
||||
<JFOverhang id="overhang" />
|
||||
<Spinner id="spinner" translation="[897, 477]" visible="false" />
|
||||
</children>
|
||||
<interface>
|
||||
<field id="isLoading" type="boolean" value="false" />
|
||||
<field id="disableRemote" type="boolean" value="false" onchange="disableRemoteChanged" />
|
||||
<field id="isLoading" type="boolean" value="false" onchange="isLoadingChanged" />
|
||||
<field id="exit" type="boolean" alwaysNotify="true" />
|
||||
</interface>
|
||||
</component>
|
@ -2,5 +2,5 @@ sub init()
|
||||
m.top.poster.uri = "pkg:/images/spinner.png"
|
||||
m.top.control = "start"
|
||||
m.top.clockwise = true
|
||||
m.top.spinInterval = 3
|
||||
m.top.spinInterval = 1
|
||||
end sub
|
||||
|
@ -5,7 +5,6 @@ sub init()
|
||||
m.log = log.Logger("SetServerScreen")
|
||||
m.top.setFocus(true)
|
||||
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
m.serverPicker = m.top.findNode("serverPicker")
|
||||
m.serverUrlTextbox = m.top.findNode("serverUrlTextbox")
|
||||
m.serverUrlContainer = m.top.findNode("serverUrlContainer")
|
||||
@ -76,7 +75,7 @@ sub ScanForServers()
|
||||
'run the task
|
||||
m.ssdpScanner.observeField("content", "ScanForServersComplete")
|
||||
m.ssdpScanner.control = "RUN"
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
end sub
|
||||
|
||||
sub ScanForServersComplete(event)
|
||||
@ -109,7 +108,7 @@ sub ScanForServersComplete(event)
|
||||
end if
|
||||
|
||||
m.serverPicker.content = items
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
|
||||
'if we have at least one server, focus on the server picker
|
||||
if m.servers.Count() > 0
|
||||
|
@ -15,7 +15,6 @@
|
||||
</LayoutGroup>
|
||||
<!--background for server picker-->
|
||||
<Rectangle color="0x00000020" width="1620" height="400">
|
||||
<Spinner id="spinner" translation="[717, 136]" />
|
||||
<MarkupList id="serverPicker" translation="[50, 20]" itemComponentName="JFServer" itemSpacing="[0, 10]" itemSize="[1520, 100]" numRows="3" vertFocusAnimationStyle="floatingFocus" />
|
||||
</Rectangle>
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
import "pkg:/source/utils/misc.bs"
|
||||
|
||||
sub init()
|
||||
m.EPGLaunchCompleteSignaled = false
|
||||
m.scheduleGrid = m.top.findNode("scheduleGrid")
|
||||
@ -26,8 +28,6 @@ sub init()
|
||||
m.top.lastFocus = m.scheduleGrid
|
||||
|
||||
m.channelIndex = {}
|
||||
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
end sub
|
||||
|
||||
sub channelFilterSet()
|
||||
@ -48,14 +48,14 @@ sub channelsearchTermSet()
|
||||
if LCase(m.top.searchTerm) = LCase(tr("all")) or m.LoadChannelsTask.searchTerm = LCase(tr("all"))
|
||||
m.top.searchTerm = " "
|
||||
m.LoadChannelsTask.searchTerm = " "
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner()
|
||||
m.LoadChannelsTask.control = "RUN"
|
||||
'filter if the searterm is not invalid
|
||||
else if m.top.searchTerm <> invalid and LCase(m.LoadChannelsTask.searchTerm) <> LCase(m.top.searchTerm)
|
||||
if m.LoadChannelsTask.state = "run" then m.LoadChannelsTask.control = "stop"
|
||||
|
||||
m.LoadChannelsTask.searchTerm = m.top.searchTerm
|
||||
m.spinner.visible = true
|
||||
startLoadingSpinner()
|
||||
m.LoadChannelsTask.control = "RUN"
|
||||
end if
|
||||
|
||||
@ -125,7 +125,7 @@ sub onScheduleLoaded()
|
||||
m.scheduleGrid.showLoadingDataFeedback = false
|
||||
m.scheduleGrid.setFocus(true)
|
||||
m.LoadScheduleTask.schedule = []
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
end sub
|
||||
|
||||
sub onProgramFocused()
|
||||
|
@ -12,7 +12,6 @@
|
||||
programTitleFocusedColor="#ffffff" iconFocusedColor="#ff0000"
|
||||
showPastTimeScreen="true" pastTimeScreenBlendColor="#555555"
|
||||
/>
|
||||
<Spinner id="spinner" translation="[900, 450]" />
|
||||
<Animation id="gridMoveAnimation" duration="1" repeat="false" easeFunction="outQuad">
|
||||
<Vector2DFieldInterpolator id="gridMoveAnimationPosition" key="[0.0, 0.5]" fieldToInterp="scheduleGrid.translation" />
|
||||
</Animation>
|
||||
|
@ -14,6 +14,7 @@ sub audioStateChanged()
|
||||
m.top.disableScreenSaver = (currentState = "playing")
|
||||
|
||||
if currentState = "playing" and not m.playReported
|
||||
stopLoadingSpinner()
|
||||
reportedPlaybackState = "start"
|
||||
m.playReported = true
|
||||
else if currentState = "stopped" or currentState = "finished"
|
||||
|
@ -21,8 +21,6 @@ sub init()
|
||||
m.buttonGrp.setFocus(true)
|
||||
m.top.lastFocus = m.buttonGrp
|
||||
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
|
||||
m.top.observeField("itemContent", "itemContentChanged")
|
||||
end sub
|
||||
|
||||
@ -150,7 +148,7 @@ sub itemContentChanged()
|
||||
SetUpVideoOptions(itemData.mediaSources)
|
||||
SetUpAudioOptions(itemData.mediaStreams)
|
||||
m.buttonGrp.visible = true
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
end sub
|
||||
|
||||
|
||||
|
@ -40,7 +40,6 @@
|
||||
</LayoutGroup>
|
||||
</LayoutGroup>
|
||||
<MovieOptions id="movieOptions" visible="false" />
|
||||
<Spinner id="spinner" translation="[900, 450]" visible="true" />
|
||||
|
||||
<!-- "Cast and Crew" row -->
|
||||
<extrasSlider id="movieExtras" />
|
||||
|
@ -12,8 +12,6 @@ sub init()
|
||||
m.songListRect = m.top.FindNode("songListRect")
|
||||
|
||||
m.songList.observeField("doneLoading", "onDoneLoading")
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
m.spinner.visible = true
|
||||
|
||||
m.dscr = m.top.findNode("overview")
|
||||
createDialogPallete()
|
||||
@ -99,8 +97,6 @@ end sub
|
||||
function onKeyEvent(key as string, press as boolean) as boolean
|
||||
if not press then return false
|
||||
|
||||
if m.spinner.visible then return false
|
||||
|
||||
if key = "options"
|
||||
if m.dscr.isTextEllipsized
|
||||
createFullDscrDlg()
|
||||
@ -169,9 +165,5 @@ end sub
|
||||
|
||||
sub onDoneLoading()
|
||||
m.songList.unobservefield("doneLoading")
|
||||
m.spinner.visible = false
|
||||
end sub
|
||||
|
||||
sub OnScreenHidden()
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
end sub
|
||||
|
@ -20,7 +20,6 @@
|
||||
</LayoutGroup>
|
||||
</LayoutGroup>
|
||||
</LayoutGroup>
|
||||
<Spinner id="spinner" translation="[920, 540]" visible="false" />
|
||||
</children>
|
||||
<interface>
|
||||
<field id="pageContent" type="node" onChange="pageContentChanged" />
|
||||
|
@ -76,6 +76,7 @@ sub OnScreenShown()
|
||||
m.overhang.isVisible = false
|
||||
m.overhang.opacity = "1"
|
||||
end if
|
||||
stopLoadingSpinner()
|
||||
end sub
|
||||
|
||||
sub OnScreenHidden()
|
||||
|
@ -11,8 +11,6 @@ sub init()
|
||||
m.songListRect = m.top.FindNode("songListRect")
|
||||
|
||||
m.songList.observeField("doneLoading", "onDoneLoading")
|
||||
m.spinner = m.top.findNode("spinner")
|
||||
m.spinner.visible = true
|
||||
|
||||
m.dscr = m.top.findNode("overview")
|
||||
createDialogPallete()
|
||||
@ -98,8 +96,6 @@ end sub
|
||||
function onKeyEvent(key as string, press as boolean) as boolean
|
||||
if not press then return false
|
||||
|
||||
if m.spinner.visible then return false
|
||||
|
||||
if key = "options"
|
||||
if m.dscr.isTextEllipsized
|
||||
createFullDscrDlg()
|
||||
@ -160,9 +156,5 @@ end sub
|
||||
|
||||
sub onDoneLoading()
|
||||
m.songList.unobservefield("doneLoading")
|
||||
m.spinner.visible = false
|
||||
end sub
|
||||
|
||||
sub OnScreenHidden()
|
||||
m.spinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
end sub
|
||||
|
@ -19,7 +19,6 @@
|
||||
</LayoutGroup>
|
||||
</LayoutGroup>
|
||||
</LayoutGroup>
|
||||
<Spinner id="spinner" translation="[920, 540]" visible="false" />
|
||||
</children>
|
||||
<interface>
|
||||
<field id="pageContent" type="node" onChange="pageContentChanged" />
|
||||
|
@ -23,12 +23,14 @@ sub itemContentChanged()
|
||||
if isValidToContinue(m.top.itemIndex)
|
||||
m.LoadLibrariesTask = createObject("roSGNode", "LoadPhotoTask")
|
||||
if isValid(m.top.itemsNode)
|
||||
stopLoadingSpinner()
|
||||
if isValid(m.top.itemsNode.content)
|
||||
m.LoadLibrariesTask.itemNodeContent = m.top.itemsNode.content.getChild(m.top.itemIndex)
|
||||
else if isValidAndNotEmpty(m.top.itemsNode.id)
|
||||
m.LoadLibrariesTask.itemNodeContent = m.top.itemsNode
|
||||
end if
|
||||
else if isValid(m.top.itemsArray)
|
||||
stopLoadingSpinner()
|
||||
itemContent = m.top.itemsArray[m.top.itemIndex]
|
||||
m.LoadLibrariesTask.itemArrayContent = itemContent
|
||||
else
|
||||
|
@ -6,7 +6,6 @@ import "pkg:/source/utils/deviceCapabilities.bs"
|
||||
|
||||
sub init()
|
||||
m.top.optionsAvailable = false
|
||||
m.searchSpinner = m.top.findnode("searchSpinner")
|
||||
m.searchSelect = m.top.findnode("searchSelect")
|
||||
m.searchTask = CreateObject("roSGNode", "SearchTask")
|
||||
|
||||
@ -20,12 +19,12 @@ sub searchMedias()
|
||||
query = m.top.searchAlpha
|
||||
'if user deletes the search string hide the spinner
|
||||
if query.len() = 0
|
||||
m.searchSpinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
end if
|
||||
'if search task is running and user selectes another letter stop the search and load the next letter
|
||||
m.searchTask.control = "stop"
|
||||
if query <> invalid and query <> ""
|
||||
m.searchSpinner.visible = true
|
||||
startLoadingSpinner(false)
|
||||
end if
|
||||
m.searchTask.observeField("results", "loadResults")
|
||||
m.searchTask.query = query
|
||||
@ -37,7 +36,7 @@ end sub
|
||||
sub loadResults()
|
||||
m.searchTask.unobserveField("results")
|
||||
|
||||
m.searchSpinner.visible = false
|
||||
stopLoadingSpinner()
|
||||
m.searchSelect.itemdata = m.searchTask.results
|
||||
m.searchSelect.query = m.top.SearchAlpha
|
||||
m.searchHelpText.visible = false
|
||||
|
@ -10,7 +10,6 @@
|
||||
<SearchRow id="searchSelect" visible="true" focusable="true" />
|
||||
</LayoutGroup>
|
||||
<OptionsSlider id="options" />
|
||||
<Spinner id="searchSpinner" visible="false" translation="[1050, 500]" />
|
||||
</children>
|
||||
<interface>
|
||||
<field id="query" type="string" alwaysNotify="true" />
|
||||
|
@ -299,6 +299,8 @@ sub onVideoContentLoaded()
|
||||
videoContent = m.LoadMetaDataTask.content
|
||||
m.LoadMetaDataTask.content = []
|
||||
|
||||
stopLoadingSpinner()
|
||||
|
||||
' If we have nothing to play, return to previous screen
|
||||
if not isValid(videoContent)
|
||||
showPlaybackErrorDialog(tr("There was an error retrieving the data for this item from the server."))
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.6 KiB |
@ -48,12 +48,11 @@ sub Main (args as dynamic) as void
|
||||
' remove login scenes from the stack
|
||||
sceneManager.callFunc("clearScenes")
|
||||
|
||||
stopLoadingSpinner()
|
||||
|
||||
' load home page
|
||||
sceneManager.currentUser = m.global.session.user.name
|
||||
group = CreateHomeGroup()
|
||||
group.callFunc("loadLibraries")
|
||||
stopLoadingSpinner()
|
||||
sceneManager.callFunc("pushScene", group)
|
||||
|
||||
m.scene.observeField("exit", m.port)
|
||||
@ -160,7 +159,7 @@ sub Main (args as dynamic) as void
|
||||
|
||||
' can't play the item without knowing what type it is
|
||||
if isValid(itemType)
|
||||
startMediaLoadingSpinner()
|
||||
startLoadingSpinner()
|
||||
m.global.queueManager.callFunc("clear") ' empty queue/playlist
|
||||
m.global.queueManager.callFunc("resetShuffle") ' turn shuffle off
|
||||
|
||||
@ -205,21 +204,18 @@ sub Main (args as dynamic) as void
|
||||
else if itemType = "photoalbum"
|
||||
quickplay.photoAlbum(itemNode)
|
||||
end if
|
||||
stopLoadingSpinner()
|
||||
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()
|
||||
if isValid(selectedItem)
|
||||
startMediaLoadingSpinner()
|
||||
startLoadingSpinner()
|
||||
selectedItemType = selectedItem.type
|
||||
|
||||
|
||||
if selectedItemType = "CollectionFolder"
|
||||
if selectedItem.collectionType = "movies"
|
||||
group = CreateMovieLibraryView(selectedItem)
|
||||
@ -228,7 +224,6 @@ sub Main (args as dynamic) as void
|
||||
else
|
||||
group = CreateItemGrid(selectedItem)
|
||||
end if
|
||||
stopLoadingSpinner()
|
||||
sceneManager.callFunc("pushScene", group)
|
||||
else if selectedItemType = "Folder" and selectedItem.json.type = "Genre"
|
||||
' User clicked on a genre folder
|
||||
@ -237,15 +232,12 @@ sub Main (args as dynamic) as void
|
||||
else
|
||||
group = CreateItemGrid(selectedItem)
|
||||
end if
|
||||
stopLoadingSpinner()
|
||||
sceneManager.callFunc("pushScene", group)
|
||||
else if selectedItemType = "Folder" and selectedItem.json.type = "MusicGenre"
|
||||
group = CreateMusicLibraryView(selectedItem)
|
||||
stopLoadingSpinner()
|
||||
sceneManager.callFunc("pushScene", group)
|
||||
else if selectedItemType = "UserView" or selectedItemType = "Folder" or selectedItemType = "Channel" or selectedItemType = "Boxset"
|
||||
group = CreateItemGrid(selectedItem)
|
||||
stopLoadingSpinner()
|
||||
sceneManager.callFunc("pushScene", group)
|
||||
else if selectedItemType = "Episode"
|
||||
' User has selected a TV episode they want us to play
|
||||
@ -255,7 +247,6 @@ sub Main (args as dynamic) as void
|
||||
end if
|
||||
|
||||
selectedItem.selectedAudioStreamIndex = audio_stream_idx
|
||||
stopLoadingSpinner()
|
||||
' Display playback options dialog
|
||||
if selectedItem.json.userdata.PlaybackPositionTicks > 0
|
||||
m.global.queueManager.callFunc("hold", selectedItem)
|
||||
@ -268,20 +259,15 @@ sub Main (args as dynamic) as void
|
||||
|
||||
else if selectedItemType = "Series"
|
||||
group = CreateSeriesDetailsGroup(selectedItem.json.id)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "Season"
|
||||
group = CreateSeasonDetailsGroupByID(selectedItem.json.SeriesId, selectedItem.id)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "Movie"
|
||||
' open movie detail page
|
||||
group = CreateMovieDetailsGroup(selectedItem)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "Person"
|
||||
CreatePersonView(selectedItem)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "TvChannel" or selectedItemType = "Video" or selectedItemType = "Program"
|
||||
' User selected a Live TV channel / program
|
||||
stopLoadingSpinner()
|
||||
' Show Channel Loading spinner
|
||||
dialog = createObject("roSGNode", "ProgressDialog")
|
||||
dialog.title = tr("Loading Channel Data")
|
||||
@ -312,7 +298,6 @@ sub Main (args as dynamic) as void
|
||||
|
||||
quickplay.photo(selectedItem)
|
||||
end if
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "PhotoAlbum"
|
||||
print "a photo album was selected"
|
||||
print "selectedItem=", selectedItem
|
||||
@ -331,27 +316,21 @@ sub Main (args as dynamic) as void
|
||||
photoPlayer.itemIndex = 0
|
||||
m.global.sceneManager.callfunc("pushScene", photoPlayer)
|
||||
end if
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "MusicArtist"
|
||||
group = CreateArtistView(selectedItem.json)
|
||||
stopLoadingSpinner()
|
||||
if not isValid(group)
|
||||
message_dialog(tr("Unable to find any albums or songs belonging to this artist"))
|
||||
end if
|
||||
else if selectedItemType = "MusicAlbum"
|
||||
group = CreateAlbumView(selectedItem.json)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "MusicVideo"
|
||||
group = CreateMovieDetailsGroup(selectedItem)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "Playlist"
|
||||
group = CreatePlaylistView(selectedItem.json)
|
||||
stopLoadingSpinner()
|
||||
else if selectedItemType = "Audio"
|
||||
m.global.queueManager.callFunc("clear")
|
||||
m.global.queueManager.callFunc("resetShuffle")
|
||||
m.global.queueManager.callFunc("push", selectedItem.json)
|
||||
stopLoadingSpinner()
|
||||
m.global.queueManager.callFunc("playQueue")
|
||||
else
|
||||
' TODO - switch on more node types
|
||||
@ -517,7 +496,7 @@ sub Main (args as dynamic) as void
|
||||
group = sceneManager.callFunc("getActiveScene")
|
||||
if isValid(btn) and btn.id = "play-button"
|
||||
' User chose Play button from movie detail view
|
||||
|
||||
startLoadingSpinner()
|
||||
' Check if a specific Audio Stream was selected
|
||||
audio_stream_idx = 0
|
||||
if isValid(group) and isValid(group.selectedAudioStreamIndex)
|
||||
@ -748,6 +727,7 @@ sub Main (args as dynamic) as void
|
||||
end if
|
||||
else if isNodeEvent(msg, "dataReturned")
|
||||
popupNode = msg.getRoSGNode()
|
||||
stopLoadingSpinner()
|
||||
if isValid(popupNode) and isValid(popupNode.returnData)
|
||||
selectedItem = m.global.queueManager.callFunc("getHold")
|
||||
m.global.queueManager.callFunc("clearHold")
|
||||
@ -755,6 +735,7 @@ sub Main (args as dynamic) as void
|
||||
if isValid(selectedItem) and selectedItem.count() > 0 and isValid(selectedItem[0])
|
||||
if popupNode.returnData.indexselected = 0
|
||||
'Resume video from resume point
|
||||
startLoadingSpinner()
|
||||
startingPoint = 0
|
||||
|
||||
if isValid(selectedItem[0].json) and isValid(selectedItem[0].json.UserData) and isValid(selectedItem[0].json.UserData.PlaybackPositionTicks)
|
||||
@ -769,6 +750,7 @@ sub Main (args as dynamic) as void
|
||||
m.global.queueManager.callFunc("playQueue")
|
||||
else if popupNode.returnData.indexselected = 1
|
||||
'Start Over from beginning selected, set position to 0
|
||||
startLoadingSpinner()
|
||||
selectedItem[0].startingPoint = 0
|
||||
m.global.queueManager.callFunc("clear")
|
||||
m.global.queueManager.callFunc("push", selectedItem[0])
|
||||
|
@ -92,7 +92,7 @@ function LoginFlow()
|
||||
unset_setting("server")
|
||||
goto start_login
|
||||
else if userSelected <> ""
|
||||
startMediaLoadingSpinner()
|
||||
startLoadingSpinner()
|
||||
print "A public user was selected with username=" + userSelected
|
||||
session.user.Update("name", userSelected)
|
||||
regex = CreateObject("roRegex", "[^a-zA-Z0-9\ \-\_]", "")
|
||||
@ -481,7 +481,7 @@ function CreateSigninGroup(user = "")
|
||||
else if type(msg) = "roSGNodeEvent"
|
||||
node = msg.getNode()
|
||||
if node = "submit"
|
||||
startMediaLoadingSpinner()
|
||||
startLoadingSpinner()
|
||||
' Validate credentials
|
||||
activeUser = get_token(username.value, password.value)
|
||||
if isValid(activeUser)
|
||||
@ -879,7 +879,7 @@ function CreateVideoPlayerGroup(video_id as string, mediaSourceId = invalid as d
|
||||
' validate video_id
|
||||
if not isValid(video_id) or video_id = "" then return invalid
|
||||
|
||||
startMediaLoadingSpinner()
|
||||
startLoadingSpinner()
|
||||
' Video is Playing
|
||||
video = VideoPlayer(video_id, mediaSourceId, audio_stream_idx, defaultSubtitleTrackFromVid(video_id), forceTranscoding, showIntro, allowResumeDialog)
|
||||
|
||||
@ -938,6 +938,6 @@ sub playbackOptionDialog(time as longinteger, meta as object)
|
||||
resumeData.push(tr("Go to episode"))
|
||||
end if
|
||||
end if
|
||||
|
||||
stopLoadingSpinner()
|
||||
m.global.sceneManager.callFunc("optionDialog", tr("Playback Options"), [], resumeData)
|
||||
end sub
|
||||
|
@ -59,7 +59,7 @@ sub AddVideoContent(video as object, mediaSourceId as dynamic, audio_stream_idx
|
||||
if playbackPosition > 0
|
||||
stopLoadingSpinner()
|
||||
dialogResult = startPlayBackOver(playbackPosition)
|
||||
startMediaLoadingSpinner()
|
||||
startLoadingSpinner()
|
||||
'Dialog returns -1 when back pressed, 0 for resume, and 1 for start over
|
||||
if dialogResult = -1
|
||||
'User pressed back, return invalid and don't load video
|
||||
|
@ -451,34 +451,19 @@ function toString(input) as string
|
||||
return str(input)
|
||||
end function
|
||||
|
||||
sub startLoadingSpinner()
|
||||
'
|
||||
' startLoadingSpinner: Start a loading spinner and attach it to the main JFScene.
|
||||
' Displays an invisible ProgressDialog node by default to disable keypresses while the app is loading.
|
||||
'
|
||||
' @param {boolean} [disableRemote=true]
|
||||
sub startLoadingSpinner(disableRemote = true as boolean)
|
||||
if not isValid(m.scene)
|
||||
m.scene = m.top.getScene()
|
||||
end if
|
||||
|
||||
if not m.scene.isLoading
|
||||
m.scene.isLoading = true
|
||||
|
||||
m.spinner = createObject("roSGNode", "Spinner")
|
||||
m.spinner.translation = "[900, 450]"
|
||||
m.spinner.visible = true
|
||||
|
||||
m.scene.appendChild(m.spinner)
|
||||
end if
|
||||
end sub
|
||||
|
||||
sub startMediaLoadingSpinner()
|
||||
if not isValid(m.scene)
|
||||
m.scene = m.top.getScene()
|
||||
end if
|
||||
|
||||
if not m.scene.isLoading
|
||||
dialog = createObject("roSGNode", "ProgressDialog")
|
||||
dialog.id = "invisibiledialog"
|
||||
dialog.visible = false
|
||||
m.scene.dialog = dialog
|
||||
|
||||
startLoadingSpinner()
|
||||
m.scene.disableRemote = disableRemote
|
||||
end if
|
||||
end sub
|
||||
|
||||
@ -489,16 +474,7 @@ sub stopLoadingSpinner()
|
||||
|
||||
if m.scene.isLoading
|
||||
m.scene.isLoading = false
|
||||
if isValid(m.spinner)
|
||||
m.spinner.visible = false
|
||||
end if
|
||||
if isValid(m.scene) and isValid(m.scene.dialog)
|
||||
if m.scene.dialog.isSubType("ProgressDialog")
|
||||
m.scene.dialog.close = true
|
||||
else if m.scene.dialog.isSubType("Spinner")
|
||||
m.scene.dialog.close = true
|
||||
end if
|
||||
end if
|
||||
m.scene.disableRemote = false
|
||||
end if
|
||||
end sub
|
||||
|
||||
|
@ -584,6 +584,7 @@ namespace quickplay
|
||||
m.global.sceneManager.callfunc("pushScene", photoPlayer)
|
||||
end if
|
||||
else
|
||||
stopLoadingSpinner()
|
||||
print "Quick Play WARNING: Unknown collection type"
|
||||
end if
|
||||
end sub
|
||||
@ -645,6 +646,7 @@ namespace quickplay
|
||||
quickplay.tvChannel(myChannel)
|
||||
end if
|
||||
else
|
||||
stopLoadingSpinner()
|
||||
print "Quick Play CollectionFolder WARNING: Unknown collection type"
|
||||
end if
|
||||
end sub
|
||||
|
Loading…
Reference in New Issue
Block a user