X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/01abec53c6856c24666967ee51d25d09fc6b8863..1c5637e71a4565181064cc0e00dac36fb113bf08:/lib/python/Screens/ParentalControlSetup.py diff --git a/lib/python/Screens/ParentalControlSetup.py b/lib/python/Screens/ParentalControlSetup.py index 2a907466..cde1f7c2 100644 --- a/lib/python/Screens/ParentalControlSetup.py +++ b/lib/python/Screens/ParentalControlSetup.py @@ -8,49 +8,48 @@ from Components.ParentalControl import parentalControl from Screens.ChoiceBox import ChoiceBox from Screens.MessageBox import MessageBox from Screens.InputBox import InputBox, Input, PinInput -from Tools.Directories import resolveFilename, SCOPE_CONFIG +from Screens.ChannelSelection import service_types_tv from Tools.BoundFunction import boundFunction from ServiceReference import ServiceReference -from enigma import eServiceCenter, eServiceReference -import os -import operator +from enigma import eServiceCenter, eServiceReference, eTimer +from operator import itemgetter class ProtectedScreen: def __init__(self): if self.isProtected(): - self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.protectedWithPin()], title = self.getPinText(), windowTitle = _("Change pin code"))) + self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.protectedWithPin()], triesEntry = self.getTriesEntry(), title = self.getPinText(), windowTitle = _("Change pin code"))) + + def getTriesEntry(self): + return config.ParentalControl.retries.setuppin def getPinText(self): return _("Please enter the correct pin code") - + def isProtected(self): return True - + def protectedWithPin(self): return config.ParentalControl.setuppin.value - + def pinEntered(self, result): - if result[0] is None: + if result is None: self.close() - if not result[0]: - print result, "-", self.protectedWithPin() + elif not result: self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR) class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): def __init__(self, session): Screen.__init__(self, session) - ProtectedScreen.__init__(self) + self.list = [] + ConfigListScreen.__init__(self, self.list) + self.createSetup() self["actions"] = NumberActionMap(["SetupActions"], { "cancel": self.keyCancel }, -2) - - self.list = [] - ConfigListScreen.__init__(self, self.list) - self.createSetup() - + def isProtected(self): return config.ParentalControl.setuppinactive.value @@ -77,13 +76,13 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): elif config.ParentalControl.mode.value == "simple": self.changePin = getConfigListEntry(_("Change service pin"), NoSave(ConfigNothing())) self.list.append(self.changePin) - self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin)) + #self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin)) self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing())) self.list.append(self.editListEntry) self["config"].list = self.list self["config"].setList(self.list) - + def keyOK(self): print "self[\"config\"].l.getCurrentSelection()", self["config"].l.getCurrentSelection() if self["config"].l.getCurrentSelection() == self.editListEntry: @@ -99,43 +98,65 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): ConfigListScreen.keyRight(self) print "current selection:", self["config"].l.getCurrentSelection() self.createSetup() - + def keyLeft(self): ConfigListScreen.keyLeft(self) print "current selection:", self["config"].l.getCurrentSelection() - self.createSetup() - + self.createSetup() + def keyRight(self): ConfigListScreen.keyRight(self) print "current selection:", self["config"].l.getCurrentSelection() self.createSetup() - + + def SetupPinMessageCallback(self, value): + if value: + self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin")) + else: + config.ParentalControl.setuppinactive.value = False + self.keyCancel() + + def ServicePinMessageCallback(self, value): + if value: + self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin")) + else: + config.ParentalControl.servicepinactive.value = False + self.keyCancel() + + def cancelCB(self,value): + self.keyCancel() + def keyCancel(self): - for x in self["config"].list: - x[1].save() - self.close() - + if config.ParentalControl.setuppinactive.value and config.ParentalControl.setuppin.value == 'aaaa': + self.session.openWithCallback(self.SetupPinMessageCallback, MessageBox, _("No valid setup PIN found!\nDo you like to change the setup PIN now?\nWhen you say 'No' here the setup protection stay disabled!"), MessageBox.TYPE_YESNO) + elif config.ParentalControl.servicepinactive.value and config.ParentalControl.servicepin[0].value == 'aaaa': + self.session.openWithCallback(self.ServicePinMessageCallback, MessageBox, _("No valid service PIN found!\nDo you like to change the service PIN now?\nWhen you say 'No' here the service protection stay disabled!"), MessageBox.TYPE_YESNO) + else: + for x in self["config"].list: + x[1].save() + self.close() + def keyNumberGlobal(self, number): pass +SPECIAL_CHAR = 96 class ParentalControlEditor(Screen): def __init__(self, session): Screen.__init__(self, session) - self.list = [] self.servicelist = ParentalControlList(self.list) self["servicelist"] = self.servicelist; - #self.onShown.append(self.chooseLetter) - self.currentLetter = '' - + self.currentLetter = chr(SPECIAL_CHAR) self.readServiceList() - + self.chooseLetterTimer = eTimer() + self.chooseLetterTimer.timeout.get().append(self.chooseLetter) + self.onLayoutFinish.append(self.LayoutFinished) + self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions", "NumberActions"], { "ok": self.select, "cancel": self.cancel, - "red": self.chooseLetter, #"left": self.keyLeft, #"right": self.keyRight, "1": self.keyNumberGlobal, @@ -149,79 +170,74 @@ class ParentalControlEditor(Screen): "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) - + + def LayoutFinished(self): + self.chooseLetterTimer.start(0, True) + def cancel(self): - parentalControl.save() - self.close() - + self.chooseLetter() + def select(self): self.servicelist.toggleSelectedLock() - + def keyNumberGlobal(self, number): pass - + def readServiceList(self): serviceHandler = eServiceCenter.getInstance() - self.service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)' - refstr = '%s ORDER BY name' % (self.service_types_tv) + refstr = '%s ORDER BY name' % (service_types_tv) self.root = eServiceReference(refstr) - self.servicesList = {} - list = serviceHandler.list(self.root) if list is not None: - while 1: - s = list.getNext() - if s.valid(): - service = s.toString() - name = ServiceReference(service).getServiceName() - key = name.lower()[0] - if key < 'a' or key > 'z': - key = '&' - #key = str(key) - if not self.servicesList.has_key(key): - self.servicesList[key] = [] - # (servicestring, eServiceRef, name) - self.servicesList[key].append((service, s, name)) + services = list.getContent("CN", True) #(servicecomparestring, name) + for s in services: + if ord(s[1][0])==0xc2 and ord(s[1][1])==0x86: # ignore shortname brackets + key = s[1].lower()[2] else: - break - print self.servicesList + key = s[1].lower()[0] + if key < 'a' or key > 'z': + key = chr(SPECIAL_CHAR) + #key = str(key) + if not self.servicesList.has_key(key): + self.servicesList[key] = [] + self.servicesList[key].append(s) def chooseLetter(self): print "choose letter" - list = [] + mylist = [] for x in self.servicesList.keys(): - if x == '&': + if x == chr(SPECIAL_CHAR): x = ("special characters", x) else: x = (x, x) - list.append(x) - print "sorted list:", sorted(list, key=operator.itemgetter(1)) - print self.servicesList.keys() - self.session.openWithCallback(self.letterChosen, ChoiceBox, title=_("Show services beginning with"), list=list) - + mylist.append(x) + mylist.sort(key=itemgetter(1)) + sel = ord(self.currentLetter) - SPECIAL_CHAR + self.session.openWithCallback(self.letterChosen, ChoiceBox, title=_("Show services beginning with"), list=mylist, keys = [], selection = sel) + def letterChosen(self, result): if result is not None: print "result:", result self.currentLetter = result[1] self.list = [] for x in self.servicesList[result[1]]: - self.list.append(ParentalControlEntryComponent(x[1], x[2], parentalControl.getProtectionLevel(x[1]) != -1)) - self.servicelist.setList(self.list) + self.list.append(ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionLevel(x[0]) != -1)) + self.servicelist.setList(self.list) + else: + parentalControl.save() + self.close() class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): def __init__(self, session, pin, pinname): Screen.__init__(self, session) - self.pin = pin - self.list = [] self.pin1 = ConfigPIN(default = 1111, censor = "*") self.pin2 = ConfigPIN(default = 1112, censor = "*") self.list.append(getConfigListEntry(_("New pin"), NoSave(self.pin1))) self.list.append(getConfigListEntry(_("Reenter new pin"), NoSave(self.pin2))) ConfigListScreen.__init__(self, self.list) - # print "old pin:", pin #if pin.value != "aaaa": #self.onFirstExecBegin.append(boundFunction(self.session.openWithCallback, self.pinEntered, PinInput, pinList = [self.pin.value], title = _("please enter the old pin"), windowTitle = _("Change pin code"))) @@ -231,7 +247,7 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): { "cancel": self.cancel, }, -1) - + def getPinText(self): return _("Please enter the old pin code") @@ -240,14 +256,14 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): def protectedWithPin(self): return self.pin.value - + # def pinEntered(self, result): #if result[0] is None: #self.close() #if not result[0]: #print result, "-", self.pin.value #self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR) - + def keyOK(self): if self.pin1.value == self.pin2.value: self.pin.value = self.pin1.value @@ -255,10 +271,10 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): self.session.openWithCallback(self.close, MessageBox, _("The pin code has been changed successfully."), MessageBox.TYPE_INFO) else: self.session.open(MessageBox, _("The pin codes you entered are different."), MessageBox.TYPE_ERROR) - + def cancel(self): self.close(None) - + def keyNumberGlobal(self, number): ConfigListScreen.keyNumberGlobal(self, number) - +