Roku:: Перенаправление с одного экрана на другой автоматически
Так как у меня есть один API с дает два параметра, то есть: действительный с иметь 0 и 1 и atuh, которые имеют случайный код и бу, используя nod задачи, я стал успешным, чтобы отобразить этот случайный код аутентификации на экране, но наша логика, когда этот случайный код зарегистрирован пользователем действительный параметр автоматически дает 1 ранее, у него будет 0, поэтому моя проблема в том, что, когда пользователь не зарегистрирован, у действительного API будет 0, поэтому экран будет отображаться в произвольном порядке и после этого пользователь будет вводить этот код и регистрировать o после ввода этого действительный код будет иметь 1 ответ, так что теперь я хочу, чтобы экран автоматически перенаправлялся на список каналов со случайного отображения кода. o как мы можем это сделать, я буду
main.brs
' ********** Copyright 2016 Roku Corp. All Rights Reserved. **********
sub RunUserInterface()
screen = CreateObject("roSGScreen")
port = CreateObject("roMessagePort")
screen.SetMessagePort(port)
m.simpleTask.ObserveField("taskValid", "onTaskVallid")
m.simpleTask.control = "RUN"
res=getauth()
response = parseJSON(res)
' print "what we got:"response
'
' print response.valid
' print response.atuh
' chck=status.valid
' print chck
status=response.valid
if status = "1" then
scene = screen.CreateScene("HomeScene")
screen.Show()
else
scene = screen.CreateScene("MessageTaskScene")
screen.Show()
'while false sleep and hit api
'scene/screen ko value
endif
oneRow = GetApiArray()
list = [
{
Title:"First row"
ContentList : oneRow
}
{
Title:"Second row"
ContentList : oneRow
}
]
scene.gridContent = ParseXMLContent(list)
while true
msg = wait(0, port)
print "------------------"
print "msg = "; msg
end while
if screen <> invalid then
screen.Close()
screen = invalid
end if
end sub
Function ParseXMLContent(list As Object)
RowItems = createObject("RoSGNode","ContentNode")
for each rowAA in list
row = createObject("RoSGNode","ContentNode")
row.Title = rowAA.Title
for each itemAA in rowAA.ContentList
item = createObject("RoSGNode","ContentNode")
' We don't use item.setFields(itemAA) as doesn't cast streamFormat to proper value
for each key in itemAA
item[key] = itemAA[key]
end for
row.appendChild(item)
end for
RowItems.appendChild(row)
end for
return RowItems
End Function
Function GetApiArray()
url = CreateObject("roUrlTransfer")
url.SetUrl("http://api.delvenetworks.com/rest/organizations/59021fabe3b645968e382ac726cd6c7b/channels/1cfd09ab38e54f48be8498e0249f5c83/media.rss")
rsp = url.GetToString()
responseXML = ParseXML(rsp)
responseXML = responseXML.GetChildElements()
responseArray = responseXML.GetChildElements()
result = []
for each xmlItem in responseArray
if xmlItem.getName() = "item"
itemAA = xmlItem.GetChildElements()
if itemAA <> invalid
item = {}
for each xmlItem in itemAA
item[xmlItem.getName()] = xmlItem.getText()
if xmlItem.getName() = "media:content"
item.stream = {url : xmlItem.url}
item.url = xmlItem.getAttributes().url
item.streamFormat = "mp4"
mediaContent = xmlItem.GetChildElements()
for each mediaContentItem in mediaContent
if mediaContentItem.getName() = "media:thumbnail"
item.HDPosterUrl = mediaContentItem.getattributes().url
item.hdBackgroundImageUrl = mediaContentItem.getattributes().url
end if
end for
end if
end for
result.push(item)
end if
end if
end for
return result
End Function
Function ParseXML(str As String) As dynamic
if str = invalid return invalid
xml = CreateObject("roXMLElement")
if not xml.Parse(str) return invalid
return xml
End Function
function getauth() As string
url = CreateObject("roUrlTransfer")
url.SetUrl("http://demo5770907.mockable.io/roku/validate")
rsp = url.GetToString()
return rsp
end function
MessageTaskScene.brs
function init()
m.top.setFocus(true)
m.myLabel = m.top.findNode("myLabel")
m.simpleTask = CreateObject("roSGNode", "SimpleTask")
m.simpleTask.ObserveField("taskRamdomCode", "onTaskResult")
m.simpleTask.ObserveField("taskValid", "onTaskValid")
m.simpleTask.control = "RUN"
'print m.simpleTask
' m.myLabel.text = "HOW"
end function
function onTaskResult() as void
'print stri(m.simpleTask.taskResult)+"helo"
'print m.simpleTask.taskRamdomCode
messge="You havent login yet so please login in your Roku login page with this registration code:"+m.simpleTask.taskRamdomCode
m.myLabel.text=messge
m.myLabel.font.size=40
'
' 'Set the color to light blue
m.myLabel.color="0x72D7EEFF"
end function
function onTaskValid() as string
return m.simpleTask.taskValid
end function
MessageTaskscene.xml
<?xml version="1.0" encoding="UTF-8"?>
<component name="MessageTaskScene" extends="Scene" xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd">
<script type="text/brightscript" uri="pkg:/components/screens/MessageTaskScene/MessageTaskScene.brs"/>
<children>
<Label id="myLabel"
text="This is first screen message"
width="1280"
height="720"
horizAlign="left"
vertAlign="center"
wrap ="true"
/>
</children>
</component>
SimpleTask.xml
<?xml version="1.0" encoding="UTF-8"?>
<component name="SimpleTask" extends="Task" xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd">
<interface>
<field id="taskRamdomCode" type="string" value="0" />
<field id="taskValid" type="string" value="0" />
</interface>
<script type="text/brightscript" >
<![CDATA[
sub init()
m.top.functionName = "getcode"
end sub
function getcode() As void
flag =true
while (flag)
sleep(2000)
url = CreateObject("roUrlTransfer")
url.SetUrl("http://demo5770907.mockable.io/roku/validate")
rsp = url.GetToString()
response = parseJSON(rsp)
m.top.taskRamdomCode=response.atuh
m.top.taskValid=response.valid
if(response.valid = "1")
flag = false
endif
endwhile
end function
]]>
</script>
</component>
Кто-нибудь может мне помочь? Я хочу изменить экран с MessageTaskscene на HomeScene автоматически, как только пользователь введет этот случайный код и получит регистрацию