allow standy in media player
[enigma2.git] / lib / python / Screens / MediaPlayer.py
index f042a5c3eb3a1a6dd42c396099c2f04e27fd1b71..8f92df5e1232eb8ba9bd8c7e52650c3d453fba37 100644 (file)
@@ -10,7 +10,7 @@ from Components.Label import Label
 from Components.FileList import FileEntryComponent, FileList
 from Components.MediaPlayer import PlayList, PlaylistEntryComponent
 from Plugins.Plugin import PluginDescriptor
-from Tools.Directories import resolveFilename, SCOPE_MEDIA, SCOPE_CONFIG
+from Tools.Directories import resolveFilename, SCOPE_MEDIA, SCOPE_CONFIG, SCOPE_SKIN_IMAGE
 from Components.ServicePosition import ServicePositionGauge
 from Screens.ChoiceBox import ChoiceBox
 from Components.ServiceEventTracker import ServiceEventTracker
@@ -22,12 +22,19 @@ from Screens.ChoiceBox import ChoiceBox
 import os
 
 class MediaPlayer(Screen, InfoBarSeek):
+       ALLOW_SUSPEND = True
+       
        def __init__(self, session, args = None):
                Screen.__init__(self, session)
                self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
                self.session.nav.stopService()
 
-               self.filelist = FileList(resolveFilename(SCOPE_MEDIA), matchingPattern = "^.*\.(mp3|ogg|ts|wav|wave|m3u|pls)", useServiceRef = True)
+               self.playlistparsers = {}
+               self.addPlaylistParser(PlaylistIOM3U, "m3u")
+               self.addPlaylistParser(PlaylistIOPLS, "pls")
+               self.addPlaylistParser(PlaylistIOInternal, "e2pls")
+
+               self.filelist = FileList(resolveFilename(SCOPE_MEDIA), matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True)
                self["filelist"] = self.filelist
 
                self.playlist = PlayList()
@@ -47,6 +54,7 @@ class MediaPlayer(Screen, InfoBarSeek):
                self["year"] = Label("")
                self["genretext"] = Label(_("Genre:"))
                self["genre"] = Label("")
+               self["coverArt"] = Pixmap()
                
                #self["text"] = Input("1234", maxSize=True, type=Input.NUMBER)
 
@@ -124,9 +132,11 @@ class MediaPlayer(Screen, InfoBarSeek):
                self.infoTimer.start(500)
                
                self.currList = "filelist"
+
+               self.coverArtFileName = ""
                
                self.playlistIOInternal = PlaylistIOInternal()
-               list = self.playlistIOInternal.open(resolveFilename(SCOPE_CONFIG, "playlist.e2"))
+               list = self.playlistIOInternal.open(resolveFilename(SCOPE_CONFIG, "playlist.e2pls"))
                if list:
                        for x in list:
                                self.playlist.addFile(x.ref)
@@ -139,7 +149,7 @@ class MediaPlayer(Screen, InfoBarSeek):
                self.playlistIOInternal.clear()
                for x in self.playlist.list:
                        self.playlistIOInternal.addService(ServiceReference(x[0]))
-               self.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, "playlist.e2"))
+               self.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, "playlist.e2pls"))
                self.close()
        
        def checkSkipShowHideLock(self):
@@ -164,8 +174,10 @@ class MediaPlayer(Screen, InfoBarSeek):
                                                                                 album = currPlay.info().getInfoString(iServiceInformation.sAlbum),
                                                                                 genre = currPlay.info().getInfoString(iServiceInformation.sGenre),
                                                                                 clear = True)
+                       self.updateCoverArtPixmap( currPlay.info().getName() )
                else:
                        self.updateMusicInformation()
+                       self.updateCoverArtPixmap( "" )
        
        def updateMusicInformation(self, artist = "", title = "", album = "", year = "", genre = "", clear = False):
                self.updateSingleMusicInformation("artist", artist, clear)
@@ -179,6 +191,19 @@ class MediaPlayer(Screen, InfoBarSeek):
                        if self[name].getText() != info:
                                self[name].setText(info)
 
+       def updateCoverArtPixmap(self, currentServiceName):
+               filename = currentServiceName
+               # The "getName" usually adds something like "MP3 File:" infront of filename
+               # Get rid of this...by finding the first "/"
+               filename = filename[filename.find("/"):]
+               path = os.path.dirname(filename)
+               pngname = path + "/" + "folder.png"
+               if not os.path.exists(pngname):
+                       pngname = resolveFilename(SCOPE_SKIN_IMAGE, "no_coverArt.png")
+               if self.coverArtFileName != pngname:
+                       self.coverArtFileName = pngname
+                       self["coverArt"].instance.setPixmapFromFile(self.coverArtFileName)
+
        def fwdTimerFire(self):
                self.fwdKeyTimer.stop()
                self.fwdtimer = False
@@ -327,21 +352,23 @@ class MediaPlayer(Screen, InfoBarSeek):
                        if len(self.playlist) == 1:
                                self.changeEntry(0)
 
+       def addPlaylistParser(self, parser, extension):
+               self.playlistparsers[extension] = parser
+
        def playlistCallback(self, answer):
                if answer is not None:
-                       extension = answer[1][1].getPath()[-3:]
-                       if extension == "m3u":
-                               playlist = PlaylistIOM3U()
-                       elif extension == "pls":
-                               playlist = PlaylistIOPLS()
-                       if answer[1][0] == self.REPLACEPLAYLIST:
-                               self.stopEntry()
-                               self.playlist.clear()
-                               self.switchToFileList()
-                       if answer[1][0] == self.REPLACEPLAYLIST or answer[1][0] == self.ADDPLAYLIST:
-                               list = playlist.open(answer[1][1].getPath())
-                               for x in list:
-                                       self.playlist.addFile(x.ref)
+                       extension = answer[1][1].getPath()[answer[1][1].getPath().rfind('.') + 1:]
+                       print "extension:", extension
+                       if self.playlistparsers.has_key(extension):
+                               playlist = self.playlistparsers[extension]()
+                               if answer[1][0] == self.REPLACEPLAYLIST:
+                                       self.stopEntry()
+                                       self.playlist.clear()
+                                       self.switchToFileList()
+                               if answer[1][0] == self.REPLACEPLAYLIST or answer[1][0] == self.ADDPLAYLIST:
+                                       list = playlist.open(answer[1][1].getPath())
+                                       for x in list:
+                                               self.playlist.addFile(x.ref)
                                
 
        def nextEntry(self):