Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
developer34
Channel Surfer

i am setting a task node field and trying to observe that field in another component

i am setting a task node field and trying to observe that field in another component, I have also created the task node object in the component in which i want to access the field. But however i am not able to access the callback function associated with it. Please help anyone 

This is my logintask.xml

<?xml version="1.0" encoding="UTF-8"?>
<component name="logintask" extends="Task">
	<interface>
		<field id="result" type="assocarray" alwaysNotify="true" />
        <field id="content" type="node" />
        <field id="urlfield" type="string" />
        <field id="username" type="string" />
        <field id="password" type="string" />
        <field id="token" type="string" />
        <field id="user_id" type="string" />
        <field id="msg" type="string" alwaysNotify="true" />
    </interface>
   
	  <script type="text/brightscript" uri="pkg:/components/src/logintask.brs" />
</component> 

 this is my logintask.brs here i am setting the result field

sub init()
    m.top.functionName = "userLogin"
end sub
Function userLogin()
    sec = CreateObject("roRegistrySection", "Authentication")
    sec.Write("Urlfield", m.top.urlfield)
    sec.Write("Username", m.top.username)
    sec.Write("Password", m.top.password)
    sec.Flush()
    m.global.urlfield = m.top.urlfield
    m.global.username = m.top.username
    m.global.password = m.top.password
    url = CreateObject("roUrlTransfer") 
    url.SetPort(CreateObject("roMessagePort"))
    url.SetUrl("http://"+m.top.urlfield+"/third_law/player_api.php")
    
    
    rsp = url.AsyncPostFromString("username="+m.top.username+"&password="+m.top.password)
    event = wait(5000, url.GetPort())
    if type(event) = "roUrlEvent"
             if event.GetResponseCode() = 200 
                response = ParseJson(event.GetString())
               
                if response <> invalid 
                    getTvCategories()
                else
                    m.top.msg =  "Connection error"
                endif
             else
                m.top.msg =  "Connection error"
             endif
    else if event = invalid
             m.top.msg =  "Connection timeout"
             url.AsyncCancel()
    else
             m.top.msg =  "Connection error"
    endif
    
End Function

function getTvCategories()

    url = CreateObject("roUrlTransfer") 
    url.SetPort(CreateObject("roMessagePort"))
    url.SetUrl("http://"+m.top.urlfield+"/third_law/panel_api.php")
    
    
    rsp = url.AsyncPostFromString("username="+m.top.username+"&password="+m.top.password)
    event = wait(5000, url.GetPort())
    if type(event) = "roUrlEvent"
             if event.GetResponseCode() = 200 
                response = ParseJson(event.GetString())
                
                if response <> invalid 
                      m.global.tv_grp = response.categories.live
                      channels = CreateObject("roAssociativeArray") 
                      while response.available_channels.IsNext()
                        available_channels = response.available_channels.Next()
                        eachBlock = response.available_channels[available_channels]
                        streamType = eachBlock.stream_type
                        if streamType = "live"
                            channels.AddReplace(available_channels,eachBlock)
                            m.global.TvChannels = channels
                           
                        end if
                        
                      end while
                      
                      getVodCategories()
                else
                    m.top.msg =  "Connection error"
                endif
             else
                m.top.msg =  "Connection error"
             endif
    else if event = invalid
             m.top.msg =  "Connection timeout"
             url.AsyncCancel()
    else
             m.top.msg =  "Connection error"
    endif
    m.top.result = m.global.TvChannels
    ?m.top
end function

