Добавление внутренней функции поиска в канал Screnegraph Brightscript

Мне нужно добавить функцию поиска в мой сценарий графа сцены Brightscript для канала Roku. Есть ли у кого-нибудь простой образец поиска или сценарий, который я могу использовать для добавления в сценарий канала Roku "скользящей панели"?

RoSearch обесценился.

Текущая страница очень похожа на пример скользящей панели.

Требуется работающая функция поиска на моем канале Roku.

<component name = "minikeyboardexample" extends = "Group" initialFocus = "exampleMiniKeyboard" >

<script type="text/brightscript" >
<![CDATA[
sub init()
  m.testlabel = m.top.FindNode("testLabel")
  m.testpostergrid = m.top.FindNode("testPosterGrid")
  m.testpostergridcontent = createObject("roSGNode","ContentNode")
  m.readPosterGridTask = createObject("roSGNode","postergridCR")
  m.readPosterGridTask.setField("postergriduri","http://test-xml.xml")
  m.readPosterGridTask.observeField("gotitem","buildpostergrid")
  m.readPosterGridTask.observeField("gotcontent","showpostergrid")
  m.readPosterGridTask.control = "RUN"
  m.top.setFocus(true)
end sub

sub buildpostergrid()
  gridposter = createObject("roSGNode","ContentNode")
  gridposter.hdgridposterurl = m.readPosterGridTask.hdgridposterurl
  gridposter.hdposterurl = m.readPosterGridTask.hdposterurl
  gridposter.sdgridposterurl = m.readPosterGridTask.sdgridposterurl
  gridposter.sdposterurl = m.readPosterGridTask.sdposterurl
  gridposter.shortdescriptionline1 = m.readPosterGridTask.shortdescriptionline1
  gridposter.shortdescriptionline2 = m.readPosterGridTask.shortdescriptionline2
  gridposter.x = m.readPosterGridTask.xposterpos
  gridposter.y = m.readPosterGridTask.yposterpos
  gridposter.w = m.readPosterGridTask.wnumcols
  gridposter.h = m.readPosterGridTask.hnumrows
  m.testpostergridcontent.appendChild(gridposter)
end sub

sub showpostergrid()
  m.testlabel.text = "Here's the PosterGrid: "
  m.testpostergrid.content=m.testpostergridcontent
  m.testpostergrid.visible=true
  m.testpostergrid.setFocus(true)
end sub
]]>
</script>



  <children>

    <MiniKeyboard id = "exampleMiniKeyboard" />

    <Label id="testLabel" translation="[100,32]" text="Building PosterGrid... " />

    <PosterGrid
    id="testPosterGrid"
    translation="[100,100]"
    basePosterSize="[240,240]"
    itemSpacing="[32,32]"
    caption1NumLines="1"
    caption2NumLines="1"
    numColumns="4"
    numRows="3"
    />


  </children>

</component>

person MarlonC    schedule 08.06.2019    source источник


Ответы (2)


сначала прочтите следующие идеи: https://developer.roku.com/en-gb/docs/developer-program/discovery/search/implementing-search.md

этот код для функции поиска. он применяется статическим способом.

sub Main()


''Search Screen UI

