fix menu
[enigma2.git] / lib / python / Screens / MediaPlayer.py
index f042a5c3eb3a1a6dd42c396099c2f04e27fd1b71..bab3e0aafa77034c9d2408c98b86eb5990733728 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 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
 from Components.ServicePosition import ServicePositionGauge
 from Screens.ChoiceBox import ChoiceBox
 from Components.ServiceEventTracker import ServiceEventTracker
@@ -27,7 +27,12 @@ class MediaPlayer(Screen, InfoBarSeek):
                self.oldService = self.session.nav.getCurrentlyPlayingServiceReference()
                self.session.nav.stopService()
 
                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()
                self["filelist"] = self.filelist
 
                self.playlist = PlayList()
@@ -47,6 +52,7 @@ class MediaPlayer(Screen, InfoBarSeek):
                self["year"] = Label("")
                self["genretext"] = Label(_("Genre:"))
                self["genre"] = Label("")
                self["year"] = Label("")
                self["genretext"] = Label(_("Genre:"))
                self["genre"] = Label("")
+               self["coverArt"] = Pixmap()
                
                #self["text"] = Input("1234", maxSize=True, type=Input.NUMBER)
 
                
                #self["text"] = Input("1234", maxSize=True, type=Input.NUMBER)
 
@@ -124,9 +130,11 @@ class MediaPlayer(Screen, InfoBarSeek):
                self.infoTimer.start(500)
                
                self.currList = "filelist"
                self.infoTimer.start(500)
                
                self.currList = "filelist"
+
+               self.coverArtFileName = ""
                
                self.playlistIOInternal = PlaylistIOInternal()
                
                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)
                if list:
                        for x in list:
                                self.playlist.addFile(x.ref)
@@ -139,7 +147,7 @@ class MediaPlayer(Screen, InfoBarSeek):
                self.playlistIOInternal.clear()
                for x in self.playlist.list:
                        self.playlistIOInternal.addService(ServiceReference(x[0]))
                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):
                self.close()
        
        def checkSkipShowHideLock(self):
@@ -164,8 +172,10 @@ class MediaPlayer(Screen, InfoBarSeek):
                                                                                 album = currPlay.info().getInfoString(iServiceInformation.sAlbum),
                                                                                 genre = currPlay.info().getInfoString(iServiceInformation.sGenre),
                                                                                 clear = True)
                                                                                 album = currPlay.info().getInfoString(iServiceInformation.sAlbum),
                                                                                 genre = currPlay.info().getInfoString(iServiceInformation.sGenre),
                                                                                 clear = True)
+                       self.updateCoverArtPixmap( currPlay.info().getName() )
                else:
                        self.updateMusicInformation()
                else:
                        self.updateMusicInformation()
+                       self.updateCoverArtPixmap( "" )
        
        def updateMusicInformation(self, artist = "", title = "", album = "", year = "", genre = "", clear = False):
                self.updateSingleMusicInformation("artist", artist, clear)
        
        def updateMusicInformation(self, artist = "", title = "", album = "", year = "", genre = "", clear = False):
                self.updateSingleMusicInformation("artist", artist, clear)
@@ -179,6 +189,19 @@ class MediaPlayer(Screen, InfoBarSeek):
                        if self[name].getText() != info:
                                self[name].setText(info)
 
                        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
        def fwdTimerFire(self):
                self.fwdKeyTimer.stop()
                self.fwdtimer = False
@@ -327,21 +350,23 @@ class MediaPlayer(Screen, InfoBarSeek):
                        if len(self.playlist) == 1:
                                self.changeEntry(0)
 
                        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:
        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):
                                
 
        def nextEntry(self):