b018c25086b0fbb615976b377b340ba06ceceb64
[enigma2.git] / lib / python / Plugins / Extensions / ZappingAlternatives / plugin.py
1 from enigma import *
2 from Screens.Screen import Screen
3 from Screens.MessageBox import MessageBox
4 from Components.ActionMap import ActionMap
5 from Components.Label import Label
6 from Components.Input import Input
7 from Components.GUIComponent import *
8 from Components.Pixmap import Pixmap
9 from Components.MenuList import MenuList
10 from Components.FileList import FileEntryComponent, FileList
11 from Navigation import Navigation
12 import NavigationInstance
13 from Screens.ChannelSelection import SimpleChannelSelection
14 from ServiceReference import ServiceReference
15 from Plugins.Plugin import PluginDescriptor
16
17 import os
18
19 alternatives = {}
20
21 class AlternativeZapping(Screen):
22         skin = """
23                 <screen position="100,100" size="560,400" title="Services alternatives setup..." >
24                         <widget name="red" position="0,0" size="140,40" backgroundColor="red" halign="center" valign="center" font="Regular;21" />
25                         <widget name="green" position="140,0" size="140,40" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
26                         <widget name="yellow" position="280,0" size="140,40" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
27                         <widget name="blue" position="420,0" size="140,40" backgroundColor="blue" halign="center" valign="center" font="Regular;21" />
28                         <widget name="serviceslist" position="0,40" size="280,360" />
29                         <widget name="alternativeslist" position="280,40" size="280,360" selectionDisabled="1" />
30                 </screen>"""
31         def __init__(self, session):
32                 self.skin = AlternativeZapping.skin
33                 Screen.__init__(self, session)
34                 
35                 self.red = Label("")
36                 self["red"] = self.red
37                 self.green = Label(_("Add service"))
38                 self["green"] = self.green
39                 self.yellow = Label("")
40                 self["yellow"] = self.yellow
41                 self.blue = Label("")
42                 self["blue"] = self.blue
43                 
44                 self.serviceslist = []
45                 self["serviceslist"] = MenuList(self.serviceslist)
46
47                 self.alternativeslist = []
48                 self["alternativeslist"] = MenuList(self.alternativeslist)
49                 
50                 self.onShown.append(self.updateServices)
51                 self.onShown.append(self.updateAlternatives)
52
53                 self["actions"] = ActionMap(["DirectionActions", "OkCancelActions", "ColorActions"],
54                 {
55                         "ok": self.go,
56                         "cancel": self.close,
57                         "up": self.up,
58                         "down": self.down,
59                         "left": self.left,
60                         "right": self.right,
61                         "red": self.redKey,
62                         "green": self.greenKey,
63                         "yellow": self.yellowKey,
64                         "blue": self.blueKey,
65                 }, -1)
66                 
67         def go(self):
68                 pass
69         
70         def up(self):
71                 self["serviceslist"].instance.moveSelection(self["serviceslist"].instance.moveUp)
72                 self.updateAlternatives()
73                 
74         def down(self):
75                 self["serviceslist"].instance.moveSelection(self["serviceslist"].instance.moveDown)
76                 self.updateAlternatives()
77         
78         def left(self):
79                 pass
80         
81         def right(self):
82                 pass
83         
84         def redKey(self):
85                 if len(self.serviceslist) > 0:
86                         del alternatives[self["serviceslist"].getCurrent()[1]]
87                 self.updateServices()
88                 self.updateAlternatives()
89         
90         def finishedAlternativeSelection(self, args):
91                 alternatives[self["serviceslist"].getCurrent()[1]].append(str(ServiceReference(args)))
92                 self.updateAlternatives()
93         
94         def updateServices(self):
95                 self.serviceslist = []
96                 
97                 for x in alternatives.keys():
98                         self.serviceslist.append((ServiceReference(x).getServiceName(), x))
99                         
100                 self["serviceslist"].l.setList(self.serviceslist)
101                 if len(self.serviceslist) > 0:
102                         self.yellow.setText(_("Add alternative"))
103                         self.red.setText(_("Remove service"))
104                 else:
105                         self.yellow.setText("")
106                         self.red.setText("")
107                         
108         def updateAlternatives(self):
109                 self.alternativeslist = []
110         
111                 if len(self.serviceslist) > 0:
112                         alternativelist = alternatives[self["serviceslist"].getCurrent()[1]]
113
114                         for x in alternativelist:
115                                 self.alternativeslist.append((ServiceReference(x).getServiceName(), x))
116                         
117                 self["alternativeslist"].l.setList(self.alternativeslist)
118                         
119         def greenKey(self):
120                 self.session.openWithCallback(self.finishedChannelSelection, SimpleChannelSelection, _("Select reference service"))
121
122         def finishedChannelSelection(self, args):
123                 if alternatives.has_key(str(ServiceReference(args))):
124                         pass
125                 else:
126                         alternatives[str(ServiceReference(args))] = []
127                 print alternatives
128                 self.updateServices()
129                 #oldref = self.timer.service_ref
130                 #try:
131                         #self.timer.service_ref = ServiceReference(args)
132                         #config.timerentry.service.vals = (str(self.timer.service_ref.getServiceName()),)
133                         #self["config"].invalidate(config.timerentry.service)
134                 #except:
135                 #       print "you pressed cancel"
136                         #self.timer.service_ref = oldref
137         
138         def yellowKey(self):
139                 if len(self.serviceslist) > 0:
140                         self.session.openWithCallback(self.finishedAlternativeSelection, SimpleChannelSelection, _("Select alternative service"))
141         
142         def blueKey(self):
143                 pass
144
145
146 oldPlayService = NavigationInstance.instance.playService
147
148 def playService(self, ref):
149         if not oldPlayService(ref):
150                 if alternatives.has_key(str(ServiceReference(ref))):
151                         for x in alternatives[str(ServiceReference(ref))]:
152                                 if oldPlayService(ServiceReference(x).ref):
153                                         return 1
154                 return 0
155         return 1
156
157 def autostart(reason):
158         if reason == 0:
159                 NavigationInstance.instance.playService = type(NavigationInstance.instance.playService)(playService, NavigationInstance, Navigation)
160
161 def AlternativeZappingSetup(session):
162         session.open(AlternativeZapping)
163
164 def Plugins():
165         return [PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart),
166                         PluginDescriptor(name="Alternative services setup" , description="Defines alternatives for services.", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=AlternativeZappingSetup)]