1 from Screens.Screen import Screen
2 from Screens.ChannelSelection import *
3 from Components.ActionMap import HelpableActionMap, ActionMap, NumberActionMap
4 from Components.Sources.List import List
5 from Components.Sources.StaticText import StaticText
6 from Components.config import ConfigNothing
7 from Components.ConfigList import ConfigList
8 from Components.Label import Label
9 from Components.SelectionList import SelectionList
10 from Components.MenuList import MenuList
11 from ServiceReference import ServiceReference
12 from Plugins.Plugin import PluginDescriptor
13 from xml.etree.cElementTree import parse as ci_parse
14 from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
15 from enigma import eDVBCI_UI, eDVBCIInterfaces, eEnv
17 from os import system, path as os_path
19 class CIselectMainMenu(Screen):
21 <screen name="CIselectMainMenu" position="center,center" size="500,250" title="CI assignment" >
22 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
23 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
24 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
25 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
26 <widget name="CiList" position="5,50" size="490,200" scrollbarMode="showOnDemand" />
29 def __init__(self, session, args = 0):
31 Screen.__init__(self, session)
33 self["key_red"] = StaticText(_("Close"))
34 self["key_green"] = StaticText(_("Edit"))
36 self["actions"] = ActionMap(["ColorActions","SetupActions"],
38 "green": self.greenPressed,
40 "ok": self.greenPressed,
44 NUM_CI=eDVBCIInterfaces.getInstance().getNumOfSlots()
46 print "[CI_Wizzard] FOUND %d CI Slots " % NUM_CI
52 for slot in range(NUM_CI):
53 state = eDVBCI_UI.getInstance().getState(slot)
55 appname = _("Slot %d") %(slot+1) + " - " + _("no module found")
57 appname = _("Slot %d") %(slot+1) + " - " + _("init modules")
59 appname = _("Slot %d") %(slot+1) + " - " + eDVBCI_UI.getInstance().getAppName(slot)
61 appname = _("Slot %d") %(slot+1) + " - " + _("no module found")
62 self.list.append( (appname, ConfigNothing(), 0, slot) )
64 self.list.append( (_("no CI slots found") , ConfigNothing(), 1, -1) )
66 menuList = ConfigList(self.list)
67 menuList.list = self.list
68 menuList.l.setList(self.list)
69 self["CiList"] = menuList
70 self.onShown.append(self.setWindowTitle)
72 def setWindowTitle(self):
73 self.setTitle(_("CI assignment"))
75 def greenPressed(self):
76 cur = self["CiList"].getCurrent()
77 if cur and len(cur) > 2:
81 print "[CI_Wizzard] there is no CI Slot in your receiver"
83 print "[CI_Wizzard] selected CI Slot : %d" % slot
84 if config.usage.setup_level.index > 1: # advanced
85 self.session.open(CIconfigMenu, slot)
87 self.session.open(easyCIconfigMenu, slot)
89 """def yellowPressed(self): # unused
90 NUM_CI=eDVBCIInterfaces.getInstance().getNumOfSlots()
91 print "[CI_Check] FOUND %d CI Slots " % NUM_CI
93 for ci in range(NUM_CI):
94 print eDVBCIInterfaces.getInstance().getDescrambleRules(ci)"""
97 class CIconfigMenu(Screen):
99 <screen name="CIconfigMenu" position="center,center" size="560,440" title="CI assignment" >
100 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
101 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
102 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
103 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
104 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
105 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
106 <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
107 <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
108 <widget source="CAidList_desc" render="Label" position="5,50" size="550,22" font="Regular;20" backgroundColor="#25062748" transparent="1" />
109 <widget source="CAidList" render="Label" position="5,80" size="550,45" font="Regular;20" backgroundColor="#25062748" transparent="1" />
110 <ePixmap pixmap="skin_default/div-h.png" position="0,125" zPosition="1" size="560,2" />
111 <widget source="ServiceList_desc" render="Label" position="5,130" size="550,22" font="Regular;20" backgroundColor="#25062748" transparent="1" />
112 <widget name="ServiceList" position="5,160" size="550,250" zPosition="1" scrollbarMode="showOnDemand" />
113 <widget source="ServiceList_info" render="Label" position="5,160" size="550,250" zPosition="2" font="Regular;20" backgroundColor="#25062748" transparent="1" />
116 def __init__(self, session, ci_slot="9"):
118 Screen.__init__(self, session)
120 self.filename = eEnv.resolve("${sysconfdir}/enigma2/ci") + str(self.ci_slot) + ".xml"
122 self["key_red"] = StaticText(_("Delete"))
123 self["key_green"] = StaticText(_("add Service"))
124 self["key_yellow"] = StaticText(_("add Provider"))
125 self["key_blue"] = StaticText(_("select CAId"))
126 self["CAidList_desc"] = StaticText(_("assigned CAIds:"))
127 self["CAidList"] = StaticText()
128 self["ServiceList_desc"] = StaticText(_("assigned Services/Provider:"))
129 self["ServiceList_info"] = StaticText()
131 self["actions"] = ActionMap(["ColorActions","SetupActions"],
133 "green": self.greenPressed,
134 "red": self.redPressed,
135 "yellow": self.yellowPressed,
136 "blue": self.bluePressed,
137 "cancel": self.cancel
140 print "[CI_Wizzard_Config] Configuring CI Slots : %d " % self.ci_slot
144 print eDVBCIInterfaces.getInstance().readCICaIds(self.ci_slot)
145 for caid in eDVBCIInterfaces.getInstance().readCICaIds(self.ci_slot):
147 self.caidlist.append((str(hex(int(caid))),str(caid),i))
149 print "[CI_Wizzard_Config_CI%d] read following CAIds from CI: %s" %(self.ci_slot, self.caidlist)
151 self.selectedcaid = []
152 self.servicelist = []
155 serviceList = ConfigList(self.servicelist)
156 serviceList.list = self.servicelist
157 serviceList.l.setList(self.servicelist)
158 self["ServiceList"] = serviceList
161 # if config mode !=advanced autoselect any caid
162 if config.usage.setup_level.index <= 1: # advanced
163 self.selectedcaid=self.caidlist
164 self.finishedCAidSelection(self.selectedcaid)
165 self.onShown.append(self.setWindowTitle)
167 def setWindowTitle(self):
168 self.setTitle(_("CI assignment"))
170 def redPressed(self):
173 def greenPressed(self):
174 self.session.openWithCallback( self.finishedChannelSelection, myChannelSelection, None)
176 def yellowPressed(self):
177 self.session.openWithCallback( self.finishedProviderSelection, myProviderSelection, None)
179 def bluePressed(self):
180 self.session.openWithCallback(self.finishedCAidSelection, CAidSelect, self.caidlist, self.selectedcaid)
187 def setServiceListInfo(self):
188 if len(self.servicelist):
189 self["ServiceList_info"].setText("")
191 self["ServiceList_info"].setText(_("no Services/Providers selected"))
194 cur = self["ServiceList"].getCurrent()
195 if cur and len(cur) > 2:
196 self.servicelist.remove(cur)
197 self["ServiceList"].l.setList(self.servicelist)
198 self.setServiceListInfo()
200 def finishedChannelSelection(self, *args):
203 service_ref = ServiceReference(ref)
204 service_name = service_ref.getServiceName()
205 if find_in_list(self.servicelist, service_name, 0)==False:
206 split_ref=service_ref.ref.toString().split(":")
207 if split_ref[0] == "1":#== dvb service und nicht muell von None
208 self.servicelist.append( (service_name , ConfigNothing(), 0, service_ref.ref.toString()) )
209 self["ServiceList"].l.setList(self.servicelist)
210 self.setServiceListInfo()
212 def finishedProviderSelection(self, *args):
213 if len(args)>1: # bei nix selected kommt nur 1 arg zurueck (==None)
216 if find_in_list(self.servicelist, name, 0)==False:
217 self.servicelist.append( (name , ConfigNothing(), 1, dvbnamespace) )
218 self["ServiceList"].l.setList(self.servicelist)
219 self.setServiceListInfo()
221 def finishedCAidSelection(self, *args):
223 self.selectedcaid=args[0]
225 if len(self.selectedcaid):
226 for item in self.selectedcaid:
228 self.caids+= ", " + item[0]
233 self.caids=_("no CAId selected")
236 self.caids=_("no CAId selected")
237 self["CAidList"].setText(self.caids)
241 fp = file(self.filename, 'w')
242 fp.write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n")
244 fp.write("\t<slot>\n")
245 fp.write("\t\t<id>%s</id>\n" % self.ci_slot)
246 for item in self.selectedcaid:
247 if len(self.selectedcaid):
248 fp.write("\t\t<caid id=\"%s\" />\n" % item[0])
249 for item in self.servicelist:
250 if len(self.servicelist):
252 fp.write("\t\t<provider name=\"%s\" dvbnamespace=\"%s\" />\n" % (item[0], item[3]))
254 fp.write("\t\t<service name=\"%s\" ref=\"%s\" />\n" % (item[0], item[3]))
255 fp.write("\t</slot>\n")
259 print "[CI_Config_CI%d] xml not written" %self.ci_slot
260 os.unlink(self.filename)
263 if not os_path.exists(self.filename):
266 def getValue(definitions, default):
268 Len = len(definitions)
269 return Len > 0 and definitions[Len-1].text or default
272 tree = ci_parse(self.filename).getroot()
273 self.read_services=[]
274 self.read_providers=[]
277 for slot in tree.findall("slot"):
278 read_slot = getValue(slot.findall("id"), False).encode("UTF-8")
279 print "ci " + read_slot
282 for caid in slot.findall("caid"):
283 read_caid = caid.get("id").encode("UTF-8")
284 self.selectedcaid.append((str(read_caid),str(read_caid),i))
285 self.usingcaid.append(long(read_caid,16))
288 for service in slot.findall("service"):
289 read_service_name = service.get("name").encode("UTF-8")
290 read_service_ref = service.get("ref").encode("UTF-8")
291 self.read_services.append (read_service_ref)
293 for provider in slot.findall("provider"):
294 read_provider_name = provider.get("name").encode("UTF-8")
295 read_provider_dvbname = provider.get("dvbnamespace").encode("UTF-8")
296 self.read_providers.append((read_provider_name,read_provider_dvbname))
298 self.ci_config.append((int(read_slot), (self.read_services, self.read_providers, self.usingcaid)))
300 print "[CI_Config_CI%d] error parsing xml..." %self.ci_slot
302 for item in self.read_services:
304 self.finishedChannelSelection(item)
306 for item in self.read_providers:
308 self.finishedProviderSelection(item[0],item[1])
311 self.finishedCAidSelection(self.selectedcaid)
312 self["ServiceList"].l.setList(self.servicelist)
313 self.setServiceListInfo()
316 class easyCIconfigMenu(CIconfigMenu):
318 <screen name="easyCIconfigMenu" position="center,center" size="560,440" title="CI assignment" >
319 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
320 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
321 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
322 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
323 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
324 <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
325 <widget source="ServiceList_desc" render="Label" position="5,50" size="550,22" font="Regular;20" backgroundColor="#25062748" transparent="1" />
326 <widget name="ServiceList" position="5,80" size="550,300" zPosition="1" scrollbarMode="showOnDemand" />
327 <widget source="ServiceList_info" render="Label" position="5,80" size="550,300" zPosition="2" font="Regular;20" backgroundColor="#25062748" transparent="1" />
330 def __init__(self, session, ci_slot="9"):
333 CIconfigMenu.__init__(self, session, ci_slot)
335 self["actions"] = ActionMap(["ColorActions","SetupActions"],
337 "green": self.greenPressed,
338 "red": self.redPressed,
339 "yellow": self.yellowPressed,
340 "cancel": self.cancel
344 class CAidSelect(Screen):
346 <screen name="CAidSelect" position="center,center" size="450,440" title="select CAId's" >
347 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
348 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
349 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
350 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
351 <widget name="list" position="5,50" size="440,330" scrollbarMode="showOnDemand" />
352 <ePixmap pixmap="skin_default/div-h.png" position="0,390" zPosition="1" size="450,2" />
353 <widget source="introduction" render="Label" position="0,400" size="450,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
356 def __init__(self, session, list, selected_caids):
358 Screen.__init__(self, session)
360 self.list = SelectionList()
361 self["list"] = self.list
363 for listindex in range(len(list)):
364 if find_in_list(selected_caids,list[listindex][0],0):
365 self.list.addSelection(list[listindex][0], list[listindex][1], listindex, True)
367 self.list.addSelection(list[listindex][0], list[listindex][1], listindex, False)
369 self["key_red"] = StaticText(_("Cancel"))
370 self["key_green"] = StaticText(_("Save"))
371 self["introduction"] = StaticText(_("Press OK to select/deselect a CAId."))
373 self["actions"] = ActionMap(["ColorActions","SetupActions"],
375 "ok": self.list.toggleSelection,
376 "cancel": self.cancel,
377 "green": self.greenPressed,
380 self.onShown.append(self.setWindowTitle)
382 def setWindowTitle(self):
383 self.setTitle(_("select CAId's"))
385 def greenPressed(self):
386 list = self.list.getSelectionsList()
393 class myProviderSelection(ChannelSelectionBase):
395 <screen name="myProviderSelection" position="center,center" size="560,440" title="Select provider to add...">
396 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
397 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
398 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
399 <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
400 <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
401 <widget name="list" position="5,50" size="550,330" scrollbarMode="showOnDemand" />
402 <ePixmap pixmap="skin_default/div-h.png" position="0,390" zPosition="1" size="560,2" />
403 <widget source="introduction" render="Label" position="0,400" size="560,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
406 def __init__(self, session, title):
407 ChannelSelectionBase.__init__(self, session)
408 self.onShown.append(self.__onExecCallback)
410 self["actions"] = ActionMap(["OkCancelActions", "ChannelSelectBaseActions"],
412 "showFavourites": self.doNothing,
413 "showAllServices": self.cancel,
414 "showProviders": self.doNothing,
415 "showSatellites": self.doNothing,
416 "cancel": self.cancel,
417 "ok": self.channelSelected
419 self["key_red"] = StaticText(_("Close"))
420 self["key_green"] = StaticText()
421 self["key_yellow"] = StaticText()
422 self["key_blue"] = StaticText()
423 self["introduction"] = StaticText(_("Press OK to select a Provider."))
428 def __onExecCallback(self):
429 self.showSatellites()
430 self.setTitle(_("Select provider to add..."))
432 def channelSelected(self): # just return selected service
433 ref = self.getCurrentSelection()
434 splited_ref=ref.toString().split(":")
435 if ref.flags == 7 and splited_ref[6] != "0":
436 self.dvbnamespace=splited_ref[6]
439 self.close(ref.getName(), self.dvbnamespace)
441 def showSatellites(self):
442 if not self.pathChangeDisabled:
443 refstr = '%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types)
444 if not self.preEnterPath(refstr):
445 ref = eServiceReference(refstr)
449 if self.isBasePathEqual(ref):
450 if self.isPrevPathEqual(ref):
452 prev = self.pathUp(justSet)
454 currentRoot = self.getRoot()
455 if currentRoot is None or currentRoot != ref:
458 self.enterPath(ref, True)
460 serviceHandler = eServiceCenter.getInstance()
461 servicelist = serviceHandler.list(ref)
462 if not servicelist is None:
464 service = servicelist.getNext()
465 if not service.valid(): #check if end of list
467 unsigned_orbpos = service.getUnsignedData(4) >> 16
468 orbpos = service.getData(4) >> 16
471 if service.getPath().find("FROM PROVIDER") != -1:
472 service_type = _("Providers")
474 # why we need this cast?
475 service_name = str(nimmanager.getSatDescription(orbpos))
477 if unsigned_orbpos == 0xFFFF: #Cable
478 service_name = _("Cable")
479 elif unsigned_orbpos == 0xEEEE: #Terrestrial
480 service_name = _("Terrestrial")
482 if orbpos > 1800: # west
483 orbpos = 3600 - orbpos
487 service_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10)
488 service.setName("%s - %s" % (service_name, service_type))
489 self.servicelist.addService(service)
490 self.servicelist.finishFill()
492 self.setCurrentSelection(prev)
497 class myChannelSelection(ChannelSelectionBase):
499 <screen name="myChannelSelection" position="center,center" size="560,440" title="Select service to add...">
500 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
501 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
502 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
503 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
504 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
505 <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
506 <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
507 <widget name="list" position="5,50" size="550,330" scrollbarMode="showOnDemand" />
508 <ePixmap pixmap="skin_default/div-h.png" position="0,390" zPosition="1" size="560,2" />
509 <widget source="introduction" render="Label" position="0,400" size="560,40" zPosition="10" font="Regular;21" halign="center" valign="center" backgroundColor="#25062748" transparent="1" />
512 def __init__(self, session, title):
513 ChannelSelectionBase.__init__(self, session)
514 self.onShown.append(self.__onExecCallback)
516 self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions", "ChannelSelectBaseActions"],
518 "showProviders": self.doNothing,
519 "showSatellites": self.showAllServices,
520 "showAllServices": self.cancel,
521 "cancel": self.cancel,
522 "ok": self.channelSelected,
523 "keyRadio": self.setModeRadio,
524 "keyTV": self.setModeTv
527 self["key_red"] = StaticText(_("Close"))
528 self["key_green"] = StaticText(_("All"))
529 self["key_yellow"] = StaticText()
530 self["key_blue"] = StaticText(_("Favourites"))
531 self["introduction"] = StaticText(_("Press OK to select a Provider."))
533 def __onExecCallback(self):
535 self.setTitle(_("Select service to add..."))
540 def channelSelected(self): # just return selected service
541 ref = self.getCurrentSelection()
542 if (ref.flags & 7) == 7:
544 elif not (ref.flags & eServiceReference.isMarker):
545 ref = self.getCurrentSelection()
550 self.showFavourites()
552 def setModeRadio(self):
554 self.showFavourites()
559 def activate_all(session):
560 NUM_CI=eDVBCIInterfaces.getInstance().getNumOfSlots()
561 print "[CI_Activate] FOUND %d CI Slots " % NUM_CI
564 def getValue(definitions, default):
567 # How many definitions are present
568 Len = len(definitions)
569 return Len > 0 and definitions[Len-1].text or default
571 for ci in range(NUM_CI):
572 filename = eEnv.resolve("${sysconfdir}/enigma2/ci") + str(ci) + ".xml"
574 if not os_path.exists(filename):
575 print "[CI_Activate_Config_CI%d] no config file found" %ci
578 tree = ci_parse(filename).getroot()
582 for slot in tree.findall("slot"):
583 read_slot = getValue(slot.findall("id"), False).encode("UTF-8")
585 for caid in slot.findall("caid"):
586 read_caid = caid.get("id").encode("UTF-8")
587 usingcaid.append(long(read_caid,16))
589 for service in slot.findall("service"):
590 read_service_ref = service.get("ref").encode("UTF-8")
591 read_services.append (read_service_ref)
593 for provider in slot.findall("provider"):
594 read_provider_name = provider.get("name").encode("UTF-8")
595 read_provider_dvbname = provider.get("dvbnamespace").encode("UTF-8")
596 read_providers.append((read_provider_name,long(read_provider_dvbname,16)))
598 ci_config.append((int(read_slot), (read_services, read_providers, usingcaid)))
600 print "[CI_Activate_Config_CI%d] error parsing xml..." %ci
602 for item in ci_config:
603 print "[CI_Activate] activate CI%d with following settings:" %item[0]
607 eDVBCIInterfaces.getInstance().setDescrambleRules(item[0],item[1])
609 print "[CI_Activate_Config_CI%d] error setting DescrambleRules..." %item[0]
611 def find_in_list(list, search, listpos=0):
613 if item[listpos]==search:
617 global_session = None
619 def sessionstart(reason, session):
620 global global_session
621 global_session = session
623 def autostart(reason, **kwargs):
624 global global_session
626 print "[CI_Assignment] activating ci configs:"
627 activate_all(global_session)
629 global_session = None
631 def main(session, **kwargs):
632 session.open(CIselectMainMenu)
634 def menu(menuid, **kwargs):
635 if menuid == "setup" and eDVBCIInterfaces.getInstance().getNumOfSlots():
636 return [(_("Common Interface Assignment"), main, "ci_assign", 11)]
639 def Plugins(**kwargs):
640 if config.usage.setup_level.index > 1:
641 return [PluginDescriptor( where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = False, fnc = sessionstart ),
642 PluginDescriptor( where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = False, fnc = autostart ),
643 PluginDescriptor( name = "CommonInterfaceAssignment", description = _("a gui to assign services/providers/caids to common interface modules"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc = menu )]
645 return [PluginDescriptor( where = PluginDescriptor.WHERE_SESSIONSTART, needsRestart = False, fnc = sessionstart ),
646 PluginDescriptor( where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = False, fnc = autostart ),
647 PluginDescriptor( name = "CommonInterfaceAssignment", description = _("a gui to assign services/providers to common interface modules"), where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc = menu )]