remove no more exist isTop argument
[enigma2.git] / lib / python / Plugins / Extensions / MediaPlayer / plugin.py
index 2c9097fb7dc830e312c7bf88b16607352775e464..942dc919c275b0694e87f57b994cf7fff9cb6a82 100644 (file)
@@ -12,7 +12,7 @@ from Components.FileList import FileList
 from Components.MediaPlayer import PlayList
 from Tools.Directories import resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_SKIN_IMAGE
 from Components.ServicePosition import ServicePositionGauge
 from Components.MediaPlayer import PlayList
 from Tools.Directories import resolveFilename, SCOPE_CONFIG, SCOPE_PLAYLIST, SCOPE_SKIN_IMAGE
 from Components.ServicePosition import ServicePositionGauge
-from Components.ServiceEventTracker import ServiceEventTracker
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
 from Components.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS
 from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications
 from ServiceReference import ServiceReference
 from Components.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS
 from Screens.InfoBarGenerics import InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications
 from ServiceReference import ServiceReference
@@ -31,17 +31,18 @@ class MyPlayList(PlayList):
                self.oldCurrPlaying = -1
 
 class MediaPixmap(Pixmap):
                self.oldCurrPlaying = -1
 
 class MediaPixmap(Pixmap):
-       def applySkin(self, desktop):
+       def applySkin(self, desktop, screen):
                self.default_pixmap = None
                self.default_pixmap = None
-               for (attrib, value) in self.skinAttributes:
-                       if attrib == "pixmap":
-                               self.default_pixmap = value
-                               break
+               if self.skinAttributes is not None:
+                       for (attrib, value) in self.skinAttributes:
+                               if attrib == "pixmap":
+                                       self.default_pixmap = value
+                                       break
                if self.default_pixmap is None:
                if self.default_pixmap is None:
-                       self.default_pixmap = resolveFilename(SCOPE_SKIN_IMAGE, "no_coverArt.png")
-               return Pixmap.applySkin(self, desktop)
+                       self.default_pixmap = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/no_coverArt.png")
+               return Pixmap.applySkin(self, desktop, screen)
 
 
-class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, HelpableScreen):
+class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSupport, InfoBarNotifications, HelpableScreen):
        ALLOW_SUSPEND = True
        ENABLE_RESUME_SUPPORT = True
 
        ALLOW_SUSPEND = True
        ENABLE_RESUME_SUPPORT = True
 
@@ -50,6 +51,7 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
                InfoBarAudioSelection.__init__(self)
                InfoBarCueSheetSupport.__init__(self, actionmap = "MediaPlayerCueSheetActions")
                InfoBarNotifications.__init__(self)
                InfoBarAudioSelection.__init__(self)
                InfoBarCueSheetSupport.__init__(self, actionmap = "MediaPlayerCueSheetActions")
                InfoBarNotifications.__init__(self)
+               InfoBarBase.__init__(self)
                HelpableScreen.__init__(self)
                self.summary = None
                self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
                HelpableScreen.__init__(self)
                self.summary = None
                self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
@@ -61,7 +63,7 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
                self.addPlaylistParser(PlaylistIOInternal, "e2pls")
 
                # 'None' is magic to start at the list of mountpoints
                self.addPlaylistParser(PlaylistIOInternal, "e2pls")
 
                # 'None' is magic to start at the list of mountpoints
