Forum Discussion

georgejecook's avatar
georgejecook
Streaming Star
8 years ago

Unbelievable issue with accessing node as field of other node

I have a node with a field type like this

<fields>
<id="[size=85][font=monospace]colors[/font][/size]" type="node"> 



which holds another node described as

<?xml version="1.0" encoding="UTF-8"?>
<component
    name="ColorsContent"
    extends="ContentNode"



I can print out this node as follows

 m.top.content.colors



and get


<Component: roSGNode> =
{
    change: <Component: roAssociativeArray>
    focusable: false
    focusedChild: <Component: roInvalid>
    id: ""
    backgroundColor: "#e5e4e5"
    fadeOverlayStyle: "verticalGradient"
    progressBarBackgroundColor: "#000000BB"
    progressBarColor: "#ffc706"
    textColor: "#313131"
    tileColor: "#003d8d"
}



but if I access any properties, I get an error.. w.. t.. h.. 


 ? m.top.content.colors.id
BRIGHTSCRIPT: ERROR: roSGNode.<lookup>: RoSGNode instance of subtype ColorsContent is inaccessible from render thread
invalid

1 Reply

  • Okay, after speaking with a roku guy, this does look like a bug.

    I've tested a workaround.

    if you have node fields, then add them as children also
    once you pass the thread boundary, remove the duplicate child - your node field will now work

    I have an elegant way of doing this with a base contentnode class, which has nodeFieldNames array and hasNodeFields bool fields declared
    when I create my nodes in my background task, my node factory adds the contentnode fields as children, and sets the nodeFieldNames and hasNodeFields values via a WorkAroundNodeRendesvouBug method

    on the other side, I then iterate over the node graph, and remove all children that correspond to contentNodeFields, on all nodes that have hasNodeFields set to true

    I can do this easily and without much fuss becauseI have a framework for processing my json into nodes, and for returning my contentNodes back to RSG.

    I can't share exact code, because it belongs to my client 😉

    Good luck peeps