-from enigma import eServiceReference, iServiceInformation, eServiceCenter
-from Screens.MediaPlayer import MediaPlayer
-from Components.MediaPlayer import PlayList
+from enigma import eServiceReference
from Components.Sources.Source import Source
-from ServiceReference import ServiceReference
from Components.FileList import FileList
from os import path as os_path
-class MP( Source):
- LIST = 0
- PLAY = 1
- COMMAND = 3
- WRITEPLAYLIST = 4
-
- def __init__(self, session,func = LIST):
- Source.__init__(self)
- self.func = func
- self.session = session
- error = "unknown command (%s)" % func
- self.result = [[error,error,error]]
-
- def handleCommand(self,cmd):
-
- self.cmd = cmd
- if self.func is self.LIST:
- self.result = self.getFileList(cmd)
- elif self.func is self.PLAY:
- self.result = self.playFile(cmd)
- elif self.func is self.COMMAND:
- self.result = self.command(cmd)
- elif self.func is self.WRITEPLAYLIST:
- self.result = self.writePlaylist(cmd)
-
- def getFileList(self,param):
- print "getFileList:",param
-
- returnList = []
-
- if param["path"] == "playlist":
- if self.session.mediaplayer is None:
- self.session.mediaplayer = self.session.open(MediaPlayer)
- self.session.mediaplayer.playlist = PlayList()
- try:
- test = len(self.session.mediaplayer.playlist)
- #Just a test, wether the link is still active.
- except:
- self.session.mediaplayer = self.session.open(MediaPlayer)
- #self.session.mediaplayer.filelist = FileList(root, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True)
- self.session.mediaplayer.playlist = PlayList()
-
- mp = self.session.mediaplayer
- if len(mp.playlist) != 0:
- serviceRefList = mp.playlist.getServiceRefList()
- for count in range(len(serviceRefList)):
- returnList.append([serviceRefList[count].toString(),"True","playlist"])
- else:
- returnList.append(["empty","True","playlist"])
-
- return returnList
-
- matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)" #MediaPlayer-Match
- useServiceRef = False
- if param["types"] == "audio":
- matchingPattern = "(?i)^.*\.(mp3|ogg|wav|wave|m3u|pls|e2pls)"
- useServiceRef = True
- elif param["types"] == "video":
- matchingPattern = "(?i)^.*\.(ts|avi|mpeg|m3u|pls|e2pls|mpg|vob)"
- useServiceRef = True
- elif param["types"] == "any":
- matchingPattern = ".*"
- else:
- matchingPattern = param["types"]
-
- #__init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None, useServiceRef = False, isTop = False):
- filelist = FileList(param["path"], True, True, matchingPattern, useServiceRef, False)
- list = filelist.getFileList()
- for x in list:
- if useServiceRef == True:
- if x[0][1] == False: #isDir
- returnList.append([x[0][0].toString(),x[0][1],param["path"]])
- else:
- returnList.append([x[0][0],x[0][1],param["path"]])
- else:
- if x[0][1] == False: #isDir
- returnList.append([param["path"]+x[0][0],x[0][1],param["path"]])
- else:
- returnList.append([x[0][0],x[0][1],param["path"]])
-
- return returnList
-
- def playFile(self,param):
- print "playFile: ",param
-
- if self.session.mediaplayer is None:
- self.session.mediaplayer = self.session.open(MediaPlayer)
- self.session.mediaplayer.playlist = PlayList()
- try:
- test = len(self.session.mediaplayer.playlist)
- #Just a test, wether the link is still active.
- except:
- self.session.mediaplayer = self.session.open(MediaPlayer)
- #self.session.mediaplayer.filelist = FileList(root, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True)
- self.session.mediaplayer.playlist = PlayList()
-
- root = param["root"]
- file = param["file"]
-
- mp = self.session.mediaplayer
- ref = eServiceReference(file)
-
- mp.switchToPlayList()
-
- if len(mp.playlist) == 1:
- mp.changeEntry(0)
-
- mp.playlist.addFile(ref)
-
- #mp.playServiceRefEntry(ref)
- print "len len(mp.playlist.getServiceRefList()): ",len(mp.playlist.getServiceRefList())
- if len(mp.playlist.getServiceRefList()):
- lastEntry = len(mp.playlist.getServiceRefList()) -1
- currref = mp.playlist.getServiceRefList()[lastEntry]
- if self.session.nav.getCurrentlyPlayingServiceReference() is None or currref != self.session.nav.getCurrentlyPlayingServiceReference():
- self.session.nav.playService(mp.playlist.getServiceRefList()[lastEntry])
- info = eServiceCenter.getInstance().info(currref)
- description = info and info.getInfoString(currref, iServiceInformation.sDescription) or ""
- mp["title"].setText(description)
- mp.unPauseService()
- #mp.playEntry(len(self.playlist.getServiceRefList()))
-
- mp.playlist.updateList()
- mp.infoTimerFire()
- return
- #
- def writePlaylist(self,param):
- print "writePlaylist: ",param
- filename = "playlist/%s.e2pls" % param
- from Tools.Directories import resolveFilename, SCOPE_CONFIG
-
- if self.session.mediaplayer is None:
- self.session.mediaplayer = self.session.open(MediaPlayer)
- self.session.mediaplayer.playlist = PlayList()
- try:
- test = len(self.session.mediaplayer.playlist)
- #Just a test, wether the link is still active.
- except:
- self.session.mediaplayer = self.session.open(MediaPlayer)
- #self.session.mediaplayer.filelist = FileList(root, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)", useServiceRef = True)
- self.session.mediaplayer.playlist = PlayList()
-
- mp = self.session.mediaplayer
- mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
-
- def command(self,param):
- print "command: ",param
- param = int(param)
-
- try:
- test = len(self.session.mediaplayer.playlist)
- #Just a test, wether the link is still active.
- except:
- self.session.mediaplayer = self.session.open(MediaPlayer)
-
- mp = self.session.mediaplayer
-
- if param == 0:
- mp.previousEntry()
- elif param == 1:
- mp.playEntry()
- elif param == 2:
- mp.pauseEntry()
- elif param == 3:
- mp.nextEntry()
- elif param == 4:
- mp.stopEntry()
- elif param == 5:
- mp.exit()
-
- return
-
- def getList(self):
- return self.result
-
- list = property(getList)
- lut = {"ServiceReference": 0
- ,"IsDirectory": 1
- ,"Root": 2
- }
+class MP(Source):
+ LIST = 0
+ PLAY = 1
+ COMMAND = 3
+ WRITEPLAYLIST = 4
+
+ def __init__(self, session, func=LIST):
+ Source.__init__(self)
+ self.func = func
+ self.session = session
+ error = "unknown command (%s)" % func
+ self.result = ((error, error, error),)
+
+ def handleCommand(self, cmd):
+ self.cmd = cmd
+ if self.func is self.LIST:
+ self.result = self.getFileList(cmd)
+ elif self.func is self.PLAY:
+ self.result = self.playFile(cmd)
+ elif self.func is self.COMMAND:
+ self.result = self.command(cmd)
+ elif self.func is self.WRITEPLAYLIST:
+ self.result = self.writePlaylist(cmd)
+
+ def tryOpenMP(self):
+ # check if there is an active link
+ if hasattr(self.session, "mediaplayer"):
+ mp = self.session.mediaplayer
+ try:
+ len(mp.playlist)
+ except Exception, e:
+ pass
+ else:
+ return True
+
+ # check if we actually have the mp installed
+ try:
+ from Plugins.Extensions.MediaPlayer.plugin import MediaPlayer, MyPlayList
+ # nope, bail out
+ except ImportError, ie:
+ return False
+ else:
+ # mp installed, see if it's running
+ if isinstance(self.session.current_dialog, MediaPlayer):
+ self.session.mediaplayer = self.session.current_dialog
+ return True
+
+ # start new mp
+ self.session.mediaplayer = self.session.open(MediaPlayer)
+ return True
+
+
+ def getFileList(self, param):
+ print "getFileList:", param
+
+ if param["path"] == "playlist":
+ # TODO: Fix dummy return if unable to load mp
+ if not self.tryOpenMP():
+ return (("empty", "True", "playlist"),)
+
+ mp = self.session.mediaplayer
+ if mp.playlist:
+ return [(serviceRef.toString(), "True", "playlist") for serviceRef in mp.playlist.getServiceRefList()]
+ else:
+ return (("empty", "True", "playlist"),)
+
+ matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)" #MediaPlayer-Match
+ useServiceRef = False
+ if param["types"] == "audio":
+ matchingPattern = "(?i)^.*\.(mp3|ogg|wav|wave|m3u|pls|e2pls)"
+ useServiceRef = True
+ elif param["types"] == "video":
+ matchingPattern = "(?i)^.*\.(ts|avi|mpeg|m3u|pls|e2pls|mpg|vob)"
+ useServiceRef = True
+ elif param["types"] == "any":
+ matchingPattern = ".*"
+ else:
+ matchingPattern = param["types"]
+
+ path = param["path"]
+ if path == "undefined":
+ path = None
+ elif path is not None and not os_path.exists(path):
+ # TODO: returning something is better than just dying but is this return sane?
+ return ((None, True, path),)
+
+ filelist = FileList(path, showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
+ list = filelist.getFileList()
+ if useServiceRef is True:
+ returnList = [ (x[0][0].toString(), x[0][1], path) if x[0][1] is False else (x[0][0], x[0][1], path) for x in list ]
+ else:
+ returnList = [ (param["path"] + x[0][0], x[0][1], path) if x[0][1] is False else (x[0][0], x[0][1], path) for x in list ]
+
+ return returnList
+
+ def playFile(self, param):
+ print "playFile: ", param
+ # TODO: fix error handling
+ if not self.tryOpenMP():
+ return
+
+ # TODO: what's the root for?
+ root = param["root"]
+ file = param["file"]
+
+ if not file:
+ return
+
+ mp = self.session.mediaplayer
+ ref = eServiceReference(file)
+ if not ref.valid():
+ ref = eServiceReference(4097, 0, file)
+
+ mp.playlist.addFile(ref)
+ mp.playServiceRefEntry(ref)
+ mp.playlist.updateList()
+
+ def writePlaylist(self, param):
+ print "writePlaylist: ", param
+ filename = "playlist/%s.e2pls" % param
+ from Tools.Directories import resolveFilename, SCOPE_CONFIG
+
+ # TODO: fix error handling
+ if not self.tryOpenMP():
+ return
+
+ mp = self.session.mediaplayer
+ mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
+
+ def command(self, param):
+ print "command: ", param
+
+ # TODO: fix error handling
+ if not self.tryOpenMP():
+ return
+
+ mp = self.session.mediaplayer
+
+ if param == "previous":
+ mp.previousEntry()
+ elif param == "play":
+ mp.playEntry()
+ elif param == "pause":
+ mp.pauseEntry()
+ elif param == "next":
+ mp.nextEntry()
+ elif param == "stop":
+ mp.stopEntry()
+ elif param == "exit":
+ mp.exit()
+
+ list = property(lambda self: self.result)
+ lut = {"ServiceReference": 0
+ , "IsDirectory": 1
+ , "Root": 2
+ }