1 from enigma import eServiceReference
2 from Components.Sources.Source import Source
3 from Components.FileList import FileList
4 from os import path as os_path
13 def __init__(self, session, func=LIST):
16 self.session = session
17 error = "unknown command (%s)" % func
19 self.result = ((error, error, error),)
21 self.result = (False, error)
23 def handleCommand(self, cmd):
27 self.result = self.getFileList(cmd)
28 elif func is self.PLAY:
29 self.result = self.playFile(cmd)
30 elif func is self.COMMAND:
31 self.result = self.command(cmd)
32 elif func is self.WRITEPLAYLIST:
33 self.result = self.writePlaylist(cmd)
34 elif func is self.ADD:
35 self.result = self.addFile(cmd)
38 # check if there is an active link
39 if hasattr(self.session, "mediaplayer"):
40 mp = self.session.mediaplayer
48 # check if we actually have the mp installed
50 from Plugins.Extensions.MediaPlayer.plugin import MediaPlayer, MyPlayList
52 except ImportError, ie:
55 # mp installed, see if it's running
56 if isinstance(self.session.current_dialog, MediaPlayer):
57 self.session.mediaplayer = self.session.current_dialog
60 self.session.mediaplayer = self.session.open(MediaPlayer)
61 return self.session.mediaplayer
63 def getFileList(self, param):
64 if param["path"] == "playlist":
66 # TODO: Fix dummy return if unable to load mp
68 return (("empty", "True", "playlist"),)
71 return [(serviceRef.toString(), "True", "playlist") for serviceRef in mp.playlist.getServiceRefList()]
73 return (("empty", "True", "playlist"),)
75 matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)" #MediaPlayer-Match
77 if param["types"] == "audio":
78 matchingPattern = "(?i)^.*\.(mp3|ogg|wav|wave|m3u|pls|e2pls)"
80 elif param["types"] == "video":
81 matchingPattern = "(?i)^.*\.(ts|avi|mpeg|m3u|pls|e2pls|mpg|vob)"
83 elif param["types"] == "any":
84 matchingPattern = ".*"
86 matchingPattern = param["types"]
89 if path == "undefined":
91 elif path is not None and not os_path.exists(path):
92 # TODO: returning something is better than just dying but is this return sane?
93 return ((None, True, path),)
95 filelist = FileList(path, showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
96 list = filelist.getFileList()
97 if useServiceRef is True:
98 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 ]
100 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 ]
104 def playFile(self, param):
105 return self.addFile(param, play=True)
107 def addFile(self, param, play=False):
108 # TODO: fix error handling
109 mp = self.tryOpenMP()
111 return (False, "mediaplayer not installed")
113 # TODO: what's the root for?
118 return (False, "missing or invalid parameter file")
120 ref = eServiceReference(file)
122 if not os_path.exists(file):
123 return (False, "%s is neither a valid reference nor a valid file" % file)
124 ref = eServiceReference(4097, 0, file)
126 mp.playlist.addFile(ref)
128 mp.playServiceRefEntry(ref)
129 ret = (True, "%s added to playlist and playback started" % file)
131 ret = (True, "%s added to playlist" % file)
133 mp.playlist.updateList()
136 def writePlaylist(self, param):
137 filename = "playlist/%s.e2pls" % param
138 from Tools.Directories import resolveFilename, SCOPE_CONFIG
140 # TODO: fix error handling
141 mp = self.tryOpenMP()
143 return (False, "mediaplayer not installed")
145 fullPath = resolveFilename(SCOPE_CONFIG, filename)
146 mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
147 return (True, "playlist saved to %s" % fullPath)
149 def command(self, param):
150 # TODO: fix error handling
151 mp = self.tryOpenMP()
153 return (False, "mediaplayer not installed")
155 if param == "previous":
156 mp.previousMarkOrEntry()
157 elif param == "play":
159 elif param == "pause":
161 elif param == "next":
163 elif param == "stop":
165 elif param == "exit":
168 return (False, "unknown parameter %s" % param)
169 return (True, "executed %s" % param)
171 list = property(lambda self: self.result)
172 lut = {"ServiceReference": 0