re-add autostart plugins
[enigma2.git] / lib / python / Components / MovieList.py
1 from HTMLComponent import *
2 from GUIComponent import *
3 from Tools.FuzzyDate import FuzzyTime
4 from ServiceReference import ServiceReference
5
6 from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation
7
8 from enigma import eServiceReference, eServiceCenter, \
9         eServiceCenterPtr, iListableServicePtr, \
10         iStaticServiceInformationPtr
11
12 RT_HALIGN_LEFT = 0
13 RT_HALIGN_RIGHT = 1
14 RT_HALIGN_CENTER = 2
15 RT_HALIGN_BLOCK = 4
16
17 RT_VALIGN_TOP = 0
18 RT_VALIGN_CENTER = 8
19 RT_VALIGN_BOTTOM = 16
20
21 RT_WRAP = 32
22
23
24 #
25 # | name of movie              |
26 #
27 def MovieListEntry(serviceref, serviceHandler):
28         if serviceref.flags & eServiceReference.mustDescent:
29                 return None
30
31         info = serviceHandler.info(serviceref)
32         
33         if info is None:
34                 # ignore service which refuse to info
35                 return None
36         
37         len = info.getLength(serviceref)
38         if len > 0:
39                 len = "%d:%02d" % (len / 60, len % 60)
40         else:
41                 len = "?:??"
42         
43         begin = info.getInfo(serviceref, iServiceInformation.sTimeCreate)
44         res = [ (serviceref, begin) ]
45
46         res.append((0, 0, 0, 560, 30, 0, RT_HALIGN_LEFT, info.getName(serviceref)))
47         
48         description = info.getInfoString(serviceref, iServiceInformation.sDescription)
49
50         begin_string = ""
51         if begin > 0:
52                 t = FuzzyTime(begin)
53                 begin_string = t[0] + ", " + t[1]
54         
55         res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 30, 560, 20, 1, RT_HALIGN_LEFT, description))
56         res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 50, 270, 20, 1, RT_HALIGN_LEFT, begin_string))
57         res.append((eListboxPythonMultiContent.TYPE_TEXT, 290, 50, 270, 20, 1, RT_HALIGN_RIGHT, len))
58         
59         return res
60
61 class MovieList(HTMLComponent, GUIComponent):
62         def __init__(self, root):
63                 GUIComponent.__init__(self)
64                 self.l = eListboxPythonMultiContent()
65                 if root is not None:
66                         self.reload(root)
67                 self.l.setFont(0, gFont("Regular", 30))
68                 self.l.setFont(1, gFont("Regular", 18))
69                 
70         def moveToIndex(self, index):
71                 self.instance.moveSelectionTo(index)
72
73         def getCurrentIndex(self):
74                 return self.instance.getCurrentIndex()
75
76         def getCurrent(self):
77                 return self.l.getCurrentSelection()[0]
78         
79         def GUIcreate(self, parent):
80                 self.instance = eListbox(parent)
81                 self.instance.setContent(self.l)
82                 self.instance.setItemHeight(75)
83         
84         def GUIdelete(self):
85                 self.instance.setContent(None)
86                 self.instance = None
87
88         def reload(self, root = None):
89                 if root is not None:
90                         self.load(root)
91                 else:
92                         self.load(self.root)
93                 self.l.setList(self.list)
94
95         def load(self, root):
96                 # this lists our root service, then building a 
97                 # nice list
98                 
99                 self.list = [ ]
100                 self.root = root
101                 
102                 serviceHandler = eServiceCenter.getInstance()
103                 list = serviceHandler.list(root)
104                 
105                 if list is None:
106                         raise "listing of movies failed"
107
108                 movieList = [ ]
109                 while 1:
110                         s = list.getNext()
111                         if not s.valid():
112                                 del list
113                                 break
114                         movieList.append(s)
115                 
116                 # now process them...
117                 for ref in movieList:
118                         a = MovieListEntry(ref, serviceHandler)
119                         if a is not None:
120                                 self.list.append(a)
121                 
122                 self.list.sort(key=lambda x: -x[0][1])
123
124         def moveTo(self, serviceref):
125                 found = 0
126                 count = 0
127                 for x in self.list:
128                         if str(ServiceReference(x[0][0])) == str(ServiceReference(serviceref)):
129                                 found = count
130                         count += 1
131                 self.instance.moveSelectionTo(found)
132
133         def moveDown(self):
134                 self.instance.moveSelection(self.instance.moveDown)