add enq
[enigma2.git] / lib / python / Screens / Ci.py
1 from Screen import *
2 from Components.MenuList import MenuList
3 from Components.ActionMap import ActionMap
4 from Components.ActionMap import NumberActionMap
5 from Components.Header import Header
6 from Components.Button import Button
7 from Components.Label import Label
8
9 from Components.HTMLComponent import *
10 from Components.GUIComponent import *
11 from Components.config import *
12
13 from enigma import *
14
15 class CiConfigList(HTMLComponent, GUIComponent):
16         def __init__(self, list):
17                 GUIComponent.__init__(self)
18                 self.l = eListboxPythonConfigContent()
19                 self.l.setList(list)
20                 self.l.setSeperation(100)
21                 self.list = list
22
23         def toggle(self):
24                 pass
25
26         def handleKey(self, key):
27                 selection = self.getCurrent()
28                 selection[1].handleKey(key)
29                 self.invalidateCurrent()
30
31         def getCurrent(self):
32                 return self.l.getCurrentSelection()
33
34         def invalidateCurrent(self):
35                 self.l.invalidateEntry(self.l.getCurrentSelectionIndex())
36
37         def invalidate(self, entry):
38                 i = 0
39                 for x in self.list:
40                         if (entry.getConfigPath() == x[1].parent.getConfigPath()):
41                                 self.l.invalidateEntry(i)
42                         i += 1
43                 pass
44
45         def GUIcreate(self, parent):
46                 self.instance = eListbox(parent)
47                 self.instance.setContent(self.l)
48
49         def GUIdelete(self):
50                 self.instance.setContent(None)
51                 self.instance = None
52
53 class CiMmi(Screen):
54         def addEntry(self, list, entry):
55                 if entry[0] == "TEXT":          #handle every item (text / pin only?)
56                         #list.append( (entry[1], entry[2]) )
57                         list.append( (entry[1], entry[2]) )
58                 if entry[0] == "PIN":
59                         if entry[3] == 1:
60                                 # masked pins:
61                                 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "-")))
62                         else:                           
63                                 # unmasked pins:
64                                 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (entry[1], "")))                 
65                         
66                         list.append( (entry[2], 0) )    
67                         self.pin = getConfigListEntry("",x)
68                         list.append( self.pin )
69
70         def okbuttonClick(self):
71                 print "ok"
72                 if self.tag == "WAIT":
73                         print "do nothing - wait"
74                 elif self.tag == "MENU":
75                         print "answer MENU"
76                         eDVBCI_UI.getInstance().answerMenu(self.slotid, self["entries"].getCurrent()[1])
77                         self.showWait() 
78                 elif self.tag == "LIST":
79                         print "answer LIST"
80                         eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
81                         self.showWait() 
82                 elif self.tag == "ENQ":
83                         print "answer ENQ"
84                         #eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
85                         self.showWait() 
86
87
88         def closeMmi(self):
89                 self.Timer.stop()
90                 self.close()
91
92         def keyCancel(self):
93                 print "keyCancel"
94                 if self.tag == "WAIT":
95                         self.closeMmi()
96                 elif self.tag == "MENU":
97                         eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
98                         self.showWait() 
99                 elif self.tag == "LIST":
100                         eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
101                         self.showWait() 
102                 elif self.tag == "ENQ":
103                         eDVBCI_UI.getInstance().cancelEnq(self.slotid)
104                         self.showWait() 
105                 else:
106                         print "give cancel action to ci"        
107
108         def keyNumberGlobal(self, number):
109                 self["entries"].handleKey(config.key[str(number)])
110
111         def keyLeft(self):
112                 self["entries"].handleKey(config.key["prevElement"])
113
114         def keyRight(self):
115                 self["entries"].handleKey(config.key["nextElement"])
116
117         def updateList(self, list):
118                 self["entries"].list = list
119                 self["entries"].l.setList(list)
120
121         def showWait(self):
122                 self.tag = "WAIT"
123                 self["title"].setText("")
124                 self["subtitle"].setText("")
125                 self["bottom"].setText("")
126                 list = [ ]
127                 list.append( ("wait for ci...", 0) )
128                 self.updateList(list)
129                 
130         def showScreen(self):
131                 screen = eDVBCI_UI.getInstance().getMMIScreen(self.slotid)
132         
133                 list = [ ]
134
135                 self.tag = screen[0][0]
136                 
137                 for entry in screen:
138                         if entry[0] == "TITLE":
139                                 self["title"].setText(entry[1])
140                         elif entry[0] == "SUBTITLE":
141                                 self["subtitle"].setText(entry[1])
142                         elif entry[0] == "BOTTOM":
143                                 self["bottom"].setText(entry[1])
144                         elif entry[0] == "TEXT":
145                                 self.addEntry(list, entry)
146                         elif entry[0] == "PIN":
147                                 self.addEntry(list, entry)
148
149                 self.updateList(list)
150
151         def TimerCheck(self):
152
153                 if self.action == 0:                    #reset
154                         self.closeMmi()
155                 if self.action == 1:                    #init
156                         self.closeMmi()
157
158                 #module still there ?                   
159                 if eDVBCI_UI.getInstance().getState(self.slotid) != 2:
160                         self.closeMmi()
161
162                 #mmi session still active ?                     
163                 if eDVBCI_UI.getInstance().getMMIState(self.slotid) != 1:
164                         self.closeMmi()
165                         
166                 #new screen available?  
167                 if eDVBCI_UI.getInstance().availableMMI(self.slotid) == 1:
168                         self.showScreen()
169                         
170                 #FIXME: check for mmi-session closed    
171                         
172         def __init__(self, session, slotid, action):
173                 Screen.__init__(self, session)
174                 
175                 print "ciMMI with action" + str(action)
176
177                 self.slotid = slotid
178
179                 self.Timer = eTimer()
180                 self.Timer.timeout.get().append(self.TimerCheck)
181                 self.Timer.start(1000)
182
183                 #else the skins fails
184                 self["title"] = Label("")
185                 self["subtitle"] = Label("")
186                 self["bottom"] = Label("")
187                 self["entries"] = MenuList([ ])
188                 #self["entries"] = CiConfigList([ ])
189
190                 self["actions"] = NumberActionMap(["SetupActions"],
191                         {
192                                 "ok": self.okbuttonClick,
193                                 "cancel": self.keyCancel,
194                                 #for PIN
195                                 "left": self.keyLeft,
196                                 "right": self.keyRight,
197                                 "1": self.keyNumberGlobal,
198                                 "2": self.keyNumberGlobal,
199                                 "3": self.keyNumberGlobal,
200                                 "4": self.keyNumberGlobal,
201                                 "5": self.keyNumberGlobal,
202                                 "6": self.keyNumberGlobal,
203                                 "7": self.keyNumberGlobal,
204                                 "8": self.keyNumberGlobal,
205                                 "9": self.keyNumberGlobal,
206                                 "0": self.keyNumberGlobal
207                         }, -1)
208                 
209                 self.action = action
210
211                 if action == 0:                 #reset
212                         eDVBCI_UI.getInstance().setReset(self.slotid)
213                         self.showWait() 
214                 elif action == 1:               #init
215                         pass
216                         self.showWait() 
217                 elif action == 2:               #start MMI
218                         eDVBCI_UI.getInstance().startMMI(self.slotid)
219                         self.showWait() 
220                 elif action == 3:               #mmi already there (called from infobar)
221                         self.showScreen()       
222                         
223 class CiSelection(Screen):
224         def createMenu(self):
225                 self.list = [ ]
226                 self.list.append( ("Reset", 0) )
227                 self.list.append( ("Init", 1) )
228                 
229                 self.state = eDVBCI_UI.getInstance().getState(0)
230                 if self.state == 0:                     #no module
231                         self.list.append( ("no module found", 2) )
232                 elif self.state == 1:           #module in init
233                         self.list.append( ("init module", 2) )
234                 elif self.state == 2:           #module ready
235                         #get appname            
236                         appname = eDVBCI_UI.getInstance().getAppName(0)
237                         self.list.append( (appname, 2) )
238
239                 self["entries"] .list = self.list
240                 self["entries"] .l.setList(self.list)
241
242         def TimerCheck(self):
243                 state = eDVBCI_UI.getInstance().getState(0)
244                 if self.state != state:
245                         #print "something happens"
246                         self.state = state
247                         self.createMenu()
248         
249         def okbuttonClick(self):
250                 self.slot = 0
251         
252                 if self.state == 2:
253                         self.session.open(CiMmi, 0, self["entries"].getCurrent()[1])
254
255                 #generate menu / list
256                 #list = [ ]
257                 #list.append( ("TEXT", "CA-Info") )
258                 #list.append( ("TEXT", "Card Status") )
259                 #list.append( ("PIN", 6, "Card Pin", 1) )
260                 #self.session.open(CiMmi, 0, 0, "Wichtiges CI", "Mainmenu", "Footer", list)
261
262         def cancel(self):
263                 self.Timer.stop()
264                 self.close()
265                 
266         def __init__(self, session):
267                 #FIXME support for one ci only
268                 Screen.__init__(self, session)
269                 
270                 self["actions"] = ActionMap(["OkCancelActions"], 
271                         {
272                                 "ok": self.okbuttonClick,
273                                 "cancel": self.cancel
274                         })
275
276                 self.list = [ ]
277                 self["entries"] = MenuList(list)
278                 self.createMenu()
279
280                 self.Timer = eTimer()
281                 self.Timer.timeout.get().append(self.TimerCheck)
282                 self.Timer.start(1000)