follow itemHeight changes
[enigma2.git] / lib / python / Components / MovieList.py
index 970180cd243ec1a685ce8ef2b9dec45c28045424..c3ec1b16bd2a95307eee72d55dc48ca76301aa29 100644 (file)
@@ -1,25 +1,23 @@
-from HTMLComponent import *
 from GUIComponent import *
 from Tools.FuzzyDate import FuzzyTime
 from ServiceReference import ServiceReference
-from Components.MultiContent import MultiContentEntryText, RT_HALIGN_LEFT, RT_HALIGN_RIGHT
+from Components.MultiContent import MultiContentEntryText
 
-from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation
+from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation, \
+       RT_HALIGN_LEFT, RT_HALIGN_RIGHT, eServiceReference, eServiceCenter
 
-from enigma import eServiceReference, eServiceCenter, \
-       eServiceCenterPtr, iListableServicePtr, \
-       iStaticServiceInformationPtr
-
-class MovieList(HTMLComponent, GUIComponent):
+class MovieList(GUIComponent):
        def __init__(self, root):
                GUIComponent.__init__(self)
                self.l = eListboxPythonMultiContent()
+               self.tags = set()
                if root is not None:
                        self.reload(root)
                self.l.setFont(0, gFont("Regular", 22))
                self.l.setFont(1, gFont("Regular", 18))
                self.l.setFont(2, gFont("Regular", 16))
                self.l.setBuildFunc(self.buildMovieListEntry)
+               self.l.setItemHeight(75)
 
        #
        # | name of movie              |
@@ -59,6 +57,10 @@ class MovieList(HTMLComponent, GUIComponent):
        def getCurrentIndex(self):
                return self.instance.getCurrentIndex()
 
+       def getCurrentEvent(self):
+               l = self.l.getCurrentSelection()
+               return l and l[0] and l[1] and l[1].getEvent(l[0])
+
        def getCurrent(self):
                l = self.l.getCurrentSelection()
                return l and l[0]
@@ -67,13 +69,12 @@ class MovieList(HTMLComponent, GUIComponent):
        
        def postWidgetCreate(self, instance):
                instance.setContent(self.l)
-               instance.setItemHeight(75)
        
-       def reload(self, root = None):
+       def reload(self, root = None, filter_tags = None):
                if root is not None:
-                       self.load(root)
+                       self.load(root, filter_tags)
                else:
-                       self.load(self.root)
+                       self.load(self.root, filter_tags)
                self.l.setList(self.list)
 
        def removeService(self, service):
@@ -91,7 +92,7 @@ class MovieList(HTMLComponent, GUIComponent):
                        self.list[index] = (x[0], x[1], x[2], x[1].getLength(x[0]))
                        self.l.invalidateEntry(index)
 
-       def load(self, root):
+       def load(self, root, filter_tags):
                # this lists our root service, then building a 
                # nice list
                
@@ -101,6 +102,8 @@ class MovieList(HTMLComponent, GUIComponent):
                self.serviceHandler = eServiceCenter.getInstance()
                list = self.serviceHandler.list(root)
                
+               tags = set()
+               
                if list is None:
                        raise "listing of movies failed"
 
@@ -114,9 +117,28 @@ class MovieList(HTMLComponent, GUIComponent):
                        if info is None:
                                continue
                        begin = info.getInfo(serviceref, iServiceInformation.sTimeCreate)
+                       
+                       # convert space-seperated list of tags into a set
+                       this_tags = info.getInfoString(serviceref, iServiceInformation.sTags).split(' ')
+                       if this_tags == ['']:
+                               this_tags = []
+                       this_tags = set(this_tags)
+                       
+                       # filter_tags is either None (which means no filter at all), or 
+                       # a set. In this case, all elements of filter_tags must be present,
+                       # otherwise the entry will be dropped.                  
+                       if filter_tags is not None and not this_tags.issuperset(filter_tags):
+                               continue
+                       
+                       tags |= this_tags
                        self.list.append((serviceref, info, begin, -1))
                
+               # sort: key is 'begin'
                self.list.sort(key=lambda x: -x[2])
+               
+               # finally, store a list of all tags which were found. these can be presented
+               # to the user to filter the list
+               self.tags = tags
 
        def moveTo(self, serviceref):
                found = 0