Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
developer34
Level 7

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