1 from Screen import Screen
2 from Components.ConfigList import ConfigList, ConfigListScreen
3 from Components.ActionMap import NumberActionMap
4 from Components.config import config, getConfigListEntry, ConfigNothing, NoSave, ConfigPIN
5 from Components.ServiceList import ServiceList
6 from Components.ParentalControlList import ParentalControlEntryComponent, ParentalControlList
7 from Components.ParentalControl import parentalControl
8 from Screens.ChoiceBox import ChoiceBox
9 from Screens.MessageBox import MessageBox
10 from Screens.InputBox import InputBox, Input, PinInput
11 from Tools.Directories import resolveFilename, SCOPE_CONFIG
12 from Tools.BoundFunction import boundFunction
13 from ServiceReference import ServiceReference
14 from enigma import eServiceCenter, eServiceReference
18 class ProtectedScreen:
20 if self.isProtected():
21 self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.protectedWithPin()], title = self.getPinText(), windowTitle = _("Change pin code")))
24 return _("Please enter the correct pin code")
26 def isProtected(self):
29 def protectedWithPin(self):
30 return config.ParentalControl.setuppin.value
32 def pinEntered(self, result):
36 print result, "-", self.protectedWithPin()
37 self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR)
39 class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen):
40 def __init__(self, session):
41 Screen.__init__(self, session)
43 ProtectedScreen.__init__(self)
45 self["actions"] = NumberActionMap(["SetupActions"],
47 "cancel": self.keyCancel
51 ConfigListScreen.__init__(self, self.list)
54 def isProtected(self):
55 return config.ParentalControl.setuppinactive.value
57 def createSetup(self):
58 self.editListEntry = None
60 self.changeSetupPin = None
63 self.list.append(getConfigListEntry(_("Enable parental control"), config.ParentalControl.configured))
64 print "config.ParentalControl.configured.value", config.ParentalControl.configured.value
65 if config.ParentalControl.configured.value:
66 #self.list.append(getConfigListEntry(_("Configuration mode"), config.ParentalControl.mode))
67 self.list.append(getConfigListEntry(_("Protect setup"), config.ParentalControl.setuppinactive))
68 if config.ParentalControl.setuppinactive.value:
69 self.changeSetupPin = getConfigListEntry(_("Change setup pin"), NoSave(ConfigNothing()))
70 self.list.append(self.changeSetupPin)
71 self.list.append(getConfigListEntry(_("Protect services"), config.ParentalControl.servicepinactive))
72 if config.ParentalControl.servicepinactive.value:
73 self.list.append(getConfigListEntry(_("Parental control type"), config.ParentalControl.type))
74 if config.ParentalControl.mode.value == "complex":
75 self.changePin = getConfigListEntry(_("Change service pins"), NoSave(ConfigNothing()))
76 self.list.append(self.changePin)
77 elif config.ParentalControl.mode.value == "simple":
78 self.changePin = getConfigListEntry(_("Change service pin"), NoSave(ConfigNothing()))
79 self.list.append(self.changePin)
80 self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin))
81 self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing()))
82 self.list.append(self.editListEntry)
84 self["config"].list = self.list
85 self["config"].setList(self.list)
88 print "self[\"config\"].l.getCurrentSelection()", self["config"].l.getCurrentSelection()
89 if self["config"].l.getCurrentSelection() == self.editListEntry:
90 self.session.open(ParentalControlEditor)
91 elif self["config"].l.getCurrentSelection() == self.changePin:
92 if config.ParentalControl.mode.value == "complex":
95 self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin"))
96 elif self["config"].l.getCurrentSelection() == self.changeSetupPin:
97 self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin"))
99 ConfigListScreen.keyRight(self)
100 print "current selection:", self["config"].l.getCurrentSelection()
104 ConfigListScreen.keyLeft(self)
105 print "current selection:", self["config"].l.getCurrentSelection()
109 ConfigListScreen.keyRight(self)
110 print "current selection:", self["config"].l.getCurrentSelection()
114 for x in self["config"].list:
118 def keyNumberGlobal(self, number):
121 class ParentalControlEditor(Screen):
122 def __init__(self, session):
123 Screen.__init__(self, session)
126 self.servicelist = ParentalControlList(self.list)
127 self["servicelist"] = self.servicelist;
129 #self.onShown.append(self.chooseLetter)
130 self.currentLetter = ''
132 self.readServiceList()
134 self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions", "NumberActions"],
137 "cancel": self.cancel,
138 "red": self.chooseLetter,
139 #"left": self.keyLeft,
140 #"right": self.keyRight,
141 "1": self.keyNumberGlobal,
142 "2": self.keyNumberGlobal,
143 "3": self.keyNumberGlobal,
144 "4": self.keyNumberGlobal,
145 "5": self.keyNumberGlobal,
146 "6": self.keyNumberGlobal,
147 "7": self.keyNumberGlobal,
148 "8": self.keyNumberGlobal,
149 "9": self.keyNumberGlobal,
150 "0": self.keyNumberGlobal
154 parentalControl.save()
158 self.servicelist.toggleSelectedLock()
160 def keyNumberGlobal(self, number):
163 def readServiceList(self):
164 serviceHandler = eServiceCenter.getInstance()
165 self.service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)'
166 refstr = '%s ORDER BY name' % (self.service_types_tv)
167 self.root = eServiceReference(refstr)
169 self.servicesList = {}
171 list = serviceHandler.list(self.root)
176 service = s.toString()
177 name = ServiceReference(service).getServiceName()
178 key = name.lower()[0]
179 if key < 'a' or key > 'z':
182 if not self.servicesList.has_key(key):
183 self.servicesList[key] = []
184 # (servicestring, eServiceRef, name)
185 self.servicesList[key].append((service, s, name))
188 print self.servicesList
190 def chooseLetter(self):
191 print "choose letter"
193 for x in self.servicesList.keys():
195 x = ("special characters", x)
199 print "sorted list:", sorted(list, key=operator.itemgetter(1))
200 print self.servicesList.keys()
201 self.session.openWithCallback(self.letterChosen, ChoiceBox, title=_("Show services beginning with"), list=list)
203 def letterChosen(self, result):
204 if result is not None:
205 print "result:", result
206 self.currentLetter = result[1]
208 for x in self.servicesList[result[1]]:
209 self.list.append(ParentalControlEntryComponent(x[1], x[2], parentalControl.getProtectionLevel(x[1]) != -1))
210 self.servicelist.setList(self.list)
212 class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen):
213 def __init__(self, session, pin, pinname):
214 Screen.__init__(self, session)
219 self.pin1 = ConfigPIN(default = 1111, censor = "*")
220 self.pin2 = ConfigPIN(default = 1112, censor = "*")
221 self.list.append(getConfigListEntry(_("New pin"), NoSave(self.pin1)))
222 self.list.append(getConfigListEntry(_("Reenter new pin"), NoSave(self.pin2)))
223 ConfigListScreen.__init__(self, self.list)
225 # print "old pin:", pin
226 #if pin.value != "aaaa":
227 #self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.pin.value], title = _("please enter the old pin"), windowTitle = _("Change pin code")))
228 ProtectedScreen.__init__(self)
230 self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions"],
232 "cancel": self.cancel,
235 def getPinText(self):
236 return _("Please enter the old pin code")
238 def isProtected(self):
239 return (self.pin.value != "aaaa")
241 def protectedWithPin(self):
242 return self.pin.value
244 # def pinEntered(self, result):
245 #if result[0] is None:
248 #print result, "-", self.pin.value
249 #self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR)
252 if self.pin1.value == self.pin2.value:
253 self.pin.value = self.pin1.value
255 self.session.openWithCallback(self.close, MessageBox, _("The pin code has been changed successfully."), MessageBox.TYPE_INFO)
257 self.session.open(MessageBox, _("The pin codes you entered are different."), MessageBox.TYPE_ERROR)
262 def keyNumberGlobal(self, number):
263 ConfigListScreen.keyNumberGlobal(self, number)