From e63586af0f2e8acf5a0972ae1993c039edcd901e Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 2 Mar 2009 17:17:06 +0100 Subject: replace EOF magic by a slightly more accurate PVR EOF. --- lib/python/Screens/InfoBarGenerics.py | 58 ++++------------------------------- 1 file changed, 6 insertions(+), 52 deletions(-) (limited to 'lib/python') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index e39e028d..71e08327 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -623,11 +623,6 @@ class InfoBarSeek: iPlayableService.evEOF: self.__evEOF, iPlayableService.evSOF: self.__evSOF, }) - self.eofState = 0 - self.eofTimer = eTimer() - self.eofTimer.timeout.get().append(self.doEof) - self.eofInhibitTimer = eTimer() - self.eofInhibitTimer.timeout.get().append(self.inhibitEof) self.minSpeedBackward = useSeekBackHack and 16 or 0 @@ -763,9 +758,6 @@ class InfoBarSeek: def __serviceStarted(self): self.seekstate = self.SEEK_STATE_PLAY self.__seekableStatusChanged() - if self.eofState != 0: - self.eofTimer.stop() - self.eofState = 0 def setSeekState(self, state): service = self.session.nav.getCurrentService() @@ -827,16 +819,6 @@ class InfoBarSeek: seekable = self.getSeek() if seekable is None: return - prevstate = self.seekstate - if self.eofState == 1: - self.eofState = 2 - self.inhibitEof() - if self.seekstate == self.SEEK_STATE_EOF: - if prevstate == self.SEEK_STATE_PAUSE: - self.setSeekState(self.SEEK_STATE_PAUSE) - else: - self.setSeekState(self.SEEK_STATE_PLAY) - self.eofInhibitTimer.start(200, True) seekable.seekTo(pts) def doSeekRelative(self, pts): @@ -844,15 +826,12 @@ class InfoBarSeek: if seekable is None: return prevstate = self.seekstate - if self.eofState == 1: - self.eofState = 2 - self.inhibitEof() + if self.seekstate == self.SEEK_STATE_EOF: if prevstate == self.SEEK_STATE_PAUSE: self.setSeekState(self.SEEK_STATE_PAUSE) else: self.setSeekState(self.SEEK_STATE_PLAY) - self.eofInhibitTimer.start(200, True) seekable.seekRelative(pts<0 and -1 or 1, abs(pts)) if abs(pts) > 100 and config.usage.show_infobar_on_skip.value: self.showAfterSeek() @@ -964,44 +943,19 @@ class InfoBarSeek: return False def __evEOF(self): - if self.eofState == 0 and self.seekstate != self.SEEK_STATE_EOF: - self.eofState = 1 - time = self.calcRemainingTime() - if not time: - time = 3000 # Failed to calc, use default - elif time == 0: - time = 300 # Passed end, shortest wait - elif time > 15000: - self.eofState = -2 # Too long, block eof - time = 15000 - else: - time += 1000 # Add margin - self.eofTimer.start(time, True) - - def inhibitEof(self): - if self.eofState >= 1: - self.eofState = -self.eofState - self.eofTimer.stop() - self.doEof() - - def doEof(self): if self.seekstate == self.SEEK_STATE_EOF: return - if self.eofState == -2 or self.isStateBackward(self.seekstate): - self.eofState = 0 - return - # if we are seeking, we try to end up ~1s before the end, and pause there. - eofstate = self.eofState + # if we are seeking forward, we try to end up ~1s before the end, and pause there. seekstate = self.seekstate - self.eofState = 0 - if not self.seekstate == self.SEEK_STATE_PAUSE: + if self.seekstate != self.SEEK_STATE_PAUSE: self.setSeekState(self.SEEK_STATE_EOF) - if eofstate == -1 or not seekstate in (self.SEEK_STATE_PLAY, self.SEEK_STATE_PAUSE): + + if seekstate not in (self.SEEK_STATE_PLAY, self.SEEK_STATE_PAUSE): # if we are seeking seekable = self.getSeek() if seekable is not None: seekable.seekTo(-1) - if eofstate == 1 and seekstate == self.SEEK_STATE_PLAY: + if seekstate == self.SEEK_STATE_PLAY: # regular EOF self.doEofInternal(True) else: self.doEofInternal(False) -- cgit v1.2.3 From 8d2545bc513280abe52d9c0fc2b704de3729a11e Mon Sep 17 00:00:00 2001 From: Fraxinas Date: Mon, 2 Mar 2009 17:28:35 +0100 Subject: listen to hotplug event when dvd is inserted or ejected and modify EXIT menu accordingly --- lib/python/Plugins/Extensions/DVDPlayer/plugin.py | 78 ++++++++++++++--------- 1 file changed, 48 insertions(+), 30 deletions(-) (limited to 'lib/python') diff --git a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py index 6a8ffc6f..ce2e5938 100644 --- a/lib/python/Plugins/Extensions/DVDPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/DVDPlayer/plugin.py @@ -14,6 +14,7 @@ from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase from Components.config import config from Tools.Directories import pathExists, fileExists from Components.Harddisk import harddiskmanager +from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier import servicedvd # load c++ part of dvd player plugin @@ -345,28 +346,15 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP }) self.onClose.append(self.__onClose) - self.physicalDVD = False - self.dvd_device = None + hotplugNotifier.append(self.hotplugCB) + if dvd_device: - self.dvd_device = dvd_device - self.physicalDVD = True + self.physicalDVD = True else: - devicepath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()) - if pathExists(devicepath): - from Components.Scanner import scanDevice - res = scanDevice(devicepath) - list = [ (r.description, r, res[r], self.session) for r in res ] - if list: - (desc, scanner, files, session) = list[0] - for file in files: - print file - if file.mimetype == "video/x-dvd": - self.dvd_device = devicepath - print "physical dvd found:", self.dvd_device - self.physicalDVD = True + self.scanHotplug() self.dvd_filelist = dvd_filelist - self.onFirstExecBegin.append(self.showFileBrowser) + self.onFirstExecBegin.append(self.opened) self.service = None self.in_menu = False @@ -513,6 +501,8 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP choices = [(_("Exit"), "exit"), (_("Continue playing"), "play")] if True or not self.physicalDVD: choices.insert(1,(_("Return to file browser"), "browser")) + if self.physicalDVD and not self.session.nav.getCurrentlyPlayingServiceReference().toString().endswith(harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())): + choices.insert(0,(_("Play DVD"), "playPhysical" )) self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices) def sendKey(self, key): @@ -581,23 +571,22 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP def keyCancel(self): self.askLeavePlayer() - def showFileBrowser(self): - if self.physicalDVD and len(self.dvd_filelist) == 0: - if self.dvd_device == harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()): - self.session.openWithCallback(self.DVDdriveCB, MessageBox, text=_("Do you want to play DVD in drive?"), timeout=5 ) - else: - self.DVDdriveCB(True) - elif len(self.dvd_filelist) == 1: + def opened(self): + if len(self.dvd_filelist) == 1: + # opened via autoplay self.FileBrowserClosed(self.dvd_filelist[0]) + elif self.physicalDVD: + # opened from menu with dvd in drive + self.session.openWithCallback(self.playPhysicalCB, MessageBox, text=_("Do you want to play DVD in drive?"), timeout=5 ) else: + # opened from menu without dvd in drive self.session.openWithCallback(self.FileBrowserClosed, FileBrowser, self.dvd_filelist) - - def DVDdriveCB(self, answer): + + def playPhysicalCB(self, answer): if answer == True: - self.FileBrowserClosed(self.dvd_device) + self.FileBrowserClosed(harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD())) else: self.session.openWithCallback(self.FileBrowserClosed, FileBrowser) - self.physicalDVD = False def FileBrowserClosed(self, val): curref = self.session.nav.getCurrentlyPlayingServiceReference() @@ -627,13 +616,18 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP #else if self.service: self.service = None - self.showFileBrowser() + self.session.openWithCallback(self.FileBrowserClosed, FileBrowser) + if answer[1] == "playPhysical": + if self.service: + self.service = None + self.playPhysicalCB(True) else: pass def __onClose(self): self.restore_infobar_seek_config() self.session.nav.playService(self.oldService) + hotplugNotifier.remove(self.hotplugCB) def playLastCB(self, answer): # overwrite infobar cuesheet function print "playLastCB", answer, self.resume_point @@ -660,6 +654,30 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP def calcRemainingTime(self): return 0 + def hotplugCB(self, dev, media_state): + print "[hotplugCB]", dev, media_state + if dev == harddiskmanager.getCD(): + if media_state == "1": + self.scanHotplug() + else: + self.physicalDVD = False + + def scanHotplug(self): + devicepath = harddiskmanager.getAutofsMountpoint(harddiskmanager.getCD()) + if pathExists(devicepath): + from Components.Scanner import scanDevice + res = scanDevice(devicepath) + list = [ (r.description, r, res[r], self.session) for r in res ] + if list: + (desc, scanner, files, session) = list[0] + for file in files: + print file + if file.mimetype == "video/x-dvd": + print "physical dvd found:", devicepath + self.physicalDVD = True + return + self.physicalDVD = False + def main(session, **kwargs): session.open(DVDPlayer) -- cgit v1.2.3 From 661a33ebe19d4341a8f1657ad0f403a9a7ac0f6b Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 2 Mar 2009 17:34:15 +0100 Subject: media player cosmetical changes, thanks to kerni --- lib/python/Components/MediaPlayer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/python') diff --git a/lib/python/Components/MediaPlayer.py b/lib/python/Components/MediaPlayer.py index 87ba977c..12f2727f 100644 --- a/lib/python/Components/MediaPlayer.py +++ b/lib/python/Components/MediaPlayer.py @@ -25,7 +25,7 @@ def PlaylistEntryComponent(serviceref, state): text = serviceref.getName() if text is "": text = path.split(serviceref.getPath().split('/')[-1])[1] - res.append((eListboxPythonMultiContent.TYPE_TEXT,25, 0, 470, 32, 0, RT_VALIGN_CENTER, text)) + res.append((eListboxPythonMultiContent.TYPE_TEXT,25, 1, 470, 22, 0, RT_VALIGN_CENTER, text)) png = None if state == STATE_PLAY: png = PlayIcon @@ -39,7 +39,7 @@ def PlaylistEntryComponent(serviceref, state): png = ForwardIcon if png is not None: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 5, 0, 16, 16, png)) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 5, 3, 16, 16, png)) return res @@ -47,7 +47,7 @@ class PlayList(MenuList): def __init__(self, enableWrapAround = False): MenuList.__init__(self, [], enableWrapAround, eListboxPythonMultiContent) self.l.setFont(0, gFont("Regular", 18)) - self.l.setItemHeight(22) + self.l.setItemHeight(23) self.currPlaying = -1 self.oldCurrPlaying = -1 self.serviceHandler = eServiceCenter.getInstance() -- cgit v1.2.3