DVDPlayer/plugin.py: set size of overlay screen depended to desktop size
[enigma2.git] / lib / python / Plugins / Extensions / DVDPlayer / plugin.py
index 4298642c67b6e68fc7d85d48e06762e7d146d8ea..29e69ee174a6696f9235eb4c7aaf118bc1bcce09 100644 (file)
@@ -1,5 +1,5 @@
 from os import path as os_path, remove as os_remove, listdir as os_listdir, system
 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.Screen import Screen
 from Screens.MessageBox import MessageBox
 from Screens.ChoiceBox import ChoiceBox
@@ -109,10 +109,11 @@ class DVDSummary(Screen):
                self["Title"].setText(title)
 
 class DVDOverlay(Screen):
                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):
        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)
                Screen.__init__(self, session)
-               
+
 class ChapterZap(Screen):
        skin = """
        <screen name="ChapterZap" position="235,255" size="250,60" title="Chapter" >
 class ChapterZap(Screen):
        skin = """
        <screen name="ChapterZap" position="235,255" size="250,60" title="Chapter" >
@@ -352,7 +353,7 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                                if file.mimetype == "video/x-dvd":
                                                        self.dvd_device = devicepath
                                                        print "physical dvd found:", self.dvd_device
                                                if file.mimetype == "video/x-dvd":
                                                        self.dvd_device = devicepath
                                                        print "physical dvd found:", self.dvd_device
-                                                       self.physicalDVD = True                 
+                                                       self.physicalDVD = True
 
                self.dvd_filelist = dvd_filelist
                self.onFirstExecBegin.append(self.showFileBrowser)
 
                self.dvd_filelist = dvd_filelist
                self.onFirstExecBegin.append(self.showFileBrowser)
@@ -371,13 +372,22 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                if retval > 0:
                        self.zapToNumber(retval)
 
                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()
        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()
 
        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:
 
        def doEofInternal(self, playing):
                if self.in_menu:
@@ -435,17 +445,19 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                print "StringAvail"
 
        def __osdAudioInfoAvail(self):
                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)
                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()
                print "AudioInfoAvail ", repr(audioTuple)
                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
+               self.last_audioTuple = audioTuple
 
        def __osdSubtitleInfoAvail(self):
 
        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)
                if subtitleTuple:
                        subtitleString = ""
                print "SubtitleInfoAvail ", repr(subtitleTuple)
                if subtitleTuple:
                        subtitleString = ""
@@ -454,95 +466,91 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                        self["subtitleLabel"].setText(subtitleString)
                        if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
                                self.doShow()
                        self["subtitleLabel"].setText(subtitleString)
                        if subtitleTuple != self.last_subtitleTuple and not self.in_menu:
                                self.doShow()
-                       self.last_subtitleTuple = subtitleTuple
+               self.last_subtitleTuple = subtitleTuple
 
        def __chapterUpdated(self):
 
        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):
 
        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):
                
        def askLeavePlayer(self):
-               choices = [(_("Continue playing"), "play"), (_("Exit"), "exit")]
+               choices = [(_("Exit"), "exit"), (_("Continue playing"), "play")]
                if not self.physicalDVD:
                if not self.physicalDVD:
-                       choices.insert(1,(_("Return to file browser"), "browser"))                      
+                       choices.insert(1,(_("Return to file browser"), "browser"))
                self.session.openWithCallback(self.exitCB, ChoiceBox, title=_("Leave DVD Player?"), list = choices)
 
                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):
        def nextAudioTrack(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser)
+               self.sendKey(iServiceKeys.keyUser)
 
        def nextSubtitleTrack(self):
 
        def nextSubtitleTrack(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+1)
+               self.sendKey(iServiceKeys.keyUser+1)
 
        def enterDVDAudioMenu(self):
 
        def enterDVDAudioMenu(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+2)
+               self.sendKey(iServiceKeys.keyUser+2)
 
        def nextChapter(self):
 
        def nextChapter(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+3)
+               self.sendKey(iServiceKeys.keyUser+3)
 
        def prevChapter(self):
 
        def prevChapter(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+4)
+               self.sendKey(iServiceKeys.keyUser+4)
 
        def nextTitle(self):
 
        def nextTitle(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+5)
+               self.sendKey(iServiceKeys.keyUser+5)
 
        def prevTitle(self):
 
        def prevTitle(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+6)
+               self.sendKey(iServiceKeys.keyUser+6)
 
        def enterDVDMenu(self):
 
        def enterDVDMenu(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUser+7)
+               self.sendKey(iServiceKeys.keyUser+7)
 
        def seekBeginning(self):
                if self.service:
                        seekable = self.getSeek()
 
        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()
                                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):
                                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):
 
        def keyLeft(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyLeft)
+               self.sendKey(iServiceKeys.keyLeft)
 
        def keyUp(self):
 
        def keyUp(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyUp)
+               self.sendKey(iServiceKeys.keyUp)
 
        def keyDown(self):
 
        def keyDown(self):
-               if self.service:
-                       self.service.keys().keyPressed(iServiceKeys.keyDown)
+               self.sendKey(iServiceKeys.keyDown)
 
        def keyOk(self):
 
        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 keyCancel(self):
                self.askLeavePlayer()
@@ -578,6 +586,9 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
                                self.service = self.session.nav.getCurrentService()
                                print "self.service", self.service
                                print "cur_dlg", self.session.current_dialog
                                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:
 
        def exitCB(self, answer):
                if answer is not None:
@@ -606,9 +617,10 @@ class DVDPlayer(Screen, InfoBarBase, InfoBarNotifications, InfoBarSeek, InfoBarP
        def playLastCB(self, answer): # overwrite infobar cuesheet function
                print "playLastCB", answer, self.resume_point
                if self.service:
        def playLastCB(self, answer): # overwrite infobar cuesheet function
                print "playLastCB", answer, self.resume_point
                if self.service:
-                       seek = self.service.seek()
                        if answer == True:
                        if answer == True:
-                               seek.seekTo(self.resume_point)
+                               seekable = self.getSeek()
+                               if seekable:
+                                       seekable.seekTo(self.resume_point)
                        pause = self.service.pause()
                        pause.unpause()
                self.hideAfterResume()
                        pause = self.service.pause()
                        pause.unpause()
                self.hideAfterResume()