From 14c433828a94f15aaabefffdc3978914a6a7b604 Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Tue, 17 Nov 2009 01:14:57 +0100 Subject: fixes bug #163 remove transparency from the (turning) dish icon and draw a border around it move dish icon to the foreground --- data/skin_default.xml | 2 +- data/skin_default/icons/dish.png | Bin 8320 -> 8195 bytes 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'data') diff --git a/data/skin_default.xml b/data/skin_default.xml index 649cedaf..71f579cb 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -250,7 +250,7 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count > 7 and 2 or 3) - + diff --git a/data/skin_default/icons/dish.png b/data/skin_default/icons/dish.png index f3c6548d..6148e07c 100644 Binary files a/data/skin_default/icons/dish.png and b/data/skin_default/icons/dish.png differ -- cgit v1.2.3 From 796d71eab6d0760a9657ba0519154288511ba30e Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 18 Nov 2009 12:16:03 +0100 Subject: data/encoding.conf: add arabic --- data/encoding.conf | 1 + 1 file changed, 1 insertion(+) (limited to 'data') diff --git a/data/encoding.conf b/data/encoding.conf index 14eeaefd..9383317e 100644 --- a/data/encoding.conf +++ b/data/encoding.conf @@ -1,5 +1,6 @@ #Fallback encoding when in dvb-text no encoding table is given #Countycode ISO8859-X or ISO6397 +ara ISO8859-6 tur ISO8859-9 gre ISO8859-7 pol ISO8859-2 -- cgit v1.2.3 From 9fba96095af3d4a6b1b596893f4e005dc0b6f16d Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 3 Dec 2009 16:46:01 +0100 Subject: use new DeepstandbySupport SystemInfo entry at some places... this fixes bug #307 Conflicts: lib/python/Screens/TimerEntry.py --- data/menu.xml | 3 ++- lib/python/Screens/SleepTimerEdit.py | 7 ++++++- lib/python/Screens/TaskView.py | 7 ++++++- lib/python/Screens/TimerEntry.py | 7 ++++++- 4 files changed, 20 insertions(+), 4 deletions(-) (limited to 'data') diff --git a/data/menu.xml b/data/menu.xml index 403e0b81..59195f15 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -104,6 +104,7 @@ self.session.openWithCallback(msgClosed, FactoryReset) 2 3 - 1 + 1 + 1 diff --git a/lib/python/Screens/SleepTimerEdit.py b/lib/python/Screens/SleepTimerEdit.py index ff061d88..e5e7af4e 100644 --- a/lib/python/Screens/SleepTimerEdit.py +++ b/lib/python/Screens/SleepTimerEdit.py @@ -5,6 +5,7 @@ from Components.Input import Input from Components.Label import Label from Components.Pixmap import Pixmap from Components.config import config, ConfigInteger +from Components.SystemInfo import SystemInfo from enigma import eEPGCache from SleepTimer import SleepTimer from time import time @@ -77,7 +78,11 @@ class SleepTimerEdit(Screen): self["red_text"].setText(_("Action:") + " " + _("Disable timer")) if config.SleepTimer.action.value == "shutdown": - self["green_text"].setText(_("Sleep timer action:") + " " + _("Deep Standby")) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("Deep Standby") + else: + shutdownString = _("Shutdown") + self["green_text"].setText(_("Sleep timer action:") + " " + shutdownString) elif config.SleepTimer.action.value == "standby": self["green_text"].setText(_("Sleep timer action:") + " " + _("Standby")) diff --git a/lib/python/Screens/TaskView.py b/lib/python/Screens/TaskView.py index 1453c05f..eb926ca3 100644 --- a/lib/python/Screens/TaskView.py +++ b/lib/python/Screens/TaskView.py @@ -1,6 +1,7 @@ from Screen import Screen from Components.ConfigList import ConfigListScreen from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry +from Components.SystemInfo import SystemInfo from InfoBarGenerics import InfoBarNotifications import Screens.Standby from Tools import Notifications @@ -44,7 +45,11 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen): self.afterevents = [ "nothing", "standby", "deepstandby", "close" ] self.settings = ConfigSubsection() - self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = self.afterevents[afterEvent]) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("go to deep standby") + else: + shutdownString = _("shut down") + self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", shutdownString)], default = self.afterevents[afterEvent]) self.setupList() self.state_changed() diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index 5813bac5..42a3195c 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -9,6 +9,7 @@ from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap from Components.UsageConfig import defaultMoviePath +from Components.SystemInfo import SystemInfo from Screens.MovieSelection import getPreferredTagEditor from Screens.LocationBox import MovieLocationBox from Screens.ChoiceBox import ChoiceBox @@ -93,7 +94,11 @@ class TimerEntry(Screen, ConfigListScreen): day[weekday] = 1 self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay]) - self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("go to deep standby") + else: + shutdownString = _("shut down") + self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", shutdownString), ("auto", _("auto"))], default = afterevent) self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type) self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False) self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False) -- cgit v1.2.3 From a88994b2d0bab5d8a5d0b38b5a66f374372b0830 Mon Sep 17 00:00:00 2001 From: thedoc Date: Tue, 15 Dec 2009 16:18:52 +0100 Subject: fixes bug #354 change MenuList to ChoiceList in ChannelContext and assign Blue button to PiP activation --- data/skin_default.xml | 4 ++-- lib/python/Components/ChoiceList.py | 2 +- lib/python/Screens/ChannelSelection.py | 27 +++++++++++++++++---------- 3 files changed, 20 insertions(+), 13 deletions(-) (limited to 'data') diff --git a/data/skin_default.xml b/data/skin_default.xml index 71f579cb..7aaff38f 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -70,8 +70,8 @@ - - + + diff --git a/lib/python/Components/ChoiceList.py b/lib/python/Components/ChoiceList.py index 4700e9e6..33868d61 100755 --- a/lib/python/Components/ChoiceList.py +++ b/lib/python/Components/ChoiceList.py @@ -3,7 +3,7 @@ from Tools.Directories import SCOPE_CURRENT_SKIN, resolveFilename from enigma import RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont from Tools.LoadPixmap import LoadPixmap -def ChoiceEntryComponent(key, text): +def ChoiceEntryComponent(key = "", text = ["--"]): res = [ text ] if text[0] == "--": res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 00, 800, 25, 0, RT_HALIGN_LEFT, "-"*200)) diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index d4a098c3..e8bbce15 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -21,6 +21,7 @@ profile("ChannelSelection.py 2.3") from Components.Input import Input profile("ChannelSelection.py 3") from Components.ParentalControl import parentalControl +from Components.ChoiceList import ChoiceList, ChoiceEntryComponent from Screens.InputBox import InputBox, PinInput from Screens.MessageBox import MessageBox from Screens.ServiceInfo import ServiceInfo @@ -70,9 +71,9 @@ OFF = 0 EDIT_BOUQUET = 1 EDIT_ALTERNATIVES = 2 -def append_when_current_valid(current, menu, args, level = 0): +def append_when_current_valid(current, menu, args, level = 0, key = ""): if current and current.valid() and level <= config.usage.setup_level.index: - menu.append(args) + menu.append(ChoiceEntryComponent(key, args)) class ChannelContextMenu(Screen): def __init__(self, session, csel): @@ -81,13 +82,15 @@ class ChannelContextMenu(Screen): self.csel = csel self.bsel = None - self["actions"] = ActionMap(["OkCancelActions"], + self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "NumberActions"], { "ok": self.okbuttonClick, - "cancel": self.cancelClick + "cancel": self.cancelClick, + "blue": self.showServiceInPiP }) menu = [ ] + self.pipAvailable = False current = csel.getCurrentSelection() current_root = csel.getRoot() current_sel_path = current.getPath() @@ -102,7 +105,6 @@ class ChannelContextMenu(Screen): if not inBouquetRootList: isPlayable = not (current_sel_flags & (eServiceReference.isMarker|eServiceReference.isDirectory)) if isPlayable: - append_when_current_valid(current, menu, (_("Activate Picture in Picture"), self.showServiceInPiP), level = 0) if config.ParentalControl.configured.value: if parentalControl.getProtectionLevel(csel.getCurrentSelection().toCompareString()) == -1: append_when_current_valid(current, menu, (_("add to parental protection"), boundFunction(self.addParentalProtection, csel.getCurrentSelection())), level = 0) @@ -124,8 +126,11 @@ class ChannelContextMenu(Screen): append_when_current_valid(current, menu, (_("remove entry"), self.removeCurrentService), level = 0) if current_root and current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1: append_when_current_valid(current, menu, (_("remove new found flag"), self.removeNewFoundFlag), level = 0) + if isPlayable: + append_when_current_valid(current, menu, (_("Activate Picture in Picture"), self.showServiceInPiP), level = 0, key = "blue") + self.pipAvailable = True else: - menu.append((_("add bouquet"), self.showBouquetInputBox)) + menu.append(ChoiceEntryComponent(text = (_("add bouquet"), self.showBouquetInputBox))) append_when_current_valid(current, menu, (_("remove entry"), self.removeBouquet), level = 0) if inBouquet: # current list is editable? @@ -133,7 +138,7 @@ class ChannelContextMenu(Screen): if not csel.movemode: append_when_current_valid(current, menu, (_("enable move mode"), self.toggleMoveMode), level = 1) if not inBouquetRootList and current_root and not (current_root.flags & eServiceReference.isGroup): - menu.append((_("add marker"), self.showMarkerInputBox)) + menu.append(ChoiceEntryComponent(text = (_("add marker"), self.showMarkerInputBox))) if haveBouquets: append_when_current_valid(current, menu, (_("enable bouquet edit"), self.bouquetMarkStart), level = 0) else: @@ -158,11 +163,11 @@ class ChannelContextMenu(Screen): append_when_current_valid(current, menu, (_("end alternatives edit"), self.bouquetMarkEnd), level = 0) append_when_current_valid(current, menu, (_("abort alternatives edit"), self.bouquetMarkAbort), level = 0) - menu.append((_("back"), self.cancelClick)) - self["menu"] = MenuList(menu) + menu.append(ChoiceEntryComponent(text = (_("back"), self.cancelClick))) + self["menu"] = ChoiceList(menu) def okbuttonClick(self): - self["menu"].getCurrent()[1]() + self["menu"].getCurrent()[0][1]() def cancelClick(self): self.close(False) @@ -193,6 +198,8 @@ class ChannelContextMenu(Screen): self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR) def showServiceInPiP(self): + if not self.pipAvailable: + return if self.session.pipshown: del self.session.pip self.session.pip = self.session.instantiateDialog(PictureInPicture) -- cgit v1.2.3 From a285571e31b3b1a99764a674319621f0298833c2 Mon Sep 17 00:00:00 2001 From: thedoc Date: Wed, 23 Dec 2009 21:57:24 +0100 Subject: fixes bug #273 add a quick shortcut to switch to "nothing connected" in the sat config screen for remote debugging purposes (undocumented) --- data/keymap.xml | 4 ++++ lib/python/Screens/Satconfig.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'data') diff --git a/data/keymap.xml b/data/keymap.xml index 25538f87..9461d509 100755 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -98,6 +98,10 @@ + + + + diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 634d231a..d5249b99 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -5,7 +5,8 @@ from Components.ActionMap import ActionMap from Components.ConfigList import ConfigListScreen from Components.MenuList import MenuList from Components.NimManager import nimmanager -from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement +from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement,\ + ConfigSatlist from Components.Sources.List import List from Screens.MessageBox import MessageBox from Screens.ChoiceBox import ChoiceBox @@ -383,10 +384,11 @@ class NimSetup(Screen, ConfigListScreen): ConfigListScreen.__init__(self, self.list) - self["actions"] = ActionMap(["SetupActions"], + self["actions"] = ActionMap(["SetupActions", "SatlistShortcutAction"], { "ok": self.keySave, "cancel": self.keyCancel, + "nothingconnected": self.nothingConnectedShortcut }, -2) self.slotid = slotid @@ -423,6 +425,11 @@ class NimSetup(Screen, ConfigListScreen): # we need to call saveAll to reset the connectedTo choices self.saveAll() self.close() + + def nothingConnectedShortcut(self): + if type(self["config"].getCurrent()[1]) is ConfigSatlist: + self["config"].getCurrent()[1].setValue("3601") + self["config"].invalidateCurrent() class NimSelection(Screen): def __init__(self, session): -- cgit v1.2.3 From 148af18dacd5f36aa785277d11126d03118e9437 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 30 Dec 2009 17:11:58 +0100 Subject: show a short symbol when a unhandled key is pressed this fixes bug #293 --- data/skin_default.xml | 4 ++++ data/skin_default/Makefile.am | 1 + data/skin_default/unhandled-key.png | Bin 0 -> 1335 bytes lib/python/Screens/InfoBar.py | 6 ++--- lib/python/Screens/InfoBarGenerics.py | 41 +++++++++++++++++++++++++++++++++- lib/python/Screens/Makefile.am | 2 +- lib/python/Screens/UnhandledKey.py | 7 ++++++ 7 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 data/skin_default/unhandled-key.png create mode 100644 lib/python/Screens/UnhandledKey.py (limited to 'data') diff --git a/data/skin_default.xml b/data/skin_default.xml index 71f579cb..bf21b715 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -253,6 +253,10 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count > 7 and 2 or 3) + + + + diff --git a/data/skin_default/Makefile.am b/data/skin_default/Makefile.am index e2d2abcc..3106af97 100644 --- a/data/skin_default/Makefile.am +++ b/data/skin_default/Makefile.am @@ -50,6 +50,7 @@ dist_install_DATA = \ sleeptimer.png \ timeline-now.png \ timeline.png \ + unhandled-key.png \ verticalline-plugins.png \ vkey_backspace.png \ vkey_bg.png \ diff --git a/data/skin_default/unhandled-key.png b/data/skin_default/unhandled-key.png new file mode 100644 index 00000000..8e543498 Binary files /dev/null and b/data/skin_default/unhandled-key.png differ diff --git a/lib/python/Screens/InfoBar.py b/lib/python/Screens/InfoBar.py index a15c7ac1..5b061245 100644 --- a/lib/python/Screens/InfoBar.py +++ b/lib/python/Screens/InfoBar.py @@ -12,7 +12,7 @@ profile("LOAD:InfoBarGenerics") from Screens.InfoBarGenerics import InfoBarShowHide, \ InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarRdsDecoder, \ InfoBarEPG, InfoBarSeek, InfoBarInstantRecord, \ - InfoBarAudioSelection, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, \ + InfoBarAudioSelection, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarUnhandledKey, \ InfoBarSubserviceSelection, InfoBarShowMovies, InfoBarTimeshift, \ InfoBarServiceNotifications, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarSimpleEventView, \ InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \ @@ -29,7 +29,7 @@ from Screens.HelpMenu import HelpableScreen class InfoBar(InfoBarBase, InfoBarShowHide, InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, InfoBarInstantRecord, InfoBarAudioSelection, - HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, + HelpableScreen, InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarUnhandledKey, InfoBarSubserviceSelection, InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarPlugins, InfoBarSubtitleSupport, InfoBarServiceErrorPopupSupport, InfoBarJobman, @@ -52,7 +52,7 @@ class InfoBar(InfoBarBase, InfoBarShowHide, for x in HelpableScreen, \ InfoBarBase, InfoBarShowHide, \ InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder, \ - InfoBarInstantRecord, InfoBarAudioSelection, \ + InfoBarInstantRecord, InfoBarAudioSelection, InfoBarUnhandledKey, \ InfoBarAdditionalInfo, InfoBarNotifications, InfoBarDish, InfoBarSubserviceSelection, \ InfoBarTimeshift, InfoBarSeek, InfoBarSummarySupport, InfoBarTimeshiftState, \ InfoBarTeletextPlugin, InfoBarExtensions, InfoBarPiP, InfoBarSubtitleSupport, InfoBarJobman, \ diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index a3e56a40..c8aa00cb 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -26,13 +26,14 @@ from Screens.PictureInPicture import PictureInPicture from Screens.SubtitleDisplay import SubtitleDisplay from Screens.RdsDisplay import RdsInfoDisplay, RassInteractive from Screens.TimeDateInput import TimeDateInput +from Screens.UnhandledKey import UnhandledKey from ServiceReference import ServiceReference from Tools import Notifications from Tools.Directories import fileExists from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \ - iPlayableService, eServiceReference, eEPGCache + iPlayableService, eServiceReference, eEPGCache, eActionMap from time import time, localtime, strftime from os import stat as os_stat @@ -47,6 +48,44 @@ class InfoBarDish: def __init__(self): self.dishDialog = self.session.instantiateDialog(Dish) +class InfoBarUnhandledKey: + def __init__(self): + self.unhandledKeyDialog = self.session.instantiateDialog(UnhandledKey) + self.hideTimer = eTimer() + self.hideTimer.callback.append(self.unhandledKeyDialog.hide) + self.checkUnusedTimer = eTimer() + self.checkUnusedTimer.callback.append(self.checkUnused) + self.onLayoutFinish.append(self.unhandledKeyDialog.hide) + eActionMap.getInstance().bindAction('', -0x7FFFFFFF, self.actionA) #highest prio + eActionMap.getInstance().bindAction('', 0x7FFFFFFF, self.actionB) #lowest prio + self.key = -1; + self.flags = 0; + self.uflags = 0; + + #this function is called on every keypress! + def actionA(self, key, flag): + if flag != 4: + if self.key != key: + if self.checkUnusedTimer.isActive(): + self.checkUnusedTimer.stop() + self.checkUnused() + self.key = key + self.flags = self.uflags = 0 + self.flags |= (1< Date: Thu, 31 Dec 2009 12:15:45 +0100 Subject: fixes bug #344 clean up default favourites --- data/defaults/Dream/userbouquet.favourites.tv | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'data') diff --git a/data/defaults/Dream/userbouquet.favourites.tv b/data/defaults/Dream/userbouquet.favourites.tv index f1adaf9e..cc5e9fe9 100644 --- a/data/defaults/Dream/userbouquet.favourites.tv +++ b/data/defaults/Dream/userbouquet.favourites.tv @@ -10,7 +10,7 @@ #SERVICE 1:0:1:33:21:85:C00000:0:0:0: #SERVICE 1:0:1:701:5:85:C00000:0:0:0: #SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0: -#SERVICE 1:0:1:7005:436:1:C00000:0:0:0: +#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0: #SERVICE 1:0:1:2FC:5:85:C00000:0:0:0: #SERVICE 1:0:1:F98:454:1:C00000:0:0:0: #SERVICE 1:0:1:7034:41B:1:C00000:0:0:0: @@ -26,7 +26,6 @@ #SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen #DESCRIPTION Doku/Wissen/Themen #SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0: #SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0: #SERVICE 1:0:1:2775:444:1:C00000:0:0:0: #SERVICE 1:0:1:293:5:85:C00000:0:0:0: @@ -77,8 +76,6 @@ #SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen #DESCRIPTION Reisen #SERVICE 1:0:1:20:21:85:C00000:0:0:0: -#SERVICE 1:0:1:3339:45B:1:C00000:0:0:0: -#SERVICE 1:0:1:27B9:444:1:C00000:0:0:0: #SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung #DESCRIPTION Beratung #SERVICE 1:0:1:295:21:85:C00000:0:0:0: @@ -92,7 +89,6 @@ #SERVICE 1:0:1:36:7:85:C00000:0:0:0: #SERVICE 1:0:1:307:7:85:C00000:0:0:0: #SERVICE 1:0:1:296:5:85:C00000:0:0:0: -#SERVICE 1:0:1:2791:444:1:C00000:0:0:0: #SERVICE 1:0:1:383:21:85:C00000:0:0:0: #SERVICE 1:0:1:313C:459:1:C00000:0:0:0: #SERVICE 1:0:1:3159:459:1:C00000:0:0:0: @@ -104,9 +100,9 @@ #SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0: #SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0: #SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0: -#SERVICE 1:0:19:1324:3EF:1:C00000:0:0:0: -#SERVICE 1:0:19:1325:3EF:1:C00000:0:0:0: +#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0: #SERVICE 1:0:19:2B84:3F3:1:C00000:0:0:0: +#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0: #SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen #DESCRIPTION Alternativen #SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0: -- cgit v1.2.3 From b6f95a8f5457c60ccc14192a4d13d3c05fa608be Mon Sep 17 00:00:00 2001 From: thedoc Date: Fri, 1 Jan 2010 14:07:03 +0100 Subject: fixes bug #362 allow configuring short power button action to shutdown, standby, menu --- data/setup.xml | 1 + lib/python/Components/UsageConfig.py | 6 ++++++ mytest.py | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'data') diff --git a/data/setup.xml b/data/setup.xml index 9425afda..92bbc0f1 100644 --- a/data/setup.xml +++ b/data/setup.xml @@ -31,6 +31,7 @@ config.usage.quickzap_bouquet_change config.usage.e1like_radio_mode config.usage.on_long_powerpress + config.usage.on_short_powerpress config.usage.infobar_timeout config.usage.output_12V config.usage.show_infobar_on_zap diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py index f133f9f6..21478e90 100644 --- a/lib/python/Components/UsageConfig.py +++ b/lib/python/Components/UsageConfig.py @@ -53,6 +53,12 @@ def InitUsageConfig(): ("show_menu", _("show shutdown menu")), ("shutdown", _("immediate shutdown")), ("standby", _("Standby")) ] ) + + config.usage.on_short_powerpress = ConfigSelection(default = "standby", choices = [ + ("show_menu", _("show shutdown menu")), + ("shutdown", _("immediate shutdown")), + ("standby", _("Standby")) ] ) + config.usage.alternatives_priority = ConfigSelection(default = "0", choices = [ ("0", "DVB-S/-C/-T"), diff --git a/mytest.py b/mytest.py index 7eb045ee..4b687e05 100755 --- a/mytest.py +++ b/mytest.py @@ -363,9 +363,10 @@ class PowerKey: def powerlong(self): if Screens.Standby.inTryQuitMainloop or (self.session.current_dialog and not self.session.current_dialog.ALLOW_SUSPEND): return + self.doAction(action = config.usage.on_long_powerpress.value) + def doAction(self, action): self.standbyblocked = 1 - action = config.usage.on_long_powerpress.value if action == "shutdown": self.shutdown() elif action == "show_menu": @@ -388,8 +389,7 @@ class PowerKey: def powerup(self): if self.standbyblocked == 0: - self.standbyblocked = 1 - self.standby() + self.doAction(action = config.usage.on_short_powerpress.value) def standby(self): if not Screens.Standby.inStandby and self.session.current_dialog and self.session.current_dialog.ALLOW_SUSPEND and self.session.in_exec: -- cgit v1.2.3 From cdeabe4754ac791dc36d320767816317b87ef692 Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Fri, 1 Jan 2010 15:57:06 +0100 Subject: fixes bug #314 remove default settings entry from setup menu since the default wizard is called on first run (doing a factory reset to install the default settings is more plausible) --- data/menu.xml | 6 ------ 1 file changed, 6 deletions(-) (limited to 'data') diff --git a/data/menu.xml b/data/menu.xml index 59195f15..1b71a152 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -75,12 +75,6 @@ - - -from Screens.DefaultWizard import DefaultWizard -self.session.open(DefaultWizard, silent = False) - - from Screens.FactoryReset import FactoryReset -- cgit v1.2.3 From 3e6957cfc66bd8760d412826cf14f82ee16b0dea Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 21 Jan 2010 11:31:53 +0100 Subject: show minus sign before remaining time in movieplayer --- data/skin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'data') diff --git a/data/skin.xml b/data/skin.xml index d5fe01e6..32adb2be 100755 --- a/data/skin.xml +++ b/data/skin.xml @@ -323,7 +323,7 @@ - Remaining + Remaining,Negate -- cgit v1.2.3 From 03a11846308b3a0404786ce5e63e2e6bb4b0c83b Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Sat, 20 Feb 2010 17:47:58 +0100 Subject: removed german tv station 'TIMM' from default userbouquet due to cancellation of satellite broadcast next monday --- data/defaults/Dream/userbouquet.favourites.tv | 1 - 1 file changed, 1 deletion(-) (limited to 'data') diff --git a/data/defaults/Dream/userbouquet.favourites.tv b/data/defaults/Dream/userbouquet.favourites.tv index cc5e9fe9..a5a2e8fa 100644 --- a/data/defaults/Dream/userbouquet.favourites.tv +++ b/data/defaults/Dream/userbouquet.favourites.tv @@ -29,7 +29,6 @@ #SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0: #SERVICE 1:0:1:2775:444:1:C00000:0:0:0: #SERVICE 1:0:1:293:5:85:C00000:0:0:0: -#SERVICE 1:0:1:3138:459:1:C00000:0:0:0: #SERVICE 1:0:1:6D70:437:1:C00000:0:0:0: #SERVICE 1:0:1:277B:444:1:C00000:0:0:0: #SERVICE 1:0:1:332D:45B:1:C00000:0:0:0: -- cgit v1.2.3 From 62d7c7e0b4d31822c47dd2b4d6d505bda424a39f Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Sat, 20 Feb 2010 18:09:10 +0100 Subject: removes hd test ard/zdf from default userbouquet --- data/defaults/Dream/userbouquet.favourites.tv | 1 - 1 file changed, 1 deletion(-) (limited to 'data') diff --git a/data/defaults/Dream/userbouquet.favourites.tv b/data/defaults/Dream/userbouquet.favourites.tv index a5a2e8fa..5f89c48a 100644 --- a/data/defaults/Dream/userbouquet.favourites.tv +++ b/data/defaults/Dream/userbouquet.favourites.tv @@ -100,7 +100,6 @@ #SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0: #SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0: #SERVICE 1:0:19:EF12:421:1:C00000:0:0:0: -#SERVICE 1:0:19:2B84:3F3:1:C00000:0:0:0: #SERVICE 1:0:19:EF13:421:1:C00000:0:0:0: #SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen #DESCRIPTION Alternativen -- cgit v1.2.3 From eca33f89346b4ad0e7bbaef7438e8a87daa963a9 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 11 Jan 2010 19:18:34 +0100 Subject: Add some parental control improvements (made by Tode) --- data/skin_default/Makefile.am | 4 + data/skin_default/lock.png | Bin 0 -> 1053 bytes data/skin_default/lockBouquet.png | Bin 0 -> 1176 bytes data/skin_default/unlock.png | Bin 0 -> 965 bytes data/skin_default/unlockBouquet.png | Bin 0 -> 1141 bytes lib/python/Components/ParentalControl.py | 316 +++++++++++++++++++-------- lib/python/Components/ParentalControlList.py | 29 ++- lib/python/Screens/ParentalControlSetup.py | 79 +++++-- 8 files changed, 320 insertions(+), 108 deletions(-) create mode 100644 data/skin_default/lock.png create mode 100644 data/skin_default/lockBouquet.png create mode 100644 data/skin_default/unlock.png create mode 100644 data/skin_default/unlockBouquet.png mode change 100755 => 100644 lib/python/Components/ParentalControl.py mode change 100755 => 100644 lib/python/Screens/ParentalControlSetup.py (limited to 'data') diff --git a/data/skin_default/Makefile.am b/data/skin_default/Makefile.am index 9e9b7cd4..85bb800d 100755 --- a/data/skin_default/Makefile.am +++ b/data/skin_default/Makefile.am @@ -32,6 +32,8 @@ dist_install_DATA = \ expanded-plugins.png \ info-bg_mp.png \ info-bg.png \ + lock.png \ + lockBouquet.png \ mediaplayer_bg.png \ mute.png \ nim_active.png \ @@ -52,6 +54,8 @@ dist_install_DATA = \ timeline-now.png \ timeline.png \ unhandled-key.png \ + unlock.png \ + unlockBouquet.png \ verticalline-plugins.png \ vkey_backspace.png \ vkey_bg.png \ diff --git a/data/skin_default/lock.png b/data/skin_default/lock.png new file mode 100644 index 00000000..d0ae7f64 Binary files /dev/null and b/data/skin_default/lock.png differ diff --git a/data/skin_default/lockBouquet.png b/data/skin_default/lockBouquet.png new file mode 100644 index 00000000..d503dd2b Binary files /dev/null and b/data/skin_default/lockBouquet.png differ diff --git a/data/skin_default/unlock.png b/data/skin_default/unlock.png new file mode 100644 index 00000000..bd4486e9 Binary files /dev/null and b/data/skin_default/unlock.png differ diff --git a/data/skin_default/unlockBouquet.png b/data/skin_default/unlockBouquet.png new file mode 100644 index 00000000..c5d146d7 Binary files /dev/null and b/data/skin_default/unlockBouquet.png differ diff --git a/lib/python/Components/ParentalControl.py b/lib/python/Components/ParentalControl.py old mode 100755 new mode 100644 index d68e01ff..4830d20a --- a/lib/python/Components/ParentalControl.py +++ b/lib/python/Components/ParentalControl.py @@ -1,19 +1,34 @@ -from Components.config import config, ConfigSubsection, ConfigSelection, ConfigPIN, ConfigYesNo, ConfigSubList, ConfigInteger +from Components.config import config, ConfigSubsection, ConfigSelection, ConfigPIN, ConfigText, ConfigYesNo, ConfigSubList, ConfigInteger +#from Screens.ChannelSelection import service_types_tv from Screens.InputBox import PinInput from Screens.MessageBox import MessageBox from Tools.BoundFunction import boundFunction from ServiceReference import ServiceReference from Tools import Notifications from Tools.Directories import resolveFilename, SCOPE_CONFIG +from enigma import eTimer +import time + +TYPE_SERVICE = "SERVICE" +TYPE_BOUQUETSERVICE = "BOUQUETSERVICE" +TYPE_BOUQUET = "BOUQUET" +LIST_BLACKLIST = "blacklist" +LIST_WHITELIST = "whitelist" + +IMG_WHITESERVICE = LIST_WHITELIST + "-" + TYPE_SERVICE +IMG_WHITEBOUQUET = LIST_WHITELIST + "-" + TYPE_BOUQUET +IMG_BLACKSERVICE = LIST_BLACKLIST + "-" + TYPE_SERVICE +IMG_BLACKBOUQUET = LIST_BLACKLIST + "-" + TYPE_BOUQUET def InitParentalControl(): config.ParentalControl = ConfigSubsection() config.ParentalControl.configured = ConfigYesNo(default = False) config.ParentalControl.mode = ConfigSelection(default = "simple", choices = [("simple", _("simple")), ("complex", _("complex"))]) - config.ParentalControl.storeservicepin = ConfigSelection(default = "never", choices = [("never", _("never")), ("5_minutes", _("5 minutes")), ("30_minutes", _("30 minutes")), ("60_minutes", _("60 minutes")), ("restart", _("until restart"))]) + config.ParentalControl.storeservicepin = ConfigSelection(default = "never", choices = [("never", _("never")), ("5", _("5 minutes")), ("30", _("30 minutes")), ("60", _("60 minutes")), ("standby", _("until standby/restart"))]) + config.ParentalControl.storeservicepincancel = ConfigSelection(default = "never", choices = [("never", _("never")), ("5", _("5 minutes")), ("30", _("30 minutes")), ("60", _("60 minutes")), ("standby", _("until standby/restart"))]) config.ParentalControl.servicepinactive = ConfigYesNo(default = False) config.ParentalControl.setuppinactive = ConfigYesNo(default = False) - config.ParentalControl.type = ConfigSelection(default = "blacklist", choices = [("whitelist", _("whitelist")), ("blacklist", _("blacklist"))]) + config.ParentalControl.type = ConfigSelection(default = "blacklist", choices = [(LIST_WHITELIST, _("whitelist")), (LIST_BLACKLIST, _("blacklist"))]) config.ParentalControl.setuppin = ConfigPIN(default = -1) config.ParentalControl.retries = ConfigSubsection() @@ -39,40 +54,58 @@ def InitParentalControl(): class ParentalControl: def __init__(self): - self.open() + #Do not call open on init, because bouquets are not ready at that moment +# self.open() self.serviceLevel = {} - - def addWhitelistService(self, service): - self.whitelist.append(service) + #Instead: Use Flags to see, if we already initialized config and called open + self.configInitialized = False + self.filesOpened = False + #This is the timer that is used to see, if the time for caching the pin is over + #Of course we could also work without a timer and compare the times every + #time we call isServicePlayable. But this might probably slow down zapping, + #That's why I decided to use a timer + self.sessionPinTimer = eTimer() + self.sessionPinTimer.callback.append(self.resetSessionPin) - def addBlacklistService(self, service): - self.blacklist.append(service) - - def setServiceLevel(self, service, level): - self.serviceLevel[service] = level - - def deleteWhitelistService(self, service): - self.whitelist.remove(service) - if self.serviceLevel.has_key(service): - self.serviceLevel.remove(service) + def serviceMethodWrapper(self, service, method, *args): + #This method is used to call all functions that need a service as Parameter: + #It takes either a Service- Reference or a Bouquet- Reference and passes + #Either the service or all services contained in the bouquet to the method given + #That way all other functions do not need to distinguish between service and bouquet. + if "FROM BOUQUET" in service: + method( service , TYPE_BOUQUET , *args ) + servicelist = self.readServicesFromBouquet(service,"C") + for ref in servicelist: + sRef = str(ref[0]) + method( sRef , TYPE_BOUQUETSERVICE , *args ) + else: + ref = ServiceReference(service) + sRef = str(ref) + method( sRef , TYPE_SERVICE , *args ) - def deleteBlacklistService(self, service): - self.blacklist.remove(service) - if self.serviceLevel.has_key(service): - self.serviceLevel.remove(service) + def setServiceLevel(self, service, type, level): + self.serviceLevel[service] = level def isServicePlayable(self, ref, callback): if not config.ParentalControl.configured.value or not config.ParentalControl.servicepinactive.value: return True - #print "whitelist:", self.whitelist - #print "blacklist:", self.blacklist - #print "config.ParentalControl.type.value:", config.ParentalControl.type.value - #print "not in whitelist:", (service not in self.whitelist) - #print "checking parental control for service:", ref.toString() + #Check if we already read the whitelists and blacklists. If not: call open + if self.filesOpened == False: + self.open() + #Check if configuration has already been read or if the significant values have changed. + #If true: read the configuration + if self.configInitialized == False or self.storeServicePin != config.ParentalControl.storeservicepin.value or self.storeServicePinCancel != config.ParentalControl.storeservicepincancel.value: + self.getConfigValues() service = ref.toCompareString() - if (config.ParentalControl.type.value == "whitelist" and service not in self.whitelist) or (config.ParentalControl.type.value == "blacklist" and service in self.blacklist): + if (config.ParentalControl.type.value == LIST_WHITELIST and not self.whitelist.has_key(service)) or (config.ParentalControl.type.value == LIST_BLACKLIST and self.blacklist.has_key(service)): + #Check if the session pin is cached and return the cached value, if it is. + if self.sessionPinCached == True: + #As we can cache successful pin- entries as well as canceled pin- entries, + #We give back the last action + return self.sessionPinCachedValue self.callback = callback - #print "service:", ServiceReference(service).getServiceName() + #Someone started to implement different levels of protection. Seems they were never completed + #I did not throw out this code, although it is of no use at the moment levelNeeded = 0 if self.serviceLevel.has_key(service): levelNeeded = self.serviceLevel[service] @@ -83,103 +116,214 @@ class ParentalControl: return True def protectService(self, service): - #print "protect" - #print "config.ParentalControl.type.value:", config.ParentalControl.type.value - if config.ParentalControl.type.value == "whitelist": - if service in self.whitelist: - self.deleteWhitelistService(service) + if config.ParentalControl.type.value == LIST_WHITELIST: + if self.whitelist.has_key(service): + self.serviceMethodWrapper(service, self.removeServiceFromList, self.whitelist) + #self.deleteWhitelistService(service) else: # blacklist - if service not in self.blacklist: - self.addBlacklistService(service) + if not self.blacklist.has_key(service): + self.serviceMethodWrapper(service, self.addServiceToList, self.blacklist) + #self.addBlacklistService(service) #print "whitelist:", self.whitelist #print "blacklist:", self.blacklist - def unProtectService(self, service): #print "unprotect" #print "config.ParentalControl.type.value:", config.ParentalControl.type.value - if config.ParentalControl.type.value == "whitelist": - if service not in self.whitelist: - self.addWhitelistService(service) + if config.ParentalControl.type.value == LIST_WHITELIST: + if not self.whitelist.has_key(service): + self.serviceMethodWrapper(service, self.addServiceToList, self.whitelist) + #self.addWhitelistService(service) else: # blacklist - if service in self.blacklist: - self.deleteBlacklistService(service) + if self.blacklist.has_key(service): + self.serviceMethodWrapper(service, self.removeServiceFromList, self.blacklist) + #self.deleteBlacklistService(service) #print "whitelist:", self.whitelist #print "blacklist:", self.blacklist def getProtectionLevel(self, service): - if (config.ParentalControl.type.value == "whitelist" and service not in self.whitelist) or (config.ParentalControl.type.value == "blacklist" and service in self.blacklist): + if (config.ParentalControl.type.value == LIST_WHITELIST and not self.whitelist.has_key(service)) or (config.ParentalControl.type.value == LIST_BLACKLIST and self.blacklist.has_key(service)): if self.serviceLevel.has_key(service): return self.serviceLevel[service] else: return 0 else: return -1 + + def getProtectionType(self, service): + #New method used in ParentalControlList: This method does not only return + #if a service is protected or not, it also returns, why (whitelist or blacklist, service or bouquet) + if self.filesOpened == False: + self.open() + sImage = "" + if (config.ParentalControl.type.value == LIST_WHITELIST): + if self.whitelist.has_key(service): + if TYPE_SERVICE in self.whitelist[service]: + sImage = IMG_WHITESERVICE + else: + sImage = IMG_WHITEBOUQUET + elif (config.ParentalControl.type.value == LIST_BLACKLIST): + if self.blacklist.has_key(service): + if TYPE_SERVICE in self.blacklist[service]: + sImage = IMG_BLACKSERVICE + else: + sImage = IMG_BLACKBOUQUET + bLocked = self.getProtectionLevel(service) != -1 + return (bLocked,sImage) + + def getConfigValues(self): + #Read all values from configuration + self.checkPinInterval = False + self.checkPinIntervalCancel = False + self.checkSessionPin = False + self.checkSessionPinCancel = False + + self.sessionPinCached = False + self.pinIntervalSeconds = 0 + self.pinIntervalSecondsCancel = 0 + + self.storeServicePin = config.ParentalControl.storeservicepin.value + self.storeServicePinCancel = config.ParentalControl.storeservicepincancel.value + + if self.storeServicePin == "never": + pass + elif self.storeServicePin == "standby": + self.checkSessionPin = True + else: + self.checkPinInterval = True + iMinutes = float(self.storeServicePin) + iSeconds = iMinutes*60 + self.pinIntervalSeconds = iSeconds + + if self.storeServicePinCancel == "never": + pass + elif self.storeServicePinCancel == "standby": + self.checkSessionPinCancel = True + else: + self.checkPinIntervalCancel = True + iMinutes = float(self.storeServicePinCancel) + iSeconds = iMinutes*60 + self.pinIntervalSecondsCancel = iSeconds + self.configInitialized = True + # Reset PIN cache on standby: Use StandbyCounter- Config- Callback + config.misc.standbyCounter.addNotifier(self.standbyCounterCallback, initial_call = False) + + def standbyCounterCallback(self, configElement): + self.resetSessionPin() + + def resetSessionPin(self): + #Reset the session pin, stop the timer + self.sessionPinCached = False + self.sessionPinTimer.stop() + + def getCurrentTimeStamp(self): + return time.time() + def getPinList(self): return [ x.value for x in config.ParentalControl.servicepin ] - + def servicePinEntered(self, service, result): -# levelNeeded = 0 - #if self.serviceLevel.has_key(service): - #levelNeeded = self.serviceLevel[service] -# - #print "getPinList():", self.getPinList() - #pinList = self.getPinList()[:levelNeeded + 1] - #print "pinList:", pinList -# -# print "pin entered for service", service, "and pin was", pin - #if pin is not None and int(pin) in pinList: + if result is not None and result: - #print "pin ok, playing service" + #This is the new function of caching the service pin + #save last session and time of last entered pin... + if self.checkSessionPin == True: + self.sessionPinCached = True + self.sessionPinCachedValue = True + if self.checkPinInterval == True: + self.sessionPinCached = True + self.sessionPinCachedValue = True + self.sessionPinTimer.start(self.pinIntervalSeconds*1000,1) self.callback(ref = service) else: + #This is the new function of caching cancelling of service pin if result is not None: Notifications.AddNotification(MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR) - #print "wrong pin entered" + else: + if self.checkSessionPinCancel == True: + self.sessionPinCached = True + self.sessionPinCachedValue = False + if self.checkPinIntervalCancel == True: + self.sessionPinCached = True + self.sessionPinCachedValue = False + self.sessionPinTimer.start(self.pinIntervalSecondsCancel*1000,1) - def saveWhitelist(self): - file = open(resolveFilename(SCOPE_CONFIG, "whitelist"), 'w') - for x in self.whitelist: - file.write(x + "\n") - file.close - - def openWhitelist(self): - self.whitelist = [] - try: - file = open(resolveFilename(SCOPE_CONFIG, "whitelist"), 'r') - lines = file.readlines() - for x in lines: - ref = ServiceReference(x.strip()) - self.whitelist.append(str(ref)) - file.close - except: - pass - - def saveBlacklist(self): - file = open(resolveFilename(SCOPE_CONFIG, "blacklist"), 'w') - for x in self.blacklist: - file.write(x + "\n") + def saveListToFile(self,sWhichList): + #Replaces saveWhiteList and saveBlackList: + #I don't like to have two functions with identical code... + if sWhichList == LIST_BLACKLIST: + vList = self.blacklist + else: + vList = self.whitelist + file = open(resolveFilename(SCOPE_CONFIG, sWhichList), 'w') + for sService,sType in vList.iteritems(): + #Only Services that are selected directly and Bouqets are saved. + #Services that are added by a bouquet are not saved. + #This is the reason for the change in self.whitelist and self.blacklist + if TYPE_SERVICE in sType or TYPE_BOUQUET in sType: + file.write(str(sService) + "\n") file.close - def openBlacklist(self): - self.blacklist = [] + def openListFromFile(self,sWhichList): + #Replaces openWhiteList and openBlackList: + #I don't like to have two functions with identical code... + if sWhichList == LIST_BLACKLIST: + self.blacklist = {} + vList = self.blacklist + else: + self.whitelist = {} + vList = self.whitelist try: - file = open(resolveFilename(SCOPE_CONFIG, "blacklist"), 'r') + file = open(resolveFilename(SCOPE_CONFIG, sWhichList ), 'r') lines = file.readlines() for x in lines: - ref = ServiceReference(x.strip()) - self.blacklist.append(str(ref)) + sPlain = x.strip() + self.serviceMethodWrapper(sPlain, self.addServiceToList, vList) file.close except: pass + + def addServiceToList(self, service, type, vList): + #Replaces addWhitelistService and addBlacklistService + #The lists are not only lists of service references any more. + #They are named lists with the service as key and an array of types as value: + + if vList.has_key(service): + if not type in vList[service]: + vList[service].append(type) + else: + vList[service] = [type] + + def removeServiceFromList(self, service, type, vList): + #Replaces deleteWhitelistService and deleteBlacklistService + if vList.has_key(service): + if type in vList[service]: + vList[service].remove(type) + if not vList[service]: + del vList[service] + if self.serviceLevel.has_key(service): + self.serviceLevel.remove(service) + + def readServicesFromBouquet(self,sBouquetSelection,formatstring): + #This method gives back a list of services for a given bouquet + from enigma import eServiceCenter, eServiceReference + from Screens.ChannelSelection import service_types_tv + serviceHandler = eServiceCenter.getInstance() + refstr = sBouquetSelection + root = eServiceReference(refstr) + list = serviceHandler.list(root) + if list is not None: + services = list.getContent("CN", True) #(servicecomparestring, name) + return services def save(self): - self.saveBlacklist() - self.saveWhitelist() + self.saveListToFile(LIST_BLACKLIST) + self.saveListToFile(LIST_WHITELIST) def open(self): - self.openBlacklist() - self.openWhitelist() + self.openListFromFile(LIST_BLACKLIST) + self.openListFromFile(LIST_WHITELIST) + self.filesOpened = True parentalControl = ParentalControl() diff --git a/lib/python/Components/ParentalControlList.py b/lib/python/Components/ParentalControlList.py index 128e6d3e..797ea391 100644 --- a/lib/python/Components/ParentalControlList.py +++ b/lib/python/Components/ParentalControlList.py @@ -1,19 +1,28 @@ from MenuList import MenuList -from Components.ParentalControl import parentalControl +from Components.ParentalControl import parentalControl, IMG_WHITESERVICE, IMG_WHITEBOUQUET, IMG_BLACKSERVICE, IMG_BLACKBOUQUET from Tools.Directories import SCOPE_SKIN_IMAGE, resolveFilename from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT from Tools.LoadPixmap import LoadPixmap -lockPicture = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock.png")) +#Now there is a list of pictures instead of one... +entryPicture = {} -def ParentalControlEntryComponent(service, name, locked = True): +entryPicture[IMG_BLACKSERVICE] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock.png")) +entryPicture[IMG_BLACKBOUQUET] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lockBouquet.png")) +entryPicture[IMG_WHITESERVICE] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/unlock.png")) +entryPicture[IMG_WHITEBOUQUET] = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/unlockBouquet.png")) + +def ParentalControlEntryComponent(service, name, protectionType): + locked = protectionType[0] + sImage = protectionType[1] res = [ (service, name, locked), (eListboxPythonMultiContent.TYPE_TEXT, 80, 5, 300, 50, 0, RT_HALIGN_LEFT, name) ] - if locked: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 0, 0, 32, 32, lockPicture)) + #Changed logic: The image is defined by sImage, not by locked anymore + if sImage != "": + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 0, 0, 32, 32, entryPicture[sImage])) return res class ParentalControlList(MenuList): @@ -25,9 +34,11 @@ class ParentalControlList(MenuList): def toggleSelectedLock(self): print "self.l.getCurrentSelection():", self.l.getCurrentSelection() print "self.l.getCurrentSelectionIndex():", self.l.getCurrentSelectionIndex() - self.list[self.l.getCurrentSelectionIndex()] = ParentalControlEntryComponent(self.l.getCurrentSelection()[0][0], self.l.getCurrentSelection()[0][1], not self.l.getCurrentSelection()[0][2]); - if self.l.getCurrentSelection()[0][2]: - parentalControl.protectService(self.l.getCurrentSelection()[0][0]) + curSel = self.l.getCurrentSelection() + if curSel[0][2]: + parentalControl.unProtectService(self.l.getCurrentSelection()[0][0]) else: - parentalControl.unProtectService(self.l.getCurrentSelection()[0][0]) + parentalControl.protectService(self.l.getCurrentSelection()[0][0]) + #Instead of just negating the locked- flag, now I call the getProtectionType every time... + self.list[self.l.getCurrentSelectionIndex()] = ParentalControlEntryComponent(curSel[0][0], curSel[0][1], parentalControl.getProtectionType(curSel[0][0])) self.l.setList(self.list) diff --git a/lib/python/Screens/ParentalControlSetup.py b/lib/python/Screens/ParentalControlSetup.py old mode 100755 new mode 100644 index a123d2d3..2bf4841e --- a/lib/python/Screens/ParentalControlSetup.py +++ b/lib/python/Screens/ParentalControlSetup.py @@ -16,7 +16,7 @@ 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()], triesEntry = self.getTriesEntry(), 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 = _("Enter pin code"))) def getTriesEntry(self): return config.ParentalControl.retries.setuppin @@ -48,11 +48,11 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): self.list = [] ConfigListScreen.__init__(self, self.list, session = self.session, on_change = self.changedEntry) self.createSetup() - + self["actions"] = NumberActionMap(["SetupActions"], { - "cancel": self.keyCancel, - "save": self.keyCancel + "cancel": self.keyCancel, + "save": self.keyCancel }, -2) self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText(_("OK")) @@ -63,12 +63,12 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): def isProtected(self): return config.ParentalControl.setuppinactive.value and config.ParentalControl.configured.value - + def createSetup(self): self.editListEntry = None self.changePin = None self.changeSetupPin = None - + self.list = [] self.list.append(getConfigListEntry(_("Enable parental control"), config.ParentalControl.configured)) print "config.ParentalControl.configured.value", config.ParentalControl.configured.value @@ -87,10 +87,19 @@ 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)) + #Added Option to remember the service pin + self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin)) + #Added Option to remember the cancellation of service pin entry + self.list.append(getConfigListEntry(_("Remember service pin cancel"), config.ParentalControl.storeservicepincancel)) self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing())) self.list.append(self.editListEntry) - + #New funtion: Possibility to add Bouquets to whitelist / blacklist + self.editBouquetListEntry = getConfigListEntry(_("Edit bouquets list"), NoSave(ConfigNothing())) + self.list.append(self.editBouquetListEntry) + #New option to reload service lists (for example if bouquets have changed) + self.reloadLists = getConfigListEntry(_("Reload Black-/Whitelists"), NoSave(ConfigNothing())) + self.list.append(self.reloadLists) + self["config"].list = self.list self["config"].setList(self.list) @@ -98,6 +107,8 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): print "self[\"config\"].l.getCurrentSelection()", self["config"].l.getCurrentSelection() if self["config"].l.getCurrentSelection() == self.editListEntry: self.session.open(ParentalControlEditor) + elif self["config"].l.getCurrentSelection() == self.editBouquetListEntry: + self.session.open(ParentalControlBouquetEditor) elif self["config"].l.getCurrentSelection() == self.changePin: if config.ParentalControl.mode.value == "complex": pass @@ -105,6 +116,8 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin")) elif self["config"].l.getCurrentSelection() == self.changeSetupPin: self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin")) + elif self["config"].l.getCurrentSelection() == self.reloadLists: + parentalControl.open() else: ConfigListScreen.keyRight(self) print "current selection:", self["config"].l.getCurrentSelection() @@ -149,6 +162,7 @@ class ParentalControlSetup(Screen, ConfigListScreen, ProtectedScreen): def keyNumberGlobal(self, number): pass + # for summary: def changedEntry(self): for x in self.onChangedEntry: @@ -224,13 +238,13 @@ class ParentalControlEditor(Screen): if not self.servicesList.has_key(key): self.servicesList[key] = [] self.servicesList[key].append(s) - + def chooseLetter(self): print "choose letter" mylist = [] for x in self.servicesList.keys(): if x == chr(SPECIAL_CHAR): - x = ("special characters", x) + x = (_("special characters"), x) else: x = (x, x) mylist.append(x) @@ -242,12 +256,51 @@ class ParentalControlEditor(Screen): if result is not None: print "result:", result self.currentLetter = result[1] - self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionLevel(x[0]) != -1) for x in self.servicesList[result[1]]] + #Replace getProtectionLevel by new getProtectionType + self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionType(x[0])) for x in self.servicesList[result[1]]] self.servicelist.setList(self.list) else: parentalControl.save() self.close() +class ParentalControlBouquetEditor(Screen): + #This new class allows adding complete bouquets to black- and whitelists + #The servicereference that is stored for bouquets is their refstr as listed in bouquets.tv + def __init__(self, session): + Screen.__init__(self, session) + self.skinName = "ParentalControlEditor" + self.list = [] + self.bouquetslist = ParentalControlList(self.list) + self["servicelist"] = self.bouquetslist; + self.readBouquetList() + self.onLayoutFinish.append(self.selectBouquet) + + self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions"], + { + "ok": self.select, + "cancel": self.cancel + }, -1) + + def cancel(self): + parentalControl.save() + self.close() + + def select(self): + self.bouquetslist.toggleSelectedLock() + + def readBouquetList(self): + serviceHandler = eServiceCenter.getInstance() + refstr = '1:134:1:0:0:0:0:0:0:0:FROM BOUQUET \"bouquets.tv\" ORDER BY bouquet' + bouquetroot = eServiceReference(refstr) + self.bouquetlist = {} + list = serviceHandler.list(bouquetroot) + if list is not None: + self.bouquetlist = list.getContent("CN", True) + + def selectBouquet(self): + self.list = [ParentalControlEntryComponent(x[0], x[1], parentalControl.getProtectionType(x[0])) for x in self.bouquetlist] + self.bouquetslist.setList(self.list) + class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): def __init__(self, session, pin, pinname): Screen.__init__(self, session) @@ -264,12 +317,12 @@ class ParentalControlChangePin(Screen, ConfigListScreen, ProtectedScreen): self.pin2.addEndNotifier(boundFunction(self.valueChanged, 2)) self.list.append(getConfigListEntry(_("New pin"), NoSave(self.pin1))) self.list.append(getConfigListEntry(_("Reenter new pin"), NoSave(self.pin2))) - ConfigListScreen.__init__(self, self.list, session = self.session, on_change = self.changedEntry) + 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"))) ProtectedScreen.__init__(self) - + self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions"], { "cancel": self.cancel, -- cgit v1.2.3 From 72bc8cf59d2f2192bcf1491758169a77b106190a Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Tue, 16 Feb 2010 14:53:12 +0100 Subject: fixes bug #445 show diseqc settings in NimSelection --- data/skin_default.xml | 6 +++--- lib/python/Screens/Satconfig.py | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) (limited to 'data') diff --git a/data/skin_default.xml b/data/skin_default.xml index 56d53dc3..0114349b 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -626,14 +626,14 @@ self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y())) - + {"template": [ MultiContentEntryText(pos = (10, 5), size = (360, 30), flags = RT_HALIGN_LEFT, text = 1), # index 1 is the nim name, - MultiContentEntryText(pos = (50, 30), size = (320, 30), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings, + MultiContentEntryText(pos = (50, 30), size = (320, 50), font = 1, flags = RT_HALIGN_LEFT, text = 2), # index 2 is a description of the nim settings, ], "fonts": [gFont("Regular", 20), gFont("Regular", 15)], - "itemHeight": 70 + "itemHeight": 80 } diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 047bde23..647307d0 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -498,17 +498,25 @@ class NimSelection(Screen): text = _("nothing connected") elif nimConfig.configMode.value == "simple": if nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"): - text = _("Sats") + ": " + text = {"single": _("Single"), "toneburst_a_b": _("Toneburst A/B"), "diseqc_a_b": _("DiSEqC A/B"), "diseqc_a_b_c_d": _("DiSEqC A/B/C/D")}[nimConfig.diseqcMode.value] + "\n" + text += _("Sats") + ": " + satnames = [] if nimConfig.diseqcA.orbital_position != 3601: - text += nimmanager.getSatName(int(nimConfig.diseqcA.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcA.value))) if nimConfig.diseqcMode.value in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"): if nimConfig.diseqcB.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcB.value))) if nimConfig.diseqcMode.value == "diseqc_a_b_c_d": if nimConfig.diseqcC.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcC.value))) if nimConfig.diseqcD.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcD.value))) + if len(satnames) <= 2: + text += ", ".join(satnames) + elif len(satnames) > 2: + # we need a newline here, since multi content lists don't support automtic line wrapping + text += ", ".join(satnames[:2]) + ",\n" + text += " " + ", ".join(satnames[2:]) elif nimConfig.diseqcMode.value == "positioner": text = _("Positioner") + ":" if nimConfig.positionerMode.value == "usals": -- cgit v1.2.3 From c3da26752068a3059d2dc2356c8b7c1ab2b850ed Mon Sep 17 00:00:00 2001 From: Stefan Pluecken Date: Sat, 13 Mar 2010 14:44:06 +0100 Subject: fixes bug #444 replace "Das Erste" => "Das Erste HD" "ZDF" => "ZDF HD" "Arte" => "Arte HD" on HD boxes in default favourite bouquet --- configure.ac | 2 + data/defaults/Dream/Makefile.am | 5 +- data/defaults/Dream/dm500hd.info | 2 +- data/defaults/Dream/dm7025.info | 2 +- data/defaults/Dream/dm800.info | 2 +- data/defaults/Dream/dm8000.info | 2 +- data/defaults/Dream/hdbouquets/Makefile.am | 4 + .../Dream/hdbouquets/userbouquet.favourites.tv | 129 +++++++++++++++++++++ data/defaults/Dream/sdbouquets/Makefile.am | 4 + .../Dream/sdbouquets/userbouquet.favourites.tv | 127 ++++++++++++++++++++ data/defaults/Dream/userbouquet.favourites.tv | 127 -------------------- 11 files changed, 273 insertions(+), 133 deletions(-) create mode 100644 data/defaults/Dream/hdbouquets/Makefile.am create mode 100644 data/defaults/Dream/hdbouquets/userbouquet.favourites.tv create mode 100644 data/defaults/Dream/sdbouquets/Makefile.am create mode 100644 data/defaults/Dream/sdbouquets/userbouquet.favourites.tv delete mode 100644 data/defaults/Dream/userbouquet.favourites.tv (limited to 'data') diff --git a/configure.ac b/configure.ac index aa2fa3e3..d1b1d279 100755 --- a/configure.ac +++ b/configure.ac @@ -90,6 +90,8 @@ data/fonts/Makefile data/countries/Makefile data/defaults/Makefile data/defaults/Dream/Makefile +data/defaults/Dream/hdbouquets/Makefile +data/defaults/Dream/sdbouquets/Makefile data/extensions/Makefile data/skin_default/Makefile data/skin_default/menu/Makefile diff --git a/data/defaults/Dream/Makefile.am b/data/defaults/Dream/Makefile.am index 113442c0..31ba1c69 100644 --- a/data/defaults/Dream/Makefile.am +++ b/data/defaults/Dream/Makefile.am @@ -1,3 +1,5 @@ +SUBDIRS = hdbouquets sdbouquets + installdir = $(pkgdatadir)/defaults/Dream dist_install_DATA = \ @@ -9,5 +11,4 @@ dist_install_DATA = \ settings.500hd \ settings.7025 \ settings.800 \ - settings.8000 \ - userbouquet.favourites.tv + settings.8000 diff --git a/data/defaults/Dream/dm500hd.info b/data/defaults/Dream/dm500hd.info index fbf7888e..b1b4d53d 100644 --- a/data/defaults/Dream/dm500hd.info +++ b/data/defaults/Dream/dm500hd.info @@ -20,7 +20,7 @@ - + diff --git a/data/defaults/Dream/dm7025.info b/data/defaults/Dream/dm7025.info index 0461b686..a1585cfe 100644 --- a/data/defaults/Dream/dm7025.info +++ b/data/defaults/Dream/dm7025.info @@ -20,7 +20,7 @@ - + diff --git a/data/defaults/Dream/dm800.info b/data/defaults/Dream/dm800.info index 8c68349f..4793bd85 100644 --- a/data/defaults/Dream/dm800.info +++ b/data/defaults/Dream/dm800.info @@ -20,7 +20,7 @@ - + diff --git a/data/defaults/Dream/dm8000.info b/data/defaults/Dream/dm8000.info index 8b11946f..2ef2013a 100644 --- a/data/defaults/Dream/dm8000.info +++ b/data/defaults/Dream/dm8000.info @@ -20,7 +20,7 @@ - + diff --git a/data/defaults/Dream/hdbouquets/Makefile.am b/data/defaults/Dream/hdbouquets/Makefile.am new file mode 100644 index 00000000..843a07d6 --- /dev/null +++ b/data/defaults/Dream/hdbouquets/Makefile.am @@ -0,0 +1,4 @@ +installdir = $(pkgdatadir)/defaults/Dream/hdbouquets + +dist_install_DATA = \ + userbouquet.favourites.tv diff --git a/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv b/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv new file mode 100644 index 00000000..91536b10 --- /dev/null +++ b/data/defaults/Dream/hdbouquets/userbouquet.favourites.tv @@ -0,0 +1,129 @@ +#NAME Favourites (TV) +#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0: +#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0: +#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0: +#SERVICE 1:0:1:445C:453:1:C00000:0:0:0: +#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0: +#SERVICE 1:0:1:445D:453:1:C00000:0:0:0: +#SERVICE 1:0:1:445E:453:1:C00000:0:0:0: +#SERVICE 1:0:1:33:21:85:C00000:0:0:0: +#SERVICE 1:0:1:701:5:85:C00000:0:0:0: +#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0: +#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0: +#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0: +#SERVICE 1:0:1:F98:454:1:C00000:0:0:0: +#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0: +#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0: +#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0: +#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen +#DESCRIPTION Doku/Wissen/Themen +#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0: +#SERVICE 1:0:1:2775:444:1:C00000:0:0:0: +#SERVICE 1:0:1:293:5:85:C00000:0:0:0: +#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0: +#SERVICE 1:0:1:277B:444:1:C00000:0:0:0: +#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0: +#SERVICE 1:0:1:3139:459:1:C00000:0:0:0: +#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0: +#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport +#DESCRIPTION Sport +#SERVICE 1:0:1:384:21:85:C00000:0:0:0: +#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0: +#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder +#DESCRIPTION Kinder +#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0: +#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0: +#SERVICE 1:0:1:7008:436:1:C00000:0:0:0: +#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0: +#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten +#DESCRIPTION Nachrichten +#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0: +#SERVICE 1:0:1:445F:453:1:C00000:0:0:0: +#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0: +#SERVICE 1:0:1:2753:402:1:C00000:0:0:0: +#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0: +#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional +#DESCRIPTION Regional +#SERVICE 1:0:1:3146:459:1:C00000:0:0:0: +#SERVICE 1:0:1:300:7:85:C00000:0:0:0: +#SERVICE 1:0:1:2778:444:1:C00000:0:0:0: +#SERVICE 1:0:1:277A:444:1:C00000:0:0:0: +#SERVICE 1:0:1:2779:444:1:C00000:0:0:0: +#SERVICE 1:0:1:2777:444:1:C00000:0:0:0: +#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0: +#SERVICE 1:0:1:277D:444:1:C00000:0:0:0: +#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik +#DESCRIPTION Musik +#SERVICE 1:0:1:2774:444:1:C00000:0:0:0: +#SERVICE 1:0:1:7004:436:1:C00000:0:0:0: +#SERVICE 1:0:1:7001:436:1:C00000:0:0:0: +#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0: +#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0: +#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0: +#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0: +#SERVICE 1:0:1:304:5:85:C00000:0:0:0: +#SERVICE 1:0:1:702:5:85:C00000:0:0:0: +#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen +#DESCRIPTION Reisen +#SERVICE 1:0:1:20:21:85:C00000:0:0:0: +#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung +#DESCRIPTION Beratung +#SERVICE 1:0:1:295:21:85:C00000:0:0:0: +#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen +#DESCRIPTION Einkaufen +#SERVICE 1:0:1:301:7:85:C00000:0:0:0: +#SERVICE 1:0:1:28:21:85:C00000:0:0:0: +#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0: +#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0: +#SERVICE 1:0:1:3148:459:1:C00000:0:0:0: +#SERVICE 1:0:1:36:7:85:C00000:0:0:0: +#SERVICE 1:0:1:307:7:85:C00000:0:0:0: +#SERVICE 1:0:1:296:5:85:C00000:0:0:0: +#SERVICE 1:0:1:383:21:85:C00000:0:0:0: +#SERVICE 1:0:1:313C:459:1:C00000:0:0:0: +#SERVICE 1:0:1:3159:459:1:C00000:0:0:0: +#SERVICE 1:0:1:2E:21:85:C00000:0:0:0: +#SERVICE 1:0:1:381:21:85:C00000:0:0:0: +#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition +#DESCRIPTION High Definition +#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0: +#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0: +#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0: +#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen +#DESCRIPTION Alternativen +#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0: +#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0: +#SERVICE 1:64:8:0:0:0:0:0:0:0::Alternative SD services +#DESCRIPTION Alternative SD services +#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0: +#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0: diff --git a/data/defaults/Dream/sdbouquets/Makefile.am b/data/defaults/Dream/sdbouquets/Makefile.am new file mode 100644 index 00000000..50328e55 --- /dev/null +++ b/data/defaults/Dream/sdbouquets/Makefile.am @@ -0,0 +1,4 @@ +installdir = $(pkgdatadir)/defaults/Dream/sdbouquets + +dist_install_DATA = \ + userbouquet.favourites.tv diff --git a/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv b/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv new file mode 100644 index 00000000..5f89c48a --- /dev/null +++ b/data/defaults/Dream/sdbouquets/userbouquet.favourites.tv @@ -0,0 +1,127 @@ +#NAME Favourites (TV) +#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0: +#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0: +#SERVICE 1:0:1:445C:453:1:C00000:0:0:0: +#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0: +#SERVICE 1:0:1:445D:453:1:C00000:0:0:0: +#SERVICE 1:0:1:445E:453:1:C00000:0:0:0: +#SERVICE 1:0:1:33:21:85:C00000:0:0:0: +#SERVICE 1:0:1:701:5:85:C00000:0:0:0: +#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0: +#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0: +#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0: +#SERVICE 1:0:1:F98:454:1:C00000:0:0:0: +#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0: +#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0: +#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0: +#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen +#DESCRIPTION Doku/Wissen/Themen +#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0: +#SERVICE 1:0:1:2775:444:1:C00000:0:0:0: +#SERVICE 1:0:1:293:5:85:C00000:0:0:0: +#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0: +#SERVICE 1:0:1:277B:444:1:C00000:0:0:0: +#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0: +#SERVICE 1:0:1:3139:459:1:C00000:0:0:0: +#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0: +#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport +#DESCRIPTION Sport +#SERVICE 1:0:1:384:21:85:C00000:0:0:0: +#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0: +#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder +#DESCRIPTION Kinder +#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0: +#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0: +#SERVICE 1:0:1:7008:436:1:C00000:0:0:0: +#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0: +#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten +#DESCRIPTION Nachrichten +#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0: +#SERVICE 1:0:1:445F:453:1:C00000:0:0:0: +#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0: +#SERVICE 1:0:1:2753:402:1:C00000:0:0:0: +#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0: +#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional +#DESCRIPTION Regional +#SERVICE 1:0:1:3146:459:1:C00000:0:0:0: +#SERVICE 1:0:1:300:7:85:C00000:0:0:0: +#SERVICE 1:0:1:2778:444:1:C00000:0:0:0: +#SERVICE 1:0:1:277A:444:1:C00000:0:0:0: +#SERVICE 1:0:1:2779:444:1:C00000:0:0:0: +#SERVICE 1:0:1:2777:444:1:C00000:0:0:0: +#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0: +#SERVICE 1:0:1:277D:444:1:C00000:0:0:0: +#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik +#DESCRIPTION Musik +#SERVICE 1:0:1:2774:444:1:C00000:0:0:0: +#SERVICE 1:0:1:7004:436:1:C00000:0:0:0: +#SERVICE 1:0:1:7001:436:1:C00000:0:0:0: +#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0: +#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0: +#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0: +#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0: +#SERVICE 1:0:1:304:5:85:C00000:0:0:0: +#SERVICE 1:0:1:702:5:85:C00000:0:0:0: +#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen +#DESCRIPTION Reisen +#SERVICE 1:0:1:20:21:85:C00000:0:0:0: +#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung +#DESCRIPTION Beratung +#SERVICE 1:0:1:295:21:85:C00000:0:0:0: +#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen +#DESCRIPTION Einkaufen +#SERVICE 1:0:1:301:7:85:C00000:0:0:0: +#SERVICE 1:0:1:28:21:85:C00000:0:0:0: +#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0: +#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0: +#SERVICE 1:0:1:3148:459:1:C00000:0:0:0: +#SERVICE 1:0:1:36:7:85:C00000:0:0:0: +#SERVICE 1:0:1:307:7:85:C00000:0:0:0: +#SERVICE 1:0:1:296:5:85:C00000:0:0:0: +#SERVICE 1:0:1:383:21:85:C00000:0:0:0: +#SERVICE 1:0:1:313C:459:1:C00000:0:0:0: +#SERVICE 1:0:1:3159:459:1:C00000:0:0:0: +#SERVICE 1:0:1:2E:21:85:C00000:0:0:0: +#SERVICE 1:0:1:381:21:85:C00000:0:0:0: +#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition +#DESCRIPTION High Definition +#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0: +#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0: +#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0: +#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0: +#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0: +#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0: +#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen +#DESCRIPTION Alternativen +#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0: +#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0: +#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0: +#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0: +#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0: +#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0: diff --git a/data/defaults/Dream/userbouquet.favourites.tv b/data/defaults/Dream/userbouquet.favourites.tv deleted file mode 100644 index 5f89c48a..00000000 --- a/data/defaults/Dream/userbouquet.favourites.tv +++ /dev/null @@ -1,127 +0,0 @@ -#NAME Favourites (TV) -#SERVICE 1:0:1:6DCA:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6D66:437:1:C00000:0:0:0: -#SERVICE 1:0:1:6DCC:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:2EE3:441:1:C00000:0:0:0: -#SERVICE 1:0:1:445C:453:1:C00000:0:0:0: -#SERVICE 1:0:1:2EF4:441:1:C00000:0:0:0: -#SERVICE 1:0:1:445D:453:1:C00000:0:0:0: -#SERVICE 1:0:1:445E:453:1:C00000:0:0:0: -#SERVICE 1:0:1:33:21:85:C00000:0:0:0: -#SERVICE 1:0:1:701:5:85:C00000:0:0:0: -#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0: -#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0: -#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0: -#SERVICE 1:0:1:F98:454:1:C00000:0:0:0: -#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0: -#SERVICE 1:0:1:6D67:437:1:C00000:0:0:0: -#SERVICE 1:0:1:7031:41B:1:C00000:0:0:0: -#SERVICE 1:0:1:7032:41B:1:C00000:0:0:0: -#SERVICE 1:0:1:7033:41B:1:C00000:0:0:0: -#SERVICE 1:0:1:6E46:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6DCE:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6DD1:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6DCF:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0: -#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen -#DESCRIPTION Doku/Wissen/Themen -#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0: -#SERVICE 1:0:1:2775:444:1:C00000:0:0:0: -#SERVICE 1:0:1:293:5:85:C00000:0:0:0: -#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0: -#SERVICE 1:0:1:277B:444:1:C00000:0:0:0: -#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0: -#SERVICE 1:0:1:3139:459:1:C00000:0:0:0: -#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0: -#SERVICE 1:64:A:0:0:0:0:0:0:0::Sport -#DESCRIPTION Sport -#SERVICE 1:0:1:384:21:85:C00000:0:0:0: -#SERVICE 1:0:1:79E0:443:1:C00000:0:0:0: -#SERVICE 1:64:1:0:0:0:0:0:0:0::Kinder -#DESCRIPTION Kinder -#SERVICE 1:0:1:2F08:441:1:C00000:0:0:0: -#SERVICE 1:0:1:6D68:437:1:C00000:0:0:0: -#SERVICE 1:0:1:7008:436:1:C00000:0:0:0: -#SERVICE 1:0:1:6FE0:443:1:C00000:0:0:0: -#SERVICE 1:64:2:0:0:0:0:0:0:0::Nachrichten -#DESCRIPTION Nachrichten -#SERVICE 1:0:1:2F3A:441:1:C00000:0:0:0: -#SERVICE 1:0:1:445F:453:1:C00000:0:0:0: -#SERVICE 1:0:1:79F4:443:1:C00000:0:0:0: -#SERVICE 1:0:1:2753:402:1:C00000:0:0:0: -#SERVICE 1:0:1:7035:41B:1:C00000:0:0:0: -#SERVICE 1:64:3:0:0:0:0:0:0:0::Regional -#DESCRIPTION Regional -#SERVICE 1:0:1:3146:459:1:C00000:0:0:0: -#SERVICE 1:0:1:300:7:85:C00000:0:0:0: -#SERVICE 1:0:1:2778:444:1:C00000:0:0:0: -#SERVICE 1:0:1:277A:444:1:C00000:0:0:0: -#SERVICE 1:0:1:2779:444:1:C00000:0:0:0: -#SERVICE 1:0:1:2777:444:1:C00000:0:0:0: -#SERVICE 1:0:1:32D6:45D:1:C00000:0:0:0: -#SERVICE 1:0:1:277D:444:1:C00000:0:0:0: -#SERVICE 1:64:4:0:0:0:0:0:0:0::Musik -#DESCRIPTION Musik -#SERVICE 1:0:1:2774:444:1:C00000:0:0:0: -#SERVICE 1:0:1:7004:436:1:C00000:0:0:0: -#SERVICE 1:0:1:7001:436:1:C00000:0:0:0: -#SERVICE 1:0:1:6FE1:443:1:C00000:0:0:0: -#SERVICE 1:0:1:2FD:7:85:C00000:0:0:0: -#SERVICE 1:0:1:32D5:45D:1:C00000:0:0:0: -#SERVICE 1:0:1:332E:45B:1:C00000:0:0:0: -#SERVICE 1:0:1:304:5:85:C00000:0:0:0: -#SERVICE 1:0:1:702:5:85:C00000:0:0:0: -#SERVICE 1:64:5:0:0:0:0:0:0:0::Reisen -#DESCRIPTION Reisen -#SERVICE 1:0:1:20:21:85:C00000:0:0:0: -#SERVICE 1:64:9:0:0:0:0:0:0:0::Beratung -#DESCRIPTION Beratung -#SERVICE 1:0:1:295:21:85:C00000:0:0:0: -#SERVICE 1:64:6:0:0:0:0:0:0:0::Einkaufen -#DESCRIPTION Einkaufen -#SERVICE 1:0:1:301:7:85:C00000:0:0:0: -#SERVICE 1:0:1:28:21:85:C00000:0:0:0: -#SERVICE 1:0:1:79EA:443:1:C00000:0:0:0: -#SERVICE 1:0:1:2F44:454:1:C00000:0:0:0: -#SERVICE 1:0:1:3148:459:1:C00000:0:0:0: -#SERVICE 1:0:1:36:7:85:C00000:0:0:0: -#SERVICE 1:0:1:307:7:85:C00000:0:0:0: -#SERVICE 1:0:1:296:5:85:C00000:0:0:0: -#SERVICE 1:0:1:383:21:85:C00000:0:0:0: -#SERVICE 1:0:1:313C:459:1:C00000:0:0:0: -#SERVICE 1:0:1:3159:459:1:C00000:0:0:0: -#SERVICE 1:0:1:2E:21:85:C00000:0:0:0: -#SERVICE 1:0:1:381:21:85:C00000:0:0:0: -#SERVICE 1:64:7:0:0:0:0:0:0:0::High Definition -#DESCRIPTION High Definition -#SERVICE 1:0:19:2B5C:3F3:1:C00000:0:0:0: -#SERVICE 1:0:19:2B66:3F3:1:C00000:0:0:0: -#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0: -#SERVICE 1:0:19:6EEC:4B1:1:C00000:0:0:0: -#SERVICE 1:0:19:EF12:421:1:C00000:0:0:0: -#SERVICE 1:0:19:EF13:421:1:C00000:0:0:0: -#SERVICE 1:64:0:0:0:0:0:0:0:0::Alternativen -#DESCRIPTION Alternativen -#SERVICE 1:0:1:6DCB:44D:1:C00000:0:0:0: -#SERVICE 1:0:1:6E44:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6E45:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6E41:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6E40:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6E43:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6EE1:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6E2D:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6E2E:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6F46:445:1:C00000:0:0:0: -#SERVICE 1:0:1:6E47:431:1:C00000:0:0:0: -#SERVICE 1:0:1:6F76:457:1:C00000:0:0:0: -#SERVICE 1:0:1:6E92:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6E93:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6F78:457:1:C00000:0:0:0: -#SERVICE 1:0:1:6F79:457:1:C00000:0:0:0: -#SERVICE 1:0:1:6E94:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6F77:457:1:C00000:0:0:0: -#SERVICE 1:0:1:6EEB:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6E97:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6E96:4B1:1:C00000:0:0:0: -#SERVICE 1:0:1:6E95:4B1:1:C00000:0:0:0: -- cgit v1.2.3 From a1bc57b365d18ce91c63bf43db037e389bebe53b Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 22 Mar 2010 09:27:20 +0100 Subject: data/encoding.conf: set default encoding for cze/ces/slo/slk to ISO6397 --- data/encoding.conf | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'data') diff --git a/data/encoding.conf b/data/encoding.conf index 3f09b564..a3cefe6e 100644 --- a/data/encoding.conf +++ b/data/encoding.conf @@ -6,6 +6,10 @@ gre ISO8859-7 pol ISO8859-2 rus ISO8859-5 bul ISO8859-5 +cze ISO6397 +ces ISO6397 +slo ISO6397 +slk ISO6397 #Sorry for that.. in DVB Spec this is the default behavior #when no other encoding is given in dvb-texts.. #but this breaks too much providers yet.. -- cgit v1.2.3 From 1398385cff4a4fc4d770afa1e9d1f6d560431b23 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 24 Mar 2010 15:17:39 +0100 Subject: add support for event progressbar per service in channelselection default this is disabled.. you can enable it in the Usage config this fixes bug #486 (patch by Dr.Best) --- data/setup.xml | 1 + data/skin_default/Makefile.am | 1 + data/skin_default/celserviceeventprogressbar.png | Bin 0 -> 1056 bytes lib/python/Components/ServiceList.py | 29 ++++++++-- lib/python/Components/UsageConfig.py | 2 + lib/service/listboxservice.cpp | 65 ++++++++++++++++++++--- lib/service/listboxservice.h | 6 +++ 7 files changed, 93 insertions(+), 11 deletions(-) create mode 100644 data/skin_default/celserviceeventprogressbar.png mode change 100755 => 100644 lib/python/Components/ServiceList.py (limited to 'data') diff --git a/data/setup.xml b/data/setup.xml index 92bbc0f1..705eaf33 100644 --- a/data/setup.xml +++ b/data/setup.xml @@ -34,6 +34,7 @@ config.usage.on_short_powerpress config.usage.infobar_timeout config.usage.output_12V + config.usage.show_event_progress_in_servicelist config.usage.show_infobar_on_zap config.usage.show_infobar_on_skip config.usage.show_infobar_on_event_change diff --git a/data/skin_default/Makefile.am b/data/skin_default/Makefile.am index 85bb800d..6038c2e9 100755 --- a/data/skin_default/Makefile.am +++ b/data/skin_default/Makefile.am @@ -23,6 +23,7 @@ dist_install_DATA = \ b_tl.png \ b_t.png \ b_tr.png \ + celserviceeventprogressbar.png \ div-h.png \ div-v.png \ epg_more.png \ diff --git a/data/skin_default/celserviceeventprogressbar.png b/data/skin_default/celserviceeventprogressbar.png new file mode 100644 index 00000000..7bf5c658 Binary files /dev/null and b/data/skin_default/celserviceeventprogressbar.png differ diff --git a/lib/python/Components/ServiceList.py b/lib/python/Components/ServiceList.py old mode 100755 new mode 100644 index 6095812a..3452e27d --- a/lib/python/Components/ServiceList.py +++ b/lib/python/Components/ServiceList.py @@ -7,6 +7,8 @@ from Tools.LoadPixmap import LoadPixmap from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN +from Components.config import config + class ServiceList(HTMLComponent, GUIComponent): MODE_NORMAL = 0 MODE_FAVOURITES = 1 @@ -62,6 +64,18 @@ class ServiceList(HTMLComponent, GUIComponent): self.l.setColor(eListboxServiceContent.markedBackgroundSelected, parseColor(value)) elif attrib == "foregroundColorServiceNotAvail": self.l.setColor(eListboxServiceContent.serviceNotAvail, parseColor(value)) + elif attrib == "colorEventProgressbar": + self.l.setColor(eListboxServiceContent.serviceEventProgressbarColor, parseColor(value)) + elif attrib == "colorEventProgressbarSelected": + self.l.setColor(eListboxServiceContent.serviceEventProgressbarColorSelected, parseColor(value)) + elif attrib == "colorEventProgressbarBorder": + self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColor, parseColor(value)) + elif attrib == "colorEventProgressbarBorderSelected": + self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColorSelected, parseColor(value)) + elif attrib == "picServiceEventProgressbar": + pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, value)) + if pic: + self.l.setPixmap(self.l.picServiceEventProgressbar, pic) elif attrib == "serviceItemHeight": self.ItemHeight = int(value) elif attrib == "serviceNameFont": @@ -213,17 +227,24 @@ class ServiceList(HTMLComponent, GUIComponent): def setMode(self, mode): self.mode = mode + self.l.setItemHeight(self.ItemHeight) + self.l.setVisualMode(eListboxServiceContent.visModeComplex) if mode == self.MODE_NORMAL: - self.l.setItemHeight(self.ItemHeight) - self.l.setVisualMode(eListboxServiceContent.visModeComplex) + if config.usage.show_event_progress_in_servicelist.value: + self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(0, 0, 52, self.ItemHeight)) + else: + self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(0, 0, 0, 0)) self.l.setElementFont(self.l.celServiceName, self.ServiceNameFont) self.l.setElementPosition(self.l.celServiceName, eRect(0, 0, self.instance.size().width(), self.ItemHeight)) self.l.setElementFont(self.l.celServiceInfo, self.ServiceInfoFont) else: - self.l.setItemHeight(self.ItemHeight) - self.l.setVisualMode(eListboxServiceContent.visModeComplex) + if config.usage.show_event_progress_in_servicelist.value: + self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(60, 0, 52, self.ItemHeight)) + else: + self.l.setElementPosition(self.l.celServiceEventProgressbar, eRect(60, 0, 0, 0)) self.l.setElementFont(self.l.celServiceNumber, self.ServiceNumberFont) self.l.setElementPosition(self.l.celServiceNumber, eRect(0, 0, 50, self.ItemHeight)) self.l.setElementFont(self.l.celServiceName, self.ServiceNameFont) self.l.setElementPosition(self.l.celServiceName, eRect(60, 0, self.instance.size().width()-60, self.ItemHeight)) self.l.setElementFont(self.l.celServiceInfo, self.ServiceInfoFont) + diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py index 21478e90..b86c1a13 100644 --- a/lib/python/Components/UsageConfig.py +++ b/lib/python/Components/UsageConfig.py @@ -68,6 +68,8 @@ def InitUsageConfig(): ("4", "DVB-T/-C/-S"), ("5", "DVB-T/-S/-C") ]) + config.usage.show_event_progress_in_servicelist = ConfigYesNo(default = False) + config.usage.blinking_display_clock_during_recording = ConfigYesNo(default = False) config.usage.show_message_when_recording_starts = ConfigYesNo(default = True) diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index 05aaf731..faee1ee6 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -526,7 +526,9 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const ePtr service_info; m_service_center->info(*m_cursor, service_info); eServiceReference ref = *m_cursor; - bool isPlayable = !(ref.flags & eServiceReference::isDirectory || ref.flags & eServiceReference::isMarker); + bool isMarker = ref.flags & eServiceReference::isMarker; + bool isPlayable = !(ref.flags & eServiceReference::isDirectory || isMarker); + ePtr evt; if (!marked && isPlayable && service_info && m_is_playable_ignore.valid() && !service_info->isPlayable(*m_cursor, m_is_playable_ignore)) { @@ -539,7 +541,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const if (selected && local_style && local_style->m_selection) painter.blit(local_style->m_selection, offset, eRect(), gPainter::BT_ALPHATEST); - int xoffset=0; // used as offset when painting the folder/marker symbol + int xoffset=0; // used as offset when painting the folder/marker symbol or the serviceevent progress for (int e = 0; e < celElements; ++e) { @@ -583,8 +585,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const } case celServiceInfo: { - ePtr evt; - if ( isPlayable && service_info && !service_info->getEvent(*m_cursor, evt) ) + if ( isPlayable && evt ) { std::string name = evt->getEventName(); if (!name.length()) @@ -608,9 +609,9 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const { eRect bbox = para->getBoundBox(); int name_width = bbox.width()+8; - m_element_position[celServiceInfo].setLeft(area.left()+name_width); + m_element_position[celServiceInfo].setLeft(area.left()+name_width+xoffs); m_element_position[celServiceInfo].setTop(area.top()); - m_element_position[celServiceInfo].setWidth(area.width()-name_width); + m_element_position[celServiceInfo].setWidth(area.width()-(name_width+xoffs)); m_element_position[celServiceInfo].setHeight(area.height()); } @@ -678,8 +679,58 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const painter.clippop(); } } + else if (e == celServiceEventProgressbar) + { + int p = celServiceEventProgressbar; + eRect area = m_element_position[p]; + if (area.width() > 0 && (isPlayable || isMarker)) + { + + if ( isPlayable && service_info && !service_info->getEvent(*m_cursor, evt) ) + { + if (!selected && m_color_set[serviceEventProgressbarBorderColor]) + painter.setForegroundColor(m_color[serviceEventProgressbarBorderColor]); + else if (selected && m_color_set[serviceEventProgressbarBorderColorSelected]) + painter.setForegroundColor(m_color[serviceEventProgressbarBorderColorSelected]); + + int border = 1; + int progressH = 6; + int progressX = area.left() + offset.x(); + int progressW = area.width() - 2 * border; + int progressT = offset.y() + (m_itemsize.height() - progressH - 2*border) / 2; + + // paint progressbar frame + painter.fill(eRect(progressX, progressT, area.width(), border)); + painter.fill(eRect(progressX, progressT + border, border, progressH)); + painter.fill(eRect(progressX, progressT + progressH + border, area.width(), border)); + painter.fill(eRect(progressX + area.width() - border, progressT + border, border, progressH)); + + // calculate value + time_t now = time(0); + int value = progressW * (now - evt->getBeginTime()) / evt->getDuration(); + + eRect tmp = eRect(progressX + border, progressT + border, value, progressH); + ePtr &pixmap = m_pixmaps[picServiceEventProgressbar]; + if (pixmap) + { + area.moveBy(offset); + painter.clip(area); + painter.blit(pixmap, ePoint(progressX + border, progressT + border), tmp, gPainter::BT_ALPHATEST); + painter.clippop(); + } + else + { + if (!selected && m_color_set[serviceEventProgressbarColor]) + painter.setForegroundColor(m_color[serviceEventProgressbarColor]); + else if (selected && m_color_set[serviceEventProgressbarColorSelected]) + painter.setForegroundColor(m_color[serviceEventProgressbarColorSelected]); + painter.fill(tmp); + } + } + xoffset = area.width() + 10; + } + } } - if (selected && (!local_style || !local_style->m_selection)) style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry); } diff --git a/lib/service/listboxservice.h b/lib/service/listboxservice.h index 5228a2f2..982d7e14 100644 --- a/lib/service/listboxservice.h +++ b/lib/service/listboxservice.h @@ -49,6 +49,7 @@ public: celServiceNumber, celMarkerPixmap, celFolderPixmap, + celServiceEventProgressbar, celServiceName, celServiceTypePixmap, celServiceInfo, // "now" event @@ -62,6 +63,7 @@ public: picServiceGroup, picFolder, picMarker, + picServiceEventProgressbar, picElements }; @@ -84,6 +86,10 @@ public: markedBackground, markedBackgroundSelected, serviceNotAvail, + serviceEventProgressbarColor, + serviceEventProgressbarColorSelected, + serviceEventProgressbarBorderColor, + serviceEventProgressbarBorderColorSelected, colorElements }; -- cgit v1.2.3