X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/65e19746f08f1287005861692322cdf868b06dc6..075ad90b31e50c2b737acc6bc0b20ae6764ceffb:/lib/python/Screens/ChannelSelection.py diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index a8d605ea..ff2928ec 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -5,14 +5,17 @@ from Components.ActionMap import NumberActionMap, ActionMap from Components.MenuList import MenuList from EpgSelection import EPGSelection from enigma import eServiceReference, eEPGCache, eServiceCenter, eServiceCenterPtr, iMutableServiceListPtr, iStaticServiceInformationPtr, eTimer, eDVBDB -from Components.config import config, configElement, ConfigSubsection, configText, currentConfigSelectionElement +from Components.config import config, ConfigSubsection, ConfigText from Screens.FixedMenu import FixedMenu from Tools.NumericalTextInput import NumericalTextInput from Components.NimManager import nimmanager from Components.Sources.Clock import Clock from Components.Input import Input -from Screens.InputBox import InputBox +from Components.ParentalControl import parentalControl +from Screens.InputBox import InputBox, PinInput +from Screens.MessageBox import MessageBox from ServiceReference import ServiceReference +from Tools.BoundFunction import boundFunction from re import * from os import remove @@ -75,6 +78,11 @@ class ChannelContextMenu(Screen): if not csel.bouquet_mark_edit and not csel.movemode: if not inBouquetRootList: if (csel.getCurrentSelection().flags & eServiceReference.flagDirectory) != eServiceReference.flagDirectory: + if config.ParentalControl.configured.value: + if parentalControl.getProtectionLevel(csel.getCurrentSelection().toCompareString()) == -1: + menu.append((_("add to parental protection"), boundFunction(self.addParentalProtection, csel.getCurrentSelection()))) + else: + menu.append((_("remove from parental protection"), boundFunction(self.removeParentalProtection, csel.getCurrentSelection()))) if haveBouquets: menu.append((_("add service to bouquet"), self.addServiceToBouquetSelected)) else: @@ -87,7 +95,7 @@ class ChannelContextMenu(Screen): menu.append((_("remove all new found flags"), self.removeAllNewFoundFlags)) if inBouquet: menu.append((_("remove entry"), self.removeCurrentService)) - if current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1: + if current_root is not None and current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1: menu.append((_("remove new found flag"), self.removeNewFoundFlag)) else: menu.append((_("add bouquet"), self.showBouquetInputBox)) @@ -130,6 +138,21 @@ class ChannelContextMenu(Screen): self.csel.addBouquet(bouquet, None) self.close() + def addParentalProtection(self, service): + parentalControl.protectService(service.toCompareString()) + self.close() + + def removeParentalProtection(self, service): + self.session.openWithCallback(boundFunction(self.pinEntered, service.toCompareString()), PinInput, pinList = [config.ParentalControl.servicepin[0].value], triesEntry = config.ParentalControl.retries.servicepin, title = _("Enter the service pin"), windowTitle = _("Change pin code")) + + def pinEntered(self, service, result): + if result: + parentalControl.unProtectService(service) + self.close() + else: + self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR) + + def addServiceToBouquetSelected(self): bouquets = self.csel.getBouquetList() if bouquets is None: @@ -463,14 +486,14 @@ class ChannelSelectionEdit: MODE_TV = 0 MODE_RADIO = 1 +# this makes it much simple to implement a selectable radio or tv mode :) +service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)' +service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)' + class ChannelSelectionBase(Screen): def __init__(self, session): Screen.__init__(self, session) - # this makes it much simple to implement a selectable radio or tv mode :) - self.service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)' - self.service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)' - self["key_red"] = Button(_("All")) self["key_green"] = Button(_("Satellites")) self["key_yellow"] = Button(_("Provider")) @@ -513,6 +536,7 @@ class ChannelSelectionBase(Screen): "9": self.keyNumberGlobal, "0": self.keyNumber0 }) + self.recallBouquetMode() def appendDVBTypes(self, ref): path = ref.getPath() @@ -552,14 +576,14 @@ class ChannelSelectionBase(Screen): def recallBouquetMode(self): if self.mode == MODE_TV: - self.service_types = self.service_types_tv - if currentConfigSelectionElement(config.usage.multibouquet) == "yes": + self.service_types = service_types_tv + if config.usage.multibouquet.value: self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET "bouquets.tv" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types) else: - self.service_types = self.service_types_radio - if currentConfigSelectionElement(config.usage.multibouquet) == "yes": + self.service_types = service_types_radio + if config.usage.multibouquet.value: self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET "bouquets.radio" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.radio" ORDER BY bouquet'%(self.service_types) @@ -876,13 +900,13 @@ HISTORYSIZE = 20 #config for lastservice config.tv = ConfigSubsection() -config.tv.lastservice = configElement("config.tv.lastservice", configText, "", 0) -config.tv.lastroot = configElement("config.tv.lastroot", configText, "", 0) +config.tv.lastservice = ConfigText() +config.tv.lastroot = ConfigText() config.radio = ConfigSubsection() -config.radio.lastservice = configElement("config.radio.lastservice", configText, "", 0) -config.radio.lastroot = configElement("config.radio.lastroot", configText, "", 0) +config.radio.lastservice = ConfigText() +config.radio.lastroot = ConfigText() config.servicelist = ConfigSubsection() -config.servicelist.lastmode = configElement("config.servicelist.lastmode", configText, "tv", 0) +config.servicelist.lastmode = ConfigText(default = "tv") class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG): def __init__(self, session): @@ -932,7 +956,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect def setModeRadio(self): if self.revertMode is None and config.servicelist.lastmode.value == "tv": self.revertMode = MODE_TV - if currentConfigSelectionElement(config.usage.e1like_radio_mode) == "yes": + if config.usage.e1like_radio_mode.value: self.history = self.history_radio self.lastservice = config.radio.lastservice self.lastroot = config.radio.lastroot @@ -941,7 +965,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect self.setMode() def __onCreate(self): - if currentConfigSelectionElement(config.usage.e1like_radio_mode) == "yes": + if config.usage.e1like_radio_mode.value: if config.servicelist.lastmode.value == "tv": self.setModeTv() else: @@ -1110,7 +1134,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect self.revertMode = None self.close(None) -from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName, InfoBarInstantRecord +from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName, InfoBarInstantRecord, InfoBarRadioText class RadioInfoBar(Screen, InfoBarEvent, InfoBarServiceName, InfoBarInstantRecord): def __init__(self, session): @@ -1120,7 +1144,7 @@ class RadioInfoBar(Screen, InfoBarEvent, InfoBarServiceName, InfoBarInstantRecor InfoBarInstantRecord.__init__(self) self["CurrentTime"] = Clock() -class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG): +class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG, InfoBarRadioText): ALLOW_SUSPEND = True @@ -1128,10 +1152,11 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS ChannelSelectionBase.__init__(self, session) ChannelSelectionEdit.__init__(self) ChannelSelectionEPG.__init__(self) + InfoBarRadioText.__init__(self) config.radio = ConfigSubsection(); - config.radio.lastservice = configElement("config.radio.lastservice", configText, "", 0); - config.radio.lastroot = configElement("config.radio.lastroot", configText, "", 0); + config.radio.lastservice = ConfigText() + config.radio.lastroot = ConfigText() self.onLayoutFinish.append(self.onCreate) self.info = session.instantiateDialog(RadioInfoBar)