--- /dev/null
+from Screens.PictureInPicture import PictureInPicture
+from Components.SystemInfo import SystemInfo
+
+class BackgroundAdapter:
+ def __init__(self, session):
+ if SystemInfo.get("NumVideoDecoders", 1) < 2:
+ self.pipAvail = False
+ return
+
+ self.session = session
+ self.pipAvail = True
+ if session.pipshown:
+ # Hijack PiP
+ self.wasShown = True
+ self.previousService = self.session.pip.getCurrentService()
+ self.previousPath = self.session.pip.servicePath
+ else:
+ self.wasShown = False
+ self.initPiP()
+
+ def initPiP(self):
+ # Instantiate PiP
+ self.session.pip = self.session.instantiateDialog(PictureInPicture)
+ self.session.pip.show()
+ self.session.pipshown = True # Always pretends it's shown (since the ressources are present)
+ newservice = self.session.nav.getCurrentlyPlayingServiceReference()
+ if self.session.pip.playService(newservice):
+ self.session.pip.servicePath = newservice.getPath()
+
+ def play(self, service):
+ print "[EPGRefresh.BackgroundAdapter.play]"
+ if not self.pipAvail: return False
+
+ if not self.session.pipshown: # make sure pip still exists
+ self.initPiP()
+
+ if self.session.pip.playService(service):
+ self.session.pip.servicePath = service.getPath()
+ return True
+ return False
+
+ def stop(self):
+ if not self.pipAvail: return
+
+ if self.wasShown:
+ # reset pip and remove it if unable to play service
+ if self.session.pipshown and self.session.pip.playService(self.previousService):
+ self.session.pip.servicePath = self.previousPath
+ else:
+ self.session.pipshown = False
+ del self.session.pip
+ else:
+ # remove pip
+ self.session.pipshown = False
+ try: del self.session.pip
+ except Exception: pass
+
# Configuration
from Components.config import config
+# ... II
+from MainPictureAdapter import MainPictureAdapter
+from BackgroundAdapter import BackgroundAdapter
+
# Path to configuration
CONFIG = "/etc/enigma2/epgrefresh.xml"
def __init__(self):
# Initialize
self.services = (set(), set())
- self.previousService = None
self.forcedScan = False
self.session = None
self.beginOfTimespan = 0
def prepareRefresh(self):
print "[EPGRefresh] About to start refreshing EPG"
- # Keep service
- self.previousService = self.session.nav.getCurrentlyPlayingServiceReference()
-
# Maybe read in configuration
try:
self.readConfiguration()
# Debug
#print "[EPGRefresh] Services we're going to scan:", ', '.join([repr(x) for x in scanServices])
+ if config.plugins.epgrefresh.background.value:
+ self.refreshAdapter = BackgroundAdapter(self.session)
+ else:
+ self.refreshAdapter = MainPictureAdapter(self.session)
+
self.scanServices = scanServices
self.refresh()
self.forcedScan = False
epgrefreshtimer.cleanup()
-
- # Zap back
- if self.previousService is not None or Screens.Standby.inStandby:
- self.session.nav.playService(self.previousService)
+ self.refreshAdapter.stop()
def refresh(self):
if self.forcedScan:
self.cleanUp()
else:
# Play next service
- self.session.nav.playService(eServiceReference(service.sref))
+ # XXX: we might want to check the return value
+ self.refreshAdapter.play(eServiceReference(service.sref))
# Start Timer
delay = service.duration or config.plugins.epgrefresh.interval.value
from Components.config import config, getConfigListEntry
from EPGRefresh import epgrefresh
+from Components.SystemInfo import SystemInfo
class EPGRefreshConfiguration(Screen, ConfigListScreen):
"""Configuration of EPGRefresh"""
getConfigListEntry(_("Make AutoTimer parse EPG if available"), config.plugins.epgrefresh.parse_autotimer, _("If you're also using the AutoTimer plugin this will initiate a scan of the EPG after a completed refresh.")),
getConfigListEntry(_("Shutdown after refresh"), config.plugins.epgrefresh.afterevent, _("This setting controls if the receiver should be sent to deep-standby after a completed refresh.")),
]
+ if SystemInfo.get("NumVideoDecoders", 1) > 1:
+ self.list.insert(1, getConfigListEntry(_("Refresh in Background"), config.plugins.epgrefresh.background, _("Use Picture In Picture to refresh EPG?")))
ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changed)
self["config"].onSelectionChanged.append(self.updateHelp)
--- /dev/null
+import Screens.Standby
+
+class MainPictureAdapter:
+ def __init__(self, session):
+ self.session = session
+ self.previousService = session.nav.getCurrentlyPlayingServiceReference()
+
+ def play(self, service):
+ print "[EPGRefresh.MainPictureAdapter.play]"
+ return self.session.nav.playService(service)
+
+ def stop(self):
+ if self.previousService is not None or Screens.Standby.inStandby:
+ self.session.nav.playService(self.previousService)
+
# Config
from Components.config import config, ConfigYesNo, ConfigNumber, \
- ConfigSubsection, ConfigClock
+ ConfigSubsection, ConfigClock, ConfigYesNo
# Calculate default begin/end
from time import time, localtime, mktime
config.plugins.epgrefresh.wakeup = ConfigYesNo(default = False)
config.plugins.epgrefresh.lastscan = ConfigNumber(default = 0)
config.plugins.epgrefresh.parse_autotimer = ConfigYesNo(default = False)
+config.plugins.epgrefresh.background = ConfigYesNo(default = False)
del now, begin, end