X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fpython%2FScreens%2FMediaPlayer.py;h=bab3e0aafa77034c9d2408c98b86eb5990733728;hb=52a9bee10e04a59263f474d8a25b02ec714d3871;hp=dddf5f50a6e9c302f27d22f16a0b908bc786963d;hpb=c34738696954cbfacf9465babe5779d50b06257f;p=vuplus_dvbapp diff --git a/lib/python/Screens/MediaPlayer.py b/lib/python/Screens/MediaPlayer.py index dddf5f5..bab3e0a 100644 --- a/lib/python/Screens/MediaPlayer.py +++ b/lib/python/Screens/MediaPlayer.py @@ -10,11 +10,14 @@ 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 +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.Playlist import PlaylistIOInternal, PlaylistIOM3U, PlaylistIOPLS from Screens.InfoBarGenerics import InfoBarSeek +from ServiceReference import ServiceReference +from Screens.ChoiceBox import ChoiceBox import os @@ -23,8 +26,13 @@ class MediaPlayer(Screen, InfoBarSeek): 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)", 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() @@ -44,6 +52,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) @@ -98,9 +107,9 @@ class MediaPlayer(Screen, InfoBarSeek): self.__event_tracker = ServiceEventTracker(screen=self, eventmap= { -# iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged, -# iPlayableService.evStart: self.__serviceStarted, - + #iPlayableService.evStart: self.__serviceStarted, + #iPlayableService.evSeekableStatusChanged: InfoBarSeek.__seekableStatusChanged, + iPlayableService.evEOF: self.__evEOF, # iPlayableService.evSOF: self.__evSOF, }) @@ -121,11 +130,24 @@ class MediaPlayer(Screen, InfoBarSeek): self.infoTimer.start(500) self.currList = "filelist" + + self.coverArtFileName = "" + + self.playlistIOInternal = PlaylistIOInternal() + list = self.playlistIOInternal.open(resolveFilename(SCOPE_CONFIG, "playlist.e2pls")) + if list: + for x in list: + self.playlist.addFile(x.ref) + self.playlist.updateList() def doNothing(self): pass def exit(self): + self.playlistIOInternal.clear() + for x in self.playlist.list: + self.playlistIOInternal.addService(ServiceReference(x[0])) + self.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, "playlist.e2pls")) self.close() def checkSkipShowHideLock(self): @@ -133,7 +155,7 @@ class MediaPlayer(Screen, InfoBarSeek): def __evEOF(self): self.nextEntry() - + def __onClose(self): self.session.nav.playService(self.oldService) @@ -150,8 +172,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) @@ -165,6 +189,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 @@ -278,6 +315,8 @@ class MediaPlayer(Screen, InfoBarSeek): elif choice[1] == "filelist": self.switchToFileList() elif choice[1] == "delete": + if self.playlist.getSelectionIndex() == self.playlist.getCurrentIndex(): + self.stopEntry() self.deleteEntry() elif choice[1] == "clear": self.stopEntry() @@ -296,11 +335,39 @@ class MediaPlayer(Screen, InfoBarSeek): self.playlist.addFile(x[0][0]) self.playlist.updateList() + ADDPLAYLIST = 0 + REPLACEPLAYLIST = 1 + def copyFile(self): - self.playlist.addFile(self.filelist.getServiceRef()) - self.playlist.updateList() - if len(self.playlist) == 1: - self.changeEntry(0) + if self.filelist.getServiceRef().type == 4098: # playlist + list = [] + list.append((_("Add files to playlist"), (self.ADDPLAYLIST, self.filelist.getServiceRef()))) + list.append((_("Replace current playlist"), (self.REPLACEPLAYLIST, self.filelist.getServiceRef()))) + self.session.openWithCallback(self.playlistCallback, ChoiceBox, title=_("You selected a playlist"), list = list) + else: + self.playlist.addFile(self.filelist.getServiceRef()) + self.playlist.updateList() + 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()[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): next = self.playlist.getCurrentIndex() + 1 @@ -356,5 +423,10 @@ class MediaPlayer(Screen, InfoBarSeek): def stopEntry(self): self.playlist.stopFile() self.session.nav.playService(None) + self.updateMusicInformation(clear=True) + + def unPauseService(self): + self.setSeekState(self.SEEK_STATE_PLAY) +