1 # -*- coding: UTF-8 -*-
2 ## Zap-History Browser by AliAbdul
3 from Components.ActionMap import ActionMap
4 from Components.config import config, ConfigInteger, ConfigSelection, ConfigSubsection, getConfigListEntry
5 from Components.ConfigList import ConfigListScreen
6 from Components.Label import Label
7 from Components.Language import language
8 from Components.MenuList import MenuList
9 from Components.MultiContent import MultiContentEntryText
10 from enigma import eListboxPythonMultiContent, eServiceCenter, gFont
11 from os import environ
12 from Plugins.Plugin import PluginDescriptor
13 from Screens.ChannelSelection import ChannelSelection
14 from Screens.Screen import Screen
15 from Tools.Directories import resolveFilename, SCOPE_LANGUAGE, SCOPE_PLUGINS
18 ################################################
21 lang = language.getLanguage()
22 environ["LANGUAGE"] = lang[:2]
\r
23 gettext.bindtextdomain("enigma2", resolveFilename(SCOPE_LANGUAGE))
\r
24 gettext.textdomain("enigma2")
25 gettext.bindtextdomain("ZapHistoryBrowser", "%s%s" % (resolveFilename(SCOPE_PLUGINS), "Extensions/ZapHistoryBrowser/locale/"))
28 t = gettext.dgettext("ZapHistoryBrowser", txt)
\r
30 t = gettext.gettext(txt)
\r
34 language.addCallback(localeInit)
36 ################################################
38 config.plugins.ZapHistoryConfigurator = ConfigSubsection()
39 config.plugins.ZapHistoryConfigurator.enable_zap_history = ConfigSelection(choices = {"off": _("disabled"), "on": _("enabled"), "parental_lock": _("disabled at parental lock")}, default="on")
40 config.plugins.ZapHistoryConfigurator.maxEntries_zap_history = ConfigInteger(default=20, limits=(1, 60))
42 ################################################
44 def addToHistory(instance, ref):
45 if config.plugins.ZapHistoryConfigurator.enable_zap_history.value == "off":
47 if config.ParentalControl.configured.value and config.plugins.ZapHistoryConfigurator.enable_zap_history.value == "parental_lock":
48 if parentalControl.getProtectionLevel(ref.toCompareString()) != -1:
50 if instance.servicePath is not None:
51 tmp = instance.servicePath[:]
53 try: del instance.history[instance.history_pos+1:]
55 instance.history.append(tmp)
56 hlen = len(instance.history)
57 if hlen > config.plugins.ZapHistoryConfigurator.maxEntries_zap_history.value:
58 del instance.history[0]
60 instance.history_pos = hlen-1
62 ChannelSelection.addToHistory = addToHistory
64 ################################################
66 class ZapHistoryConfigurator(ConfigListScreen, Screen):
68 <screen position="center,center" size="420,70" title="%s" >
69 <widget name="config" position="0,0" size="420,70" scrollbarMode="showOnDemand" />
70 </screen>""" % _("Zap-History Configurator")
72 def __init__(self, session):
73 Screen.__init__(self, session)
74 self.session = session
76 ConfigListScreen.__init__(self, [
77 getConfigListEntry(_("Enable zap history:"), config.plugins.ZapHistoryConfigurator.enable_zap_history),
78 getConfigListEntry(_("Maximum zap history entries:"), config.plugins.ZapHistoryConfigurator.maxEntries_zap_history)])
80 self["actions"] = ActionMap(["OkCancelActions"], {"ok": self.save, "cancel": self.exit}, -2)
83 for x in self["config"].list:
88 for x in self["config"].list:
92 ################################################
94 class ZapHistoryBrowserList(MenuList):
95 def __init__(self, list, enableWrapAround=False):
96 MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent)
97 self.l.setItemHeight(40)
98 self.l.setFont(0, gFont("Regular", 20))
99 self.l.setFont(1, gFont("Regular", 18))
101 def ZapHistoryBrowserListEntry(serviceName, eventName):
103 res.append(MultiContentEntryText(pos=(0, 0), size=(560, 22), font=0, text=serviceName))
104 res.append(MultiContentEntryText(pos=(0, 22), size=(560, 18), font=1, text=eventName))
107 ################################################
109 class ZapHistoryBrowser(Screen):
111 <screen position="center,center" size="560,440" title="%s" >
112 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
113 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
114 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
115 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
116 <widget name="key_red" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
117 <widget name="key_green" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
118 <widget name="key_yellow" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
119 <widget name="key_blue" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
120 <widget name="list" position="0,40" size="560,400" scrollbarMode="showOnDemand" />
121 </screen>""" % _("Zap-History Browser")
123 def __init__(self, session, servicelist):
124 Screen.__init__(self, session)
125 self.session = session
127 self.servicelist = servicelist
128 self.serviceHandler = eServiceCenter.getInstance()
130 self["list"] = ZapHistoryBrowserList([])
131 self["key_red"] = Label(_("Clear"))
132 self["key_green"] = Label(_("Delete"))
133 self["key_yellow"] = Label(_("Zap & Close"))
134 self["key_blue"] = Label(_("Config"))
136 self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
139 "cancel": self.close,
141 "green": self.delete,
142 "yellow": self.zapAndClose,
146 self.onLayoutFinish.append(self.buildList)
150 for x in self.servicelist.history:
151 if len(x) == 2: # Single-Bouquet
153 else: # Multi-Bouquet
155 info = self.serviceHandler.info(ref)
156 name = info.getName(ref).replace('\xc2\x86', '').replace('\xc2\x87', '')
157 event = info.getEvent(ref)
158 if event is not None:
159 eventName = event.getEventName()
160 if eventName is None:
164 list.append(ZapHistoryBrowserListEntry(name, eventName))
166 self["list"].setList(list)
169 length = len(self.servicelist.history)
171 self.servicelist.history_pos = (length - self["list"].getSelectionIndex()) - 1
172 self.servicelist.setHistoryPath()
175 for i in range(0, len(self.servicelist.history)):
176 del self.servicelist.history[0]
178 self.servicelist.history_pos = 0
181 length = len(self.servicelist.history)
183 idx = (length - self["list"].getSelectionIndex()) - 1
184 del self.servicelist.history[idx]
187 # We must check if the current service is still in the zap-history
188 currRef = self.session.nav.getCurrentlyPlayingServiceReference()
190 for x in self.servicelist.history:
191 if len(x) == 2: # Single-Bouquet
193 else: # Multi-Bouquet
197 self.servicelist.history_pos = idx
202 def zapAndClose(self):
207 self.session.open(ZapHistoryConfigurator)
209 ################################################
211 def main(session, servicelist, **kwargs):
212 session.open(ZapHistoryBrowser, servicelist)
214 def Plugins(**kwargs):
215 return PluginDescriptor(name=_("Zap-History Browser"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, fnc=main)