-               self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True)
+               self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
@@ -106,11 +108,11 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
 
                self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", 
                        {
 
                self["MediaPlayerActions"] = HelpableActionMap(self, "MediaPlayerActions", 
                        {
-                               "play": (self.playEntry, _("play entry")),
+                               "play": (self.xplayEntry, _("play entry")),
                                "pause": (self.pauseEntry, _("pause")),
                                "stop": (self.stopEntry, _("stop entry")),
                                "pause": (self.pauseEntry, _("pause")),
                                "stop": (self.stopEntry, _("stop entry")),
-                               "previous": (self.previousEntry, _("play previous playlist entry")),
-                               "next": (self.nextEntry, _("play next playlist entry")),
+                               "previous": (self.previousMarkOrEntry, _("play from previous mark or playlist entry")),
+                               "next": (self.nextMarkOrEntry, _("play from next mark or playlist entry")),
                                "menu": (self.showMenu, _("menu")),
                                "skipListbegin": (self.skip_listbegin, _("jump to listbegin")),
                                "skipListend": (self.skip_listend, _("jump to listend")),
                                "menu": (self.showMenu, _("menu")),
                                "skipListbegin": (self.skip_listbegin, _("jump to listbegin")),
                                "skipListend": (self.skip_listend, _("jump to listend")),
@@ -145,24 +147,16 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
 
                InfoBarSeek.__init__(self, actionmap = "MediaPlayerSeekActions")
 
 
                InfoBarSeek.__init__(self, actionmap = "MediaPlayerSeekActions")
 
-               self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
-                       {
-                               #iPlayableService.evStart: self.__serviceStarted,
-                               #iPlayableService.evSeekableStatusChanged: InfoBarSeek.__seekableStatusChanged,
-
-                               iPlayableService.evEOF: self.__evEOF,
-                       })
-
                self.onClose.append(self.delMPTimer)
                self.onClose.append(self.__onClose)
 
                self.righttimer = False
                self.rightKeyTimer = eTimer()
                self.onClose.append(self.delMPTimer)
                self.onClose.append(self.__onClose)
 
                self.righttimer = False
                self.rightKeyTimer = eTimer()
-               self.rightKeyTimer.timeout.get().append(self.rightTimerFire)
+               self.rightKeyTimer.callback.append(self.rightTimerFire)
 
                self.lefttimer = False
                self.leftKeyTimer = eTimer()
 
                self.lefttimer = False
                self.leftKeyTimer = eTimer()
-               self.leftKeyTimer.timeout.get().append(self.leftTimerFire)
+               self.leftKeyTimer.callback.append(self.leftTimerFire)
 
                self.currList = "filelist"
 
 
                self.currList = "filelist"
 
@@ -195,8 +189,11 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
        def checkSkipShowHideLock(self):
                self.updatedSeekState()
 
        def checkSkipShowHideLock(self):
                self.updatedSeekState()
 
-       def __evEOF(self):
-               self.nextEntry()
+       def doEofInternal(self, playing):
+               if playing:
+                       self.nextEntry()
+               else:
+                       self.show()
 
        def __onClose(self):
                self.session.nav.playService(self.oldService)
 
        def __onClose(self):
                self.session.nav.playService(self.oldService)
@@ -535,7 +532,7 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
 
        def copyDirectory(self, directory, recursive = True):
                print "copyDirectory", directory
 
        def copyDirectory(self, directory, recursive = True):
                print "copyDirectory", directory
-               filelist = FileList(directory, useServiceRef = True, isTop = True)
+               filelist = FileList(directory, useServiceRef = True)
 
                for x in filelist.getFileList():
                        if x[0][1] == True: #isDir
 
                for x in filelist.getFileList():
                        if x[0][1] == True: #isDir
@@ -569,10 +566,19 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
                if next < len(self.playlist):
                        self.changeEntry(next)
 
                if next < len(self.playlist):
                        self.changeEntry(next)
 
-       def previousEntry(self):
-               next = self.playlist.getCurrentIndex() - 1
-               if next >= 0:
-                       self.changeEntry(next)
+       def nextMarkOrEntry(self):
+               if not self.jumpPreviousNextMark(lambda x: x):
+                       next = self.playlist.getCurrentIndex() + 1
+                       if next < len(self.playlist):
+                               self.changeEntry(next)
+                       else:
+                               self.doSeek(-1)
+
+       def previousMarkOrEntry(self):
+               if not self.jumpPreviousNextMark(lambda x: -x-5*90000, start=True):
+                       next = self.playlist.getCurrentIndex() - 1
+                       if next >= 0:
+                               self.changeEntry(next)
 
        def deleteEntry(self):
                self.playlist.deleteFile(self.playlist.getSelectionIndex())
 
        def deleteEntry(self):
                self.playlist.deleteFile(self.playlist.getSelectionIndex())
@@ -590,7 +596,24 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
                        if serviceRefList[count] == serviceref:
                                self.changeEntry(count)
                                break
                        if serviceRefList[count] == serviceref:
                                self.changeEntry(count)
                                break
-
+                       
+       def xplayEntry(self):
+               if self.currList == "playlist":
+                       self.playEntry()
+               else:
+                       self.stopEntry()
+                       self.playlist.clear()
+                       sel = self.filelist.getSelection()
+                       if sel:
+                               if sel[1]: # can descent
+                                       # add directory to playlist
+                                       self.copyDirectory(sel[0])
+                               else:
+                                       # add files to playlist
+                                       self.copyDirectory(os_path.dirname(sel[0].getPath()) + "/", recursive = False)
+                       if len(self.playlist) > 0:
+                               self.changeEntry(0)
+       
        def playEntry(self):
                if len(self.playlist.getServiceRefList()):
                        needsInfoUpdate = False
        def playEntry(self):
                if len(self.playlist.getServiceRefList()):
                        needsInfoUpdate = False
@@ -657,21 +680,9 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
                        self.playlist.pauseFile()
                elif self.seekstate == self.SEEK_STATE_PLAY:
                        self.playlist.playFile()
                        self.playlist.pauseFile()
                elif self.seekstate == self.SEEK_STATE_PLAY:
                        self.playlist.playFile()
-               elif self.seekstate in ( self.SEEK_STATE_FF_2X,
-                                                                self.SEEK_STATE_FF_4X,
-                                                                self.SEEK_STATE_FF_8X,
-                                                                self.SEEK_STATE_FF_16X,
-                                                                self.SEEK_STATE_FF_32X,
-                                                                self.SEEK_STATE_FF_48X,
-                                                                self.SEEK_STATE_FF_64X,
-                                                                self.SEEK_STATE_FF_128X):
+               elif self.isStateForward(self.seekstate):
                        self.playlist.forwardFile()
                        self.playlist.forwardFile()
-               elif self.seekstate in ( self.SEEK_STATE_BACK_8X,
-                                                                self.SEEK_STATE_BACK_16X,
-                                                                self.SEEK_STATE_BACK_32X,
-                                                                self.SEEK_STATE_BACK_48X,
-                                                                self.SEEK_STATE_BACK_64X,
-                                                                self.SEEK_STATE_BACK_128X):
+               elif self.isStateBackward(self.seekstate):
                        self.playlist.rewindFile()
 
        def pauseEntry(self):
                        self.playlist.rewindFile()
 
        def pauseEntry(self):
@@ -717,7 +728,7 @@ class MediaPlayerLCDScreen(Screen):
                        self["text4"].setText(text)
 
 def main(session, **kwargs):
                        self["text4"].setText(text)
 
 def main(session, **kwargs):
-        session.open(MediaPlayer)
+       session.open(MediaPlayer)
 
 def menu(menuid, **kwargs):
        if menuid == "mainmenu":
 
 def menu(menuid, **kwargs):
        if menuid == "mainmenu":