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
14 def __init__(self, session, func=LIST):
17 self.session = session
18 error = "unknown command (%s)" % func
20 self.result = ((error, error, error),)
22 self.result = (False, error)
24 def handleCommand(self, cmd):
28 self.result = self.getFileList(cmd)
29 elif func is self.PLAY:
30 self.result = self.playFile(cmd)
31 elif func is self.COMMAND:
32 self.result = self.command(cmd)
33 elif func is self.WRITEPLAYLIST:
34 self.result = self.writePlaylist(cmd)
35 elif func is self.REMOVE:
36 self.result = self.removeFile(cmd)
37 elif func is self.ADD:
38 param = { "file" : cmd, "root" : None}
39 self.result = self.addFile(param)
41 def tryOpenMP(self, noCreate = False):
42 # check if there is an active link
43 if hasattr(self.session, "mediaplayer"):
44 mp = self.session.mediaplayer
52 # check if we actually have the mp installed
54 from Plugins.Extensions.MediaPlayer.plugin import MediaPlayer, MyPlayList
56 except ImportError, ie:
59 # mp installed, see if it's running
60 if isinstance(self.session.current_dialog, MediaPlayer):
61 self.session.mediaplayer = self.session.current_dialog
64 # bail out if we don't want to open a new mp
67 self.session.mediaplayer = self.session.open(MediaPlayer)
68 return self.session.mediaplayer
70 def getFileList(self, param):
71 if param["path"] == "playlist":
73 # TODO: Fix dummy return if unable to load mp
75 return (("empty", True, "playlist"),)
78 return [(serviceRef.getPath(), False, "playlist") for serviceRef in mp.playlist.getServiceRefList()]
80 return (("empty", True, "playlist"),)
82 matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)" #MediaPlayer-Match
84 if param["types"] == "audio":
85 matchingPattern = "(?i)^.*\.(mp3|ogg|wav|wave|m3u|pls|e2pls)"
87 elif param["types"] == "video":
88 matchingPattern = "(?i)^.*\.(ts|avi|mpeg|m3u|pls|e2pls|mpg|vob)"
90 elif param["types"] == "any":
91 matchingPattern = ".*"
93 matchingPattern = param["types"]
96 if path == "Filesystems":
98 elif path is not None and not os_path.isdir(path):
99 # TODO: returning something is better than just dying but is this return sane?
100 return ((None, True, path),)
102 filelist = FileList(path, showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
103 list = filelist.getFileList()
104 if useServiceRef is True:
105 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 ]
107 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 ]
111 def playFile(self, param):
112 return self.addFile(param, doPlay=True)
114 def addFile(self, param, doPlay=False):
115 # TODO: fix error handling
116 mp = self.tryOpenMP()
118 return (False, "mediaplayer not installed")
121 doAdd = False if param["root"] == "playlist" else True
124 return (False, "missing or invalid parameter file")
126 ref = eServiceReference(file)
128 if not os_path.isfile(file):
129 return (False, "%s is neither a valid reference nor a valid file" % file)
130 ref = eServiceReference(4097, 0, file)
133 mp.playlist.addFile(ref)
135 mp.playServiceRefEntry(ref)
137 mp.playlist.updateList()
138 return (True, "%s added to playlist and/or playback started" % (file))
140 def removeFile(self, file):
141 # TODO: fix error handling
142 mp = self.tryOpenMP()
144 return (False, "mediaplayer not installed")
146 ref = eServiceReference(file)
148 if not os_path.isfile(file):
149 return (False, "%s is neither a valid reference nor a valid file" % file)
150 ref = eServiceReference(4097, 0, file)
152 serviceRefList = mp.playlist.getServiceRefList()
154 for mpref in serviceRefList:
156 mp.playlist.deleteFile(i)
157 mp.playlist.updateList()
158 return (True, "%s removed from playlist" % file)
161 return (False, "%s not found in playlist" % file)
163 def writePlaylist(self, param):
164 filename = "playlist/%s.e2pls" % param
165 from Tools.Directories import resolveFilename, SCOPE_CONFIG
167 # TODO: fix error handling
168 mp = self.tryOpenMP()
170 return (False, "mediaplayer not installed")
172 fullPath = resolveFilename(SCOPE_CONFIG, filename)
173 mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
174 return (True, "playlist saved to %s" % fullPath)
176 def command(self, param):
177 # TODO: fix error handling
178 noCreate = True if param == "exit" else False
179 mp = self.tryOpenMP(noCreate=noCreate)
181 return (False, "mediaplayer not installed")
183 return (True, "mediaplayer was not active")
185 if param == "previous":
186 mp.previousMarkOrEntry()
187 elif param == "play":
189 elif param == "pause":
191 elif param == "next":
193 elif param == "stop":
195 elif param == "exit":
198 return (False, "unknown parameter %s" % param)
199 return (True, "executed %s" % param)
201 list = property(lambda self: self.result)
203 "ServiceReference": 0,