HMS

Home Media Server for Roku Players
git clone https://www.brianlane.com/git/HMS
Log | Files | Refs | README | LICENSE

commit 7eeb0a507e62fc26ea9560c28a8a2a0a8e4a2fe9
parent bbc5d1c070242dbfbc577bbf49477d90c7d83618
Author: Brian C. Lane <bcl@brianlane.com>
Date:   Sun, 13 Nov 2022 10:40:00 -0800

Add url validation task

This is used to check the server url that the user enters. It has to be
done in a task because you cannot make network requests from the render
thread in SceneGraph.

Diffstat:
MHMS/components/MainScene.brs | 34++++++++++++++++++++++++++++++----
MHMS/components/MainScene.xml | 2++
AHMS/components/ValidateURLTask.brs | 22++++++++++++++++++++++
AHMS/components/ValidateURLTask.xml | 10++++++++++
MHMS/source/checkServerUrl.brs | 9---------
MHMS/source/urlUtils.brs | 8++++++++
6 files changed, 72 insertions(+), 13 deletions(-)

diff --git a/HMS/components/MainScene.brs b/HMS/components/MainScene.brs @@ -6,8 +6,13 @@ sub Init() print "MainScene->Init()" m.top.ObserveField("serverurl", "RunContentTask") - RunSetupServerDialog() - + url = RegRead("ServerURL") + if url = invalid then + RunSetupServerDialog() + else + ' Validate the url + RunValidateURLTask(url) + end if end sub @@ -28,6 +33,28 @@ sub OnMainContentLoaded() ' m.GridScreen.content = m.contentTask.content end sub +sub RunValidateURLTask(url as string) + print "MainScene->RunValidateURLTask()" + + m.validateTask = CreateObject("roSGNode", "ValidateURLTask") + m.validateTask.serverurl = url + m.validateTask.ObserveField("valid", "OnValidateChanged") + m.validateTask.control = "run" +end sub + +sub OnValidateChanged() + print "MainScene->OnValidateChanged" + print m.validateTask.serverurl + print m.validateTask.valid + if not m.validateTask.valid then + ' Still invalid, run it again + RunSetupServerDialog() + else + ' Valid url, trigger the content load + m.top.serverurl = m.validateTask.serverurl + end if +end sub + sub RunSetupServerDialog() print "MainScene->RunSetupServerDialog()" m.serverDialog = createObject("roSGNode", "SetupServerDialog") @@ -39,6 +66,5 @@ sub OnSetupServerURL() print "MainScene->OnSetupServerURL()" print m.serverDialog.serverurl - ' pretend it was ok - m.top.serverurl = m.serverDialog.serverurl + RunValidateURLTask(m.serverDialog.serverurl) end sub diff --git a/HMS/components/MainScene.xml b/HMS/components/MainScene.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" ?> <component name="MainScene" extends="Scene" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd"> + <script type="text/brightscript" uri="pkg:/source/generalUtils.brs" /> + <script type="text/brightscript" uri="pkg:/source/urlUtils.brs" /> <script type="text/brightscript" uri="MainScene.brs" /> <interface> diff --git a/HMS/components/ValidateURLTask.brs b/HMS/components/ValidateURLTask.brs @@ -0,0 +1,22 @@ +'******************************************************************** +'** Home Media Server Application - ValidateURLTask +'** Copyright (c) 2022 Brian C. Lane All Rights Reserved. +'******************************************************************** +sub Init() + print "ValidateURLTask->Init()" + m.top.functionName = "ValidateURL" +end sub + +' ValidateURL is executed when m.validateURLTask.control = "run" +' It checks serverurl and sets valid to true/false +sub ValidateURL() + print "ValidateURLTask->GetContent()" + print m.top.serverurl + + m.top.valid = isURLValid(m.top.serverurl) + if m.top.valid then + print "Is VALID" + else + print "Is NOT VALID" + end if +end sub diff --git a/HMS/components/ValidateURLTask.xml b/HMS/components/ValidateURLTask.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" ?> +<component name="ValidateURLTask" extends="Task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd"> + <script type="text/brightscript" uri="pkg:/source/urlUtils.brs" /> + <script type="text/brightscript" uri="ValidateURLTask.brs" /> + + <interface> + <field id="serverurl" type="uri" /> + <field id="valid" type="bool" alwaysNotify="true" /> + </interface> +</component> diff --git a/HMS/source/checkServerUrl.brs b/HMS/source/checkServerUrl.brs @@ -49,12 +49,3 @@ Function checkServerUrl(forceEdit As Boolean) As Boolean endif end while End Function - -'************************************************************ -'** Check a URL to see if it is valid -'************************************************************ -Function isUrlValid( url As String ) As Boolean - result = getHTMLWithTimeout(url, 60) - return not result.error -End Function - diff --git a/HMS/source/urlUtils.brs b/HMS/source/urlUtils.brs @@ -285,3 +285,11 @@ Function postHTMLWithTimeout(url As String, content As String, seconds As Intege return result End Function + +'************************************************************ +'** Check a URL to see if it is valid +'************************************************************ +Function isUrlValid( url As String ) As Boolean + result = getHTMLWithTimeout(url, 60) + return not result.error +End Function