function getVodCategories()

    url = CreateObject("roUrlTransfer") 
    url.SetPort(CreateObject("roMessagePort"))
    url.SetUrl("http://"+m.top.urlfield+"/third_law/panel_api.php")
    
    
    rsp = url.AsyncPostFromString("username="+m.top.username+"&password="+m.top.password)
    event = wait(5000, url.GetPort())
    if type(event) = "roUrlEvent"
             if event.GetResponseCode() = 200 
                response = ParseJson(event.GetString())
                
                if response <> invalid 
                      m.global.vod_grp = response.categories.movie
                      movie = CreateObject("roAssociativeArray") 
                      while response.available_channels.IsNext()
                        available_channels = response.available_channels.Next()
                        eachBlock = response.available_channels[available_channels]
                        streamType = eachBlock.stream_type
                        if streamType = "movie"
                            movie.AddReplace(available_channels,eachBlock)
                            m.global.VodList = movie
                        end if
                        
                      end while
                     
                else
                    m.top.msg =  "Connection error"
                endif
             else
                m.top.msg =  "Connection error"
             endif
    else if event = invalid
             m.top.msg =  "Connection timeout"
             url.AsyncCancel()
    else
             m.top.msg =  "Connection error"
    endif
    m.top.msg = "OK"
end function

this is my livetvscreen.brs where i want to access the result field of logintask which is a task node

sub init()
    
     m.tvGenresList = m.top.FindNode("tvGenresList")
     m.tvmarkuplist = m.top.findNode("TvMarkupList")
     
     m.tvlisttask = createObject("roSGNode", "logintask")
     ? m.tvlisttask
     m.tvlisttask.ObserveField("result", "onGetList")
     
     m.tvlistcontent = m.top.findNode("tvListContent")
     m.itemcount = 0
     
     m.channelbox = m.top.findNode("channelbox")
     m.categoryname = m.top.findNode("categoryname")
    
     m.time = m.top.findNode("currenttime")
     m.date = m.top.findNode("currentdate")
     m.testtimer = m.top.findNode("testTimer")
     m.testtimer.control = "start"
     m.testtimer.ObserveField("fire","dateTimeupdate")
     dateTimeupdate()
end sub

function get()
    ?"get()"
    m.tvlisttask.urlfield = m.global.urlfield
    m.tvlisttask.username = m.global.username
    m.tvlisttask.password = m.global.password
    m.tvlisttask.control = "RUN"
endfunction

function onGetList() as void
    ?"onGetList() called"
   
    
end function


function tvgrpload()
    m.tvGenresList.content = m.top.tvgrp
end function

function onKeyEvent(key as String, press as Boolean) as Boolean
    
    if key = "OK" and press then
        
     if m.categoryname.hasFocus()
        m.channelbox.visible = true
        m.categoryname.SetFocus(false)
        m.tvGenresList.visible = true
        m.tvGenresList.SetFocus(true)
     endif
    endif
    
     if key = "back" and press then
        m.top.goback = true
     end if

end function 
function dateTimeupdate()

    
    date = CreateObject("roDateTime")
    currdate = date.AsDateString("long-date")
    m.date.text = currdate
    date.ToLocalTime() 
    min = date.GetMinutes()
    hrs = date.GetHours()
    if date.GetHours() < 12 then
        newhrs = hrs.ToStr()
        if date.GetMinutes() < 10
            newmin = ("0"+ min.ToStr()).ToStr()
         else
             newmin =  min.ToStr()
        end if
        updatedHour = newhrs + ":" + newmin +"AM"   
        m.time.text = updatedHour  
    else 
        newhrs = (hrs - 12).ToStr()
        if date.GetMinutes() < 10
            newmin = ("0"+ min.ToStr()).ToStr()
         else
             newmin =  min.ToStr()
        end if
        updatedHour = newhrs + ":" + newmin +"PM"
        m.time.text = updatedHour
    endif    
end function 

can anybody tell me why i am not been able to call the onGetList function when i am setting the result field. Please help somebody

0 Kudos
Need Assistance?
Welcome to the Roku Community! Feel free to search our Community for answers or post your question to get help.

Become a Roku Streaming Expert!

Share your expertise, help fellow streamers, and unlock exclusive rewards as part of the Roku Community. Learn more.