commit e31566ca8aa85e7000ed33a1d0f914a60ed3ac7a
parent ac02a3adb6595f93b6f3b42308cd2fd771a4bf00
Author: Brian C. Lane <bcl@ibrianlane.com>
Date: Mon, 27 May 2013 11:45:22 -0700
Add search screen and row update
Diffstat:
2 files changed, 109 insertions(+), 22 deletions(-)
diff --git a/HMS/source/appDisplayDirectory.brs b/HMS/source/appDisplayDirectory.brs
@@ -38,27 +38,13 @@ Function displayDirectory( url As String ) As Object
' Hold all the movie objects
screen = CreateObject("roArray", categories.Count(), false)
- ' Setup the Search/Setup entries for first row
- search = CreateObject("roArray", 2, true)
- o = CreateObject("roAssociativeArray")
- o.ContentType = "episode"
- o.Title = "Setup"
- o.SDPosterUrl = url+"/Setup-SD.png"
- o.HDPosterUrl = url+"/Setup-HD.png"
- search.Push(o)
-
- o = CreateObject("roAssociativeArray")
- o.ContentType = "episode"
- o.Title = "Search"
- o.SDPosterUrl = url+"/Search-SD.png"
- o.HDPosterUrl = url+"/Search-HD.png"
- search.Push(o)
- ' Add as first row
- grid.SetContentList(0, search)
+ ' Add as utility row
+ grid.SetContentList(0, getUtilRow(url))
screen.Push(search)
' run the grid
showTimeBreadcrumb(grid)
+ grid.SetFocusedListitem(0, 1)
grid.Show()
' Setup each category's list
@@ -104,14 +90,20 @@ Function displayDirectory( url As String ) As Object
print "Selected msg: ";msg.GetMessage();"row: ";msg.GetIndex();
print " col: ";msg.GetData()
- ' Is this the Search option?
-
- ' Is this the Setup option?
if msg.GetIndex() = 0 and msg.GetData() = 0 then
checkServerUrl(true)
else if msg.GetIndex() = 0 and msg.GetData() = 1 then
-' searchScreen(screen)
- print "Search Selected"
+ ' search returns a roArray of MovieObjects
+ results = searchScreen(screen)
+
+ ' Make a new search rot
+ searchRow = getUtilRow(url)
+ searchRow.Append(results)
+ ' Remove the old one and add the new one, selecting first result
+ screen.Shift()
+ screen.Unshift(searchRow)
+ grid.SetContentList(0, searchRow)
+ grid.SetFocusedListitem(0, 2)
else
playMovie(screen[msg.GetIndex()][msg.GetData()])
end if
@@ -122,6 +114,29 @@ Function displayDirectory( url As String ) As Object
end while
End Function
+
+' Get the utility row (Search, Setup)
+Function getUtilRow(url As String) As Object
+ ' Setup the Search/Setup entries for first row
+ search = CreateObject("roArray", 2, true)
+ o = CreateObject("roAssociativeArray")
+ o.ContentType = "episode"
+ o.Title = "Setup"
+ o.SDPosterUrl = url+"/Setup-SD.png"
+ o.HDPosterUrl = url+"/Setup-HD.png"
+ search.Push(o)
+
+ o = CreateObject("roAssociativeArray")
+ o.ContentType = "episode"
+ o.Title = "Search"
+ o.SDPosterUrl = url+"/Search-SD.png"
+ o.HDPosterUrl = url+"/Search-HD.png"
+ search.Push(o)
+
+ return search
+End Function
+
+
' Put this into utils
Function getLastElement(url As String) As String
' Get last element of URL
diff --git a/HMS/source/searchScreen.brs b/HMS/source/searchScreen.brs
@@ -0,0 +1,72 @@
+'********************************************************************
+'** Home Media Server Application - Main
+'** Copyright (c) 2010-2013 Brian C. Lane All Rights Reserved.
+'********************************************************************
+
+'********************************************************************
+' Display search string
+'********************************************************************
+Function searchScreen(screenItems As Object) As Object
+' screenItems is the double roArray of the screen objects. First row is the
+' search row, so ignore it.
+
+ port = CreateObject("roMessagePort")
+ screen = CreateObject("roSearchScreen")
+ screen.SetMessagePort(port)
+ screen.SetSearchTermHeaderText("Suggestions:")
+ screen.SetSearchButtonText("search")
+ screen.SetClearButtonEnabled(false)
+
+ screen.Show()
+
+ suggestions = invalid
+ while true
+ msg = wait(0, screen.GetMessagePort())
+ if type(msg) = "roSearchScreenEvent" then
+ if msg.isScreenClosed()
+ return invalid
+ else if msg.isPartialResult() then
+ print "partial search: "; msg.GetMessage()
+ suggestions = getSuggestions(screenItems, msg.GetMessage())
+ terms = getTitles(suggestions)
+ screen.SetSearchTerms(terms)
+ else if msg.isFullResult()
+ print "full search: "; msg.GetMessage()
+ return suggestions
+ else
+ print "Unknown event: "; msg.GetType(); " msg: ";sg.GetMessage()
+ end if
+ end if
+ end while
+End Function
+
+'********************************************************************
+' Return an array of suggested movies objects
+'********************************************************************
+Function getSuggestions(items As Object, needle As String) As Object
+ suggestions = CreateObject("roArray", 10, true)
+ ' iterate the whole list, gathering matches on Title
+ For i = 1 to items.Count()-1
+ For Each movie In items[i]
+ if Instr(1, LCase(movie.Title), needle) <> 0 then
+ suggestions.Push(movie)
+ end if
+ End For
+ End For
+ Sort(suggestions, function(k)
+ return LCase(k.Title)
+ end function)
+ return suggestions
+End Function
+
+'********************************************************************
+' Return an array of titles
+'********************************************************************
+Function getTitles(movies As Object) As Object
+ titles = CreateObject("roArray", 10, true)
+ For Each movie In movies
+ titles.Push(movie.Title)
+ End For
+ return titles
+End Function
+