1 from Plugins.Plugin import PluginDescriptor
2 from GraphMultiEpg import GraphMultiEPG
3 from Screens.ChannelSelection import BouquetSelector, SilentBouquetSelector
4 from enigma import eServiceCenter, eServiceReference
5 from ServiceReference import ServiceReference
6 from Components.config import config
15 def zapToService(service):
16 if not service is None:
17 if Servicelist.getRoot() != epg_bouquet: #already in correct bouquet?
18 Servicelist.clearPath()
19 if Servicelist.bouquet_root != epg_bouquet:
20 Servicelist.enterPath(Servicelist.bouquet_root)
21 Servicelist.enterPath(epg_bouquet)
22 Servicelist.setCurrentSelection(service) #select the service in Servicelist
25 def getBouquetServices(bouquet):
27 Servicelist = eServiceCenter.getInstance().list(bouquet)
28 if not Servicelist is None:
30 service = Servicelist.getNext()
31 if not service.valid(): #check if end of list
33 if service.flags & (eServiceReference.isDirectory | eServiceReference.isMarker): #ignore non playable services
35 services.append(ServiceReference(service))
44 def closed(ret=False):
45 closedScreen = dlg_stack.pop()
47 if bouquetSel and closedScreen == bouquetSel:
50 if ret and dlgs > 0: # recursive close wished
51 dlg_stack[dlgs-1].close(dlgs > 1)
55 def openBouquetEPG(bouquet):
56 services = getBouquetServices(bouquet)
60 dlg_stack.append(Session.openWithCallback(closed, GraphMultiEPG, services, zapToService, changeBouquetCB))
64 def changeBouquetCB(direction, epg):
70 bouquet = bouquetSel.getCurrent()
71 services = getBouquetServices(bouquet)
75 epg.setServices(services)
77 def openAskBouquet(Session, bouquets, cnt):
78 if cnt > 1: # show bouquet list
80 bouquetSel = Session.openWithCallback(closed, BouquetSelector, bouquets, openBouquetEPG, enableWrapAround=True)
81 dlg_stack.append(bouquetSel)
83 if not openBouquetEPG(bouquets[0][1]):
86 def openSilent(Servicelist, bouquets, cnt):
87 root = Servicelist.getRoot()
88 if cnt > 1: # create bouquet list
91 rootstr = root.toCompareString()
92 for bouquet in bouquets:
93 if bouquet[1].toCompareString() == rootstr:
98 bouquetSel = SilentBouquetSelector(bouquets, True, current)
99 if cnt >= 1: # open current bouquet
100 if not openBouquetEPG(root):
103 def main(session, servicelist, **kwargs):
107 Servicelist = servicelist
108 bouquets = Servicelist.getBouquetList()
113 if config.usage.multiepg_ask_bouquet.value:
114 openAskBouquet(session, bouquets, cnt)
116 openSilent(servicelist, bouquets, cnt)
118 def Plugins(**kwargs):
119 name = _("Graphical Multi EPG")
120 descr = _("A graphical EPG for all services of an specific bouquet")
121 return [PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EVENTINFO, needsRestart = False, fnc=main),
122 PluginDescriptor(name=name, description=descr, where = PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart = False, fnc=main)]