'REM ******************************************************
'REM Main routine - example of search screen usage
'REM ******************************************************
    print "start"

    'toggle the search suggestions vs. search history behavior
    'this allow you to generate both versions of the example below

    displayHistory = false
    history = CreateObject("roArray", 1, true)

    'prepopulate the search history with sample results

    history.Push("seinfeld")
    history.Push("fraiser")
    history.Push("cheers")
    port = CreateObject("roMessagePort")
    screen = CreateObject("roSearchScreen")

    'commenting out SetBreadcrumbText() hides breadcrumb on screen

    screen.SetBreadcrumbText("", "Search Channel")
    screen.SetMessagePort(port)
    if displayHistory
       screen.SetSearchTermHeaderText("Recent Searches:")
        screen.SetSearchButtonText("search") 
        screen.SetClearButtonText("clear history")
        screen.SetClearButtonEnabled(true) 'defaults to true
        screen.SetSearchTerms(history)
    else
        screen.SetSearchTermHeaderText("Suggestions:")
        screen.SetSearchButtonText("search")
        screen.SetClearButtonEnabled(false)
    endif

    print "Doing show screen..."

    screen.Show()

    print "Waiting for a message from the screen..."

    ' search screen main event loop

    done = false
    while done = false
        msg = wait(0, screen.GetMessagePort())
        if type(msg) = "roSearchScreenEvent"
            if msg.isScreenClosed()
                print "screen closed"
                done = true
            else if msg.isCleared()
                print "search terms cleared"
                history.Clear()
            else if msg.isPartialResult()
                print "partial search: "; msg.GetMessage()
                if not displayHistory                    
                     screen.SetSearchTerms(GenerateSearchSuggestions(msg.GetMessage()))
                endif
            else if msg.isFullResult()
                print "full search: "; msg.GetMessage()
                history.Push(msg.GetMessage())
                if displayHistory
                    screen.AddSearchTerm(msg.GetMessage())
                end if

               'uncomment to exit the screen after a full search result:
                'done = true

            else
                print "Unknown event: "; msg.GetType(); " msg: "; sg.GetMessage()
            endif
        endif
    endwhile

    print "Exiting..."
End Sub 

Function GenerateSearchSuggestions(partSearchText As String) As Object
    availableContent = [
        "ch1"
        "ch2"
        "ch3"
        "ch4"
        "ch5"
        "ch6"
        "ch7"
        "ch8"
        ]
    suggestions = []
    if partSearchText <> ""
        partSearchText = LCase(partSearchText)
        for each available in availableContent
            if available.Instr(partSearchText) >= 0
                suggestions.Push(available)
            end if
        end for
    end if
    return suggestions
End Function
End sub

этот код записывается в файл main.brs

Надеюсь, этот код будет вам полезен.

person Nikunj Chaklasiya    schedule 13.06.2019
comment
В документе Roku говорится, что этот компонент устарел и будет удален из Roku OS с 1 января 2019 г. Начиная с 1 июля 2017 г. любые новые каналы, использующие этот компонент, будут отклоняться во время сертификации. Начиная с 1 января 2018 г., любые обновления существующих каналов, использующие этот компонент, будут отклоняться во время сертификации. - person Dhir Pratap; 16.06.2019
comment
Спасибо Дхир Пратап за информацию. Вы предлагаете любой другой способ поиска в Roku в Dynamically like Netflix и на канале YouTube для Roku. - person Nikunj Chaklasiya; 17.06.2019
comment
Да, как я уже упоминал в OP, RoSearch обесценился. - person MarlonC; 24.06.2019
comment
здесь ссылка roSearchScreen находится здесь developer.roku.com/ en-gb / docs / links / brightscript / и roSearchScreenEvent находятся здесь developer.roku.com/en-gb/docs/references/brightscript/events/ - person Nikunj Chaklasiya; 26.06.2019

Большинство экранов поиска в SceenGraph используют комбинацию MiniKeyboard с комбинацией любого типа списка или сетки, например MarkupGrid. Вы добавляете эти компоненты к своим панелям или групповым компонентам и сами управляете переходом.

person Dhir Pratap    schedule 17.06.2019
comment
Спасибо за ответ. Проще сказать, что сделано. Я пробовал. Просто не могу обойти это. - person MarlonC; 24.06.2019
comment
Правда что. Пожалуйста, дайте мне знать о конкретной проблеме, которую вы обнаруживаете, и постараемся на нее ответить. - person Dhir Pratap; 28.06.2019
comment
Я обновил свой исходный вопрос, чтобы дать вам больше подробностей. Заранее спасибо. - person MarlonC; 12.08.2019
comment
Я видел обновленный код, не хватает только функции обработчика клавиш. См. Этот документ для onKeyEvent - person Dhir Pratap; 30.09.2019