from os import path as os_path, remove as os_remove, listdir as os_listdir, system
-from enigma import eTimer, iPlayableService, iServiceInformation, eServiceReference, iServiceKeys
+from enigma import eTimer, iPlayableService, iServiceInformation, eServiceReference, iServiceKeys, getDesktop
from Screens.Screen import Screen
from Screens.MessageBox import MessageBox
from Screens.ChoiceBox import ChoiceBox
from Screens.InfoBarGenerics import InfoBarSeek, InfoBarPVRState, InfoBarCueSheetSupport, InfoBarShowHide, InfoBarNotifications
from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
from Components.Label import Label
+from Components.Sources.StaticText import StaticText
+from Components.Pixmap import Pixmap
from Components.FileList import FileList
from Components.MenuList import MenuList
from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
from Components.config import config
from Tools.Directories import pathExists, fileExists
+from Components.Harddisk import harddiskmanager
import servicedvd # load c++ part of dvd player plugin
lastpath = ""
class FileBrowser(Screen):
- skin = """
- <screen name="FileBrowser" position="100,100" size="520,376" title="DVD File Browser" >
- <widget name="filelist" position="0,0" size="520,376" scrollbarMode="showOnDemand" />
- </screen>"""
- def __init__(self, session, dvd_filelist = None):
+
+ def __init__(self, session, dvd_filelist = [ ]):
Screen.__init__(self, session)
- if dvd_filelist:
- self.dvd_filelist = dvd_filelist
- self["filelist"] = MenuList(self.dvd_filelist)
+ # for the skin: first try FileBrowser_DVDPlayer, then FileBrowser, this allows individual skinning
+ self.skinName = ["FileBrowser_DVDPlayer", "FileBrowser" ]
+ self.dvd_filelist = dvd_filelist
+ if len(dvd_filelist):
+ self["filelist"] = MenuList(self.dvd_filelist)
else:
- self.dvd_filelist = None
global lastpath
if lastpath is not None:
currDir = lastpath + "/"
currDir = "/media/dvd/"
if not pathExists(currDir):
currDir = "/"
+ if lastpath == "": # 'None' is magic to start at the list of mountpoints
+ currDir = None
+ inhibitDirs = ["/bin", "/boot", "/dev", "/etc", "/home", "/lib", "/proc", "/sbin", "/share", "/sys", "/tmp", "/usr", "/var"]
self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(iso)", useServiceRef = True)
self["filelist"] = self.filelist
- self["FilelistActions"] = ActionMap(["OkCancelActions"],
+ self["FilelistActions"] = ActionMap(["SetupActions"],
{
+ "save": self.ok,
"ok": self.ok,
"cancel": self.exit
})
+ self["key_red"] = StaticText(_("Cancel"))
+ self["key_green"] = StaticText(_("OK"))
+ self.onLayoutFinish.append(self.layoutFinished)
+
+ def layoutFinished(self):
+ self.setTitle(_("DVD File Browser"))
def ok(self):
- if self.dvd_filelist:
+ if len(self.dvd_filelist):
print "OK " + self["filelist"].getCurrent()
self.close(self["filelist"].getCurrent())
else:
global lastpath
filename = self["filelist"].getFilename()
if filename is not None:
- lastpath = filename[0:filename.rfind("/")]
if filename.upper().endswith("VIDEO_TS/"):
print "dvd structure found, trying to open..."
- self.close(filename[0:-9])
+ dvdpath = filename[0:-9]
+ lastpath = (dvdpath.rstrip("/").rsplit("/",1))[0]
+ print "lastpath video_ts/=", lastpath
+ self.close(dvdpath)
+ return
if self["filelist"].canDescent(): # isDir
self["filelist"].descent()
pathname = self["filelist"].getCurrentDirectory() or ""
if fileExists(pathname+"VIDEO_TS.IFO"):
print "dvd structure found, trying to open..."
+ lastpath = (pathname.rstrip("/").rsplit("/",1))[0]
+ print "lastpath video_ts.ifo=", lastpath
+ self.close(pathname)
+ if fileExists(pathname+"VIDEO_TS/VIDEO_TS.IFO"):
+ print "dvd structure found, trying to open..."
+ lastpath = (pathname.rstrip("/").rsplit("/",1))[0]
+ print "lastpath video_ts.ifo=", lastpath
+ pathname += "VIDEO_TS"
self.close(pathname)
else:
+ lastpath = filename[0:filename.rfind("/")]
+ print "lastpath directory=", lastpath
self.close(filename)
def exit(self):
self.close(None)
class DVDSummary(Screen):
- skin = """
- <screen position="0,0" size="132,64">
+ skin = (
+ """<screen name="DVDSummary" position="0,0" size="132,64" id="1">
<widget source="session.CurrentService" render="Label" position="5,4" size="120,28" font="Regular;12" transparent="1" >
<convert type="ServiceName">Name</convert>
</widget>
- <widget name="DVDPlayer" position="5,30" size="66,16" font="Regular;12" transparent="1" />
+ <widget name="DVDPlayer" position="5,30" size="66,16" font="Regular;11" transparent="1" />
<widget name="Chapter" position="72,30" size="54,16" font="Regular;12" transparent="1" halign="right" />
<widget source="session.CurrentService" render="Label" position="66,46" size="60,18" font="Regular;16" transparent="1" halign="right" >
<convert type="ServicePosition">Position</convert>
<widget source="session.CurrentService" render="Progress" position="6,46" size="60,18" borderWidth="1" >
<convert type="ServicePosition">Position</convert>
</widget>
- </screen>"""
+ </screen>""",
+ """<screen name="DVDSummary" position="0,0" size="96,64" id="2">
+ <widget source="session.CurrentService" render="Label" position="0,0" size="96,25" font="Regular;12" transparent="1" >
+ <convert type="ServiceName">Name</convert>
+ </widget>
+ <widget name="DVDPlayer" position="0,26" size="96,12" font="Regular;10" transparent="1" />
+ <widget name="Chapter" position="0,40" size="66,12" font="Regular;10" transparent="1" halign="left" />
+ <widget source="session.CurrentService" render="Label" position="66,40" size="30,12" font="Regular;10" transparent="1" halign="right" >
+ <convert type="ServicePosition">Position</convert>
+ </widget>
+ <widget source="session.CurrentService" render="Progress" position="0,52" size="96,12" borderWidth="1" >
+ <convert type="ServicePosition">Position</convert>
+ </widget>
+ </screen>""")
def __init__(self, session, parent):
Screen.__init__(self, session, parent)
self["Title"].setText(title)
class DVDOverlay(Screen):
- skin = """<screen name="DVDOverlay" position="0,0" size="720,576" flags="wfNoBorder" zPosition="-1" backgroundColor="transparent" />"""
def __init__(self, session, args = None):
+ desktop_size = getDesktop(0).size()
+ DVDOverlay.skin = """<screen name="DVDOverlay" position="0,0" size="%d,%d" flags="wfNoBorder" zPosition="-1" backgroundColor="transparent" />""" %(desktop_size.width(), desktop_size.height())
Screen.__init__(self, session)
-
+
class ChapterZap(Screen):
skin = """
<screen name="ChapterZap" position="235,255" size="250,60" title="Chapter" >
self.Timer.start(3000, True)
class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarPVRState, InfoBarShowHide, HelpableScreen, InfoBarCueSheetSupport):
-# ALLOW_SUSPEND = True
+ ALLOW_SUSPEND = Screen.SUSPEND_PAUSES
ENABLE_RESUME_SUPPORT = True
skin = """
<!-- Chapter info -->
<widget name="chapterLabel" position="230,96" size="360,22" font="Regular;20" foregroundColor="#c3c3c9" backgroundColor="#263c59" transparent="1" />
<!-- Audio track info -->
- <ePixmap pixmap="skin_default/icons/icon_dolby.png" position="540,73" zPosition="1" size="26,16" alphatest="on"/>
- <widget name="audioLabel" position="570,73" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+ <ePixmap pixmap="skin_default/icons/icon_dolby.png" position="540,60" zPosition="1" size="26,16" alphatest="on"/>
+ <widget name="audioLabel" position="570,60" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
<!-- Subtitle track info -->
- <widget source="session.CurrentService" render="Pixmap" pixmap="skin_default/icons/icon_txt.png" position="540,96" zPosition="1" size="26,16" alphatest="on" >
+ <widget source="session.CurrentService" render="Pixmap" pixmap="skin_default/icons/icon_txt.png" position="540,83" zPosition="1" size="26,16" alphatest="on" >
<convert type="ServiceInfo">HasTelext</convert>
<convert type="ConditionalShowHide" />
</widget>
- <widget name="subtitleLabel" position="570,96" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+ <widget name="subtitleLabel" position="570,83" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
+ <!-- Angle info -->
+ <widget name="anglePix" pixmap="skin_default/icons/icon_view.png" position="540,106" size="26,16" alphatest="on" />
+ <widget name="angleLabel" position="570,106" size="130,22" font="Regular;18" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" />
<!-- Elapsed time -->
<widget source="session.CurrentService" render="Label" position="205,129" size="100,20" font="Regular;18" halign="center" valign="center" backgroundColor="#06224f" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
<convert type="ServicePosition">Position,ShowHours</convert>
self.saved_config_speeds_backward = config.seek.speeds_backward.value
self.saved_config_enter_forward = config.seek.enter_forward.value
self.saved_config_enter_backward = config.seek.enter_backward.value
- self.saved_config_seek_stepwise_minspeed = config.seek.stepwise_minspeed.value
- self.saved_config_seek_stepwise_repeat = config.seek.stepwise_repeat.value
self.saved_config_seek_on_pause = config.seek.on_pause.value
self.saved_config_seek_speeds_slowmotion = config.seek.speeds_slowmotion.value
config.seek.speeds_slowmotion.value = [ ]
config.seek.enter_forward.value = "2"
config.seek.enter_backward.value = "2"
- config.seek.stepwise_minspeed.value = "Never"
- config.seek.stepwise_repeat.value = "3"
config.seek.on_pause.value = "play"
def restore_infobar_seek_config(self):
config.seek.speeds_slowmotion.value = self.saved_config_seek_speeds_slowmotion
config.seek.enter_forward.value = self.saved_config_enter_forward
config.seek.enter_backward.value = self.saved_config_enter_backward
- config.seek.stepwise_minspeed.value = self.saved_config_seek_stepwise_minspeed
- config.seek.stepwise_repeat.value = self.saved_config_seek_stepwise_repeat
config.seek.on_pause.value = self.saved_config_seek_on_pause
- def __init__(self, session, dvd_device = None, dvd_filelist = None, args = None):
+ def __init__(self, session, dvd_device = None, dvd_filelist = [ ], args = None):
Screen.__init__(self, session)
InfoBarBase.__init__(self)
InfoBarNotifications.__init__(self)
HelpableScreen.__init__(self)
self.save_infobar_seek_config()
self.change_infobar_seek_config()
- InfoBarSeek.__init__(self, useSeekBackHack=False)
+ InfoBarSeek.__init__(self)
InfoBarPVRState.__init__(self)
self.dvdScreen = self.session.instantiateDialog(DVDOverlay)
self.session.nav.stopService()
self["audioLabel"] = Label("n/a")
self["subtitleLabel"] = Label("")
+ self["angleLabel"] = Label("")
self["chapterLabel"] = Label("")
+ self["anglePix"] = Pixmap()
+ self["anglePix"].hide()
self.last_audioTuple = None
self.last_subtitleTuple = None
+ self.last_angleTuple = None
self.totalChapters = 0
self.currentChapter = 0
self.totalTitles = 0
iPlayableService.evUser+8: self.__chapterUpdated,
iPlayableService.evUser+9: self.__titleUpdated,
iPlayableService.evUser+11: self.__menuOpened,
- iPlayableService.evUser+12: self.__menuClosed
+ iPlayableService.evUser+12: self.__menuClosed,
+ iPlayableService.evUser+13: self.__osdAngleInfoAvail
})
- self["DVDPlayerDirectionActions"] = HelpableActionMap(self, "DirectionActions",
+ self["DVDPlayerDirectionActions"] = ActionMap(["DirectionActions"],
{
#MENU KEY DOWN ACTIONS
- "left": (self.keyLeft, _("DVD left key")),
- "right": (self.keyRight, _("DVD right key")),
- "up": (self.keyUp, _("DVD up key")),
- "down": (self.keyDown, _("DVD down key")),
+ "left": self.keyLeft,
+ "right": self.keyRight,
+ "up": self.keyUp,
+ "down": self.keyDown,
#MENU KEY REPEATED ACTIONS
"leftRepeated": self.doNothing,
"rightUp": self.doNothing,
"upUp": self.doNothing,
"downUp": self.doNothing,
- }, -2)
+ })
- self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
+ self["OkCancelActions"] = ActionMap(["OkCancelActions"],
{
- "ok": (self.keyOk, _("DVD ENTER key")),
+ "ok": self.keyOk,
"cancel": self.keyCancel,
- }, -2)
+ })
self["DVDPlayerPlaybackActions"] = HelpableActionMap(self, "DVDPlayerActions",
{
"dvdAudioMenu": (self.enterDVDAudioMenu, _("(show optional DVD audio menu)")),
"nextAudioTrack": (self.nextAudioTrack, _("switch to the next audio track")),
"nextSubtitleTrack": (self.nextSubtitleTrack, _("switch to the next subtitle language")),
- "seekBeginning": (self.seekBeginning, _("Jump to video title 1 (play movie from start)")),
+ "nextAngle": (self.nextAngle, _("switch to the next angle")),
+ "seekBeginning": self.seekBeginning,
}, -2)
self["NumberActions"] = NumberActionMap( [ "NumberActions"],
self.onClose.append(self.__onClose)
+ from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
+ hotplugNotifier.append(self.hotplugCB)
+
+ self.autoplay = dvd_device or dvd_filelist
+
if dvd_device:
- self.dvd_device = dvd_device
- self.physicalDVD = True
+ self.physicalDVD = True
else:
- if fileExists("/dev/cdroms/cdrom0"):
- print "physical dvd found (/dev/cdroms/cdrom0)"
- self.dvd_device = "/dev/cdroms/cdrom0"
- self.physicalDVD = True
- else:
- self.dvd_device = None
- self.physicalDVD = False
+ self.scanHotplug()
self.dvd_filelist = dvd_filelist
- self.onFirstExecBegin.append(self.showFileBrowser)
+ self.onFirstExecBegin.append(self.opened)
self.service = None
self.in_menu = False
- self.old_aspect = open("/proc/stb/video/aspect", "r").read()
- self.old_policy = open("/proc/stb/video/policy", "r").read()
- self.old_wss = open("/proc/stb/denc/0/wss", "r").read()
def keyNumberGlobal(self, number):
print "You pressed number " + str(number)
if retval > 0:
self.zapToNumber(retval)
+ def getServiceInterface(self, iface):
+ service = self.service
+ if service:
+ attr = getattr(service, iface, None)
+ if callable(attr):
+ return attr()
+ return None
+
def __serviceStopped(self):
self.dvdScreen.hide()
- self.service.subtitle().disableSubtitles(self.session.current_dialog.instance)
+ subs = self.getServiceInterface("subtitle")
+ if subs:
+ subs.disableSubtitles(self.session.current_dialog.instance)
def serviceStarted(self): #override InfoBarShowHide function
self.dvdScreen.show()
- self.service.subtitle().enableSubtitles(self.dvdScreen.instance, None)
def doEofInternal(self, playing):
if self.in_menu:
print "StringAvail"
def __osdAudioInfoAvail(self):
- audioTuple = self.service.info().getInfoObject(iServiceInformation.sUser+6)
+ info = self.getServiceInterface("info")
+ audioTuple = info and info.getInfoObject(iServiceInformation.sUser+6)
print "AudioInfoAvail ", repr(audioTuple)
- audioString = "%d: %s (%s)" % (audioTuple[0],audioTuple[1],audioTuple[2])
- self["audioLabel"].setText(audioString)
- if audioTuple != self.last_audioTuple and not self.in_menu:
- self.doShow()
+ if audioTuple:
+ audioString = "%d: %s (%s)" % (audioTuple[0],audioTuple[1],audioTuple[2])
+ self["audioLabel"].setText(audioString)
+ if audioTuple != self.last_audioTuple and not self.in_menu:
+ self.doShow()
self.last_audioTuple = audioTuple
def __osdSubtitleInfoAvail(self):
- subtitleTuple = self.service.info().getInfoObject(iServiceInformation.sUser+7)
+ info = self.getServiceInterface("info")
+ subtitleTuple = info and info.getInfoObject(iServiceInformation.sUser+7)
print "SubtitleInfoAvail ", repr(subtitleTuple)
- subtitleString = ""
- if subtitleTuple[0] is not 0:
- subtitleString = "%d: %s" % (subtitleTuple[0],subtitleTuple[1])
- self["subtitleLabel"].setText(subtitleString)
- if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
- self.doShow()
+ if subtitleTuple:
+ subtitleString = ""
+ if subtitleTuple[0] is not 0:
+ subtitleString = "%d: %s" % (subtitleTuple[0],subtitleTuple[1])
+ self["subtitleLabel"].setText(subtitleString)
+ if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
+ self.doShow()
self.last_subtitleTuple = subtitleTuple
+
+ def __osdAngleInfoAvail(self):
+ info = self.getServiceInterface("info")
+ angleTuple = info and info.getInfoObject(iServiceInformation.sUser+8)
+ print "AngleInfoAvail ", repr(angleTuple)
+ if angleTuple:
+ angleString = ""
+ if angleTuple[1] > 1:
+ angleString = "%d / %d" % (angleTuple[0],angleTuple[1])
+ self["anglePix"].show()
+ else:
+ self["anglePix"].hide()
+ self["angleLabel"].setText(angleString)
+ if angleTuple != self.last_angleTuple and not self.in_menu:
+ self.doShow()
+ self.last_angleTuple = angleTuple
def __chapterUpdated(self):
- self.currentChapter = self.service.info().getInfo(iServiceInformation.sCurrentChapter)
- self.totalChapters = self.service.info().getInfo(iServiceInformation.sTotalChapters)
- self.setChapterLabel()
- print "__chapterUpdated: %d/%d" % (self.currentChapter, self.totalChapters)
+ info = self.getServiceInterface("info")
+ if info:
+ self.currentChapter = info.getInfo(iServiceInformation.sCurrentChapter)
+ self.totalChapters = info.getInfo(iServiceInformation.sTotalChapters)
+ self.setChapterLabel()
+ print "__chapterUpdated: %d/%d" % (self.currentChapter, self.totalChapters)
def __titleUpdated(self):
- self.currentTitle = self.service.info().getInfo(iServiceInformation.sCurrentTitle)
- self.totalTitles = self.service.info().getInfo(iServiceInformation.sTotalTitles)
- self.setChapterLabel()
- print "__titleUpdated: %d/%d" % (self.currentTitle, self.totalTitles)
- if not self.in_menu:
- self.doShow()
+ info = self.getServiceInterface("info")
+ if info:
+ self.currentTitle = info.getInfo(iServiceInformation.sCurrentTitle)
+ self.totalTitles = info.getInfo(iServiceInformation.sTotalTitles)
+ self.setChapterLabel()
+ print "__titleUpdated: %d/%d" % (self.currentTitle, self.totalTitles)
+ if not self.in_menu:
+ self.doShow()
def askLeavePlayer(self):
+ choices = [(_("Exit"), "exit"), (_("Continue playing"), "play")]
+ if True or not self.physicalDVD:
+ choices.insert(1,(_("Return to file browser"), "browser"))
if self.physicalDVD:
- self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list=[(_("Continue playing"), "play"), (_("Exit"), "exit")])
- else:
- self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list=[(_("Continue playing"), "play"), (_("Return to file browser"), "browser"), (_("Exit"), "exit")])
+ cur = self.session.nav.getCurrentlyPlayingServiceReference()
+ if cur and not cur.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):
+ keys = self.getServiceInterface("keys")
+ if keys:
+ keys.keyPressed(key)
+ return keys
def nextAudioTrack(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser)
+ self.sendKey(iServiceKeys.keyUser)
def nextSubtitleTrack(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+1)
+ self.sendKey(iServiceKeys.keyUser+1)
def enterDVDAudioMenu(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+2)
+ self.sendKey(iServiceKeys.keyUser+2)
def nextChapter(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+3)
+ self.sendKey(iServiceKeys.keyUser+3)
def prevChapter(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+4)
+ self.sendKey(iServiceKeys.keyUser+4)
def nextTitle(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+5)
+ self.sendKey(iServiceKeys.keyUser+5)
def prevTitle(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+6)
+ self.sendKey(iServiceKeys.keyUser+6)
def enterDVDMenu(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUser+7)
+ self.sendKey(iServiceKeys.keyUser+7)
+
+ def nextAngle(self):
+ self.sendKey(iServiceKeys.keyUser+8)
def seekBeginning(self):
if self.service:
seekable = self.getSeek()
- if seekable is not None:
+ if seekable:
seekable.seekTo(0)
def zapToNumber(self, number):
if self.service:
seekable = self.getSeek()
- if seekable is not None:
+ if seekable:
print "seek to chapter %d" % number
seekable.seekChapter(number)
# MENU ACTIONS
def keyRight(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyRight)
+ self.sendKey(iServiceKeys.keyRight)
def keyLeft(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyLeft)
+ self.sendKey(iServiceKeys.keyLeft)
def keyUp(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyUp)
+ self.sendKey(iServiceKeys.keyUp)
def keyDown(self):
- if self.service:
- self.service.keys().keyPressed(iServiceKeys.keyDown)
+ self.sendKey(iServiceKeys.keyDown)
def keyOk(self):
- if self.service:
- if not self.in_menu:
- self.toggleInfo()
- self.service.keys().keyPressed(iServiceKeys.keyOk)
+ if self.sendKey(iServiceKeys.keyOk) and not self.in_menu:
+ self.toggleInfo()
def keyCancel(self):
self.askLeavePlayer()
- def showFileBrowser(self):
- if self.physicalDVD:
- if self.dvd_device == "/dev/cdroms/cdrom0":
- self.session.openWithCallback(self.DVDdriveCB, MessageBox, text=_("Do you want to play DVD in drive?"), timeout=5 )
- else:
- self.DVDdriveCB(True)
+ def opened(self):
+ if self.autoplay and self.dvd_filelist:
+ # opened via autoplay
+ self.FileBrowserClosed(self.dvd_filelist[0])
+ elif self.autoplay and self.physicalDVD:
+ self.playPhysicalCB(True)
+ 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)
newref = eServiceReference(4369, 0, val)
print "play", newref.toString()
if curref is None or curref != newref:
+ if newref.toString().endswith("/VIDEO_TS") or newref.toString().endswith("/"):
+ names = newref.toString().rsplit("/",3)
+ if names[2].startswith("Disk ") or names[2].startswith("DVD "):
+ name = str(names[1]) + " - " + str(names[2])
+ else:
+ name = names[2]
+ print "setting name to: ", self.service
+ newref.setName(str(name))
self.session.nav.playService(newref)
self.service = self.session.nav.getCurrentService()
print "self.service", self.service
print "cur_dlg", self.session.current_dialog
+ subs = self.getServiceInterface("subtitle")
+ if subs:
+ subs.enableSubtitles(self.dvdScreen.instance, None)
def exitCB(self, answer):
if answer is not None:
#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):
- for i in (("/proc/stb/video/aspect", self.old_aspect), ("/proc/stb/video/policy", self.old_policy), ("/proc/stb/denc/0/wss", self.old_wss)):
- try:
- open(i[0], "w").write(i[1])
- except IOError:
- print "restore", i[0], "failed"
self.restore_infobar_seek_config()
self.session.nav.playService(self.oldService)
+ from Plugins.SystemPlugins.Hotplug.plugin import hotplugNotifier
+ hotplugNotifier.remove(self.hotplugCB)
def playLastCB(self, answer): # overwrite infobar cuesheet function
print "playLastCB", answer, self.resume_point
- if self.service and answer == True:
- seek = self.service.seek()
- seek.seekTo(self.resume_point)
+ if self.service:
+ if answer == True:
+ seekable = self.getSeek()
+ if seekable:
+ seekable.seekTo(self.resume_point)
+ pause = self.service.pause()
+ pause.unpause()
self.hideAfterResume()
def showAfterCuesheetOperation(self):
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)
paths_to_scan =
[
ScanPath(path = "video_ts", with_subdirs = False),
+ ScanPath(path = "VIDEO_TS", with_subdirs = False),
ScanPath(path = "", with_subdirs = False),
],
name = "DVD",
- description = "Play DVD",
+ description = _("Play DVD"),
openfnc = filescan_open,
)]