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
12 def __init__(self, session, func=LIST):
15 self.session = session
16 error = "unknown command (%s)" % func
17 self.result = ((error, error, error),)
19 def handleCommand(self, cmd):
21 if self.func is self.LIST:
22 self.result = self.getFileList(cmd)
23 elif self.func is self.PLAY:
24 self.result = self.playFile(cmd)
25 elif self.func is self.COMMAND:
26 self.result = self.command(cmd)
27 elif self.func is self.WRITEPLAYLIST:
28 self.result = self.writePlaylist(cmd)
31 # check if there is an active link
32 if hasattr(self.session, "mediaplayer"):
33 mp = self.session.mediaplayer
41 # check if we actually have the mp installed
43 from Plugins.Extensions.MediaPlayer.plugin import MediaPlayer, MyPlayList
45 except ImportError, ie:
48 # mp installed, see if it's running
49 if isinstance(self.session.current_dialog, MediaPlayer):
50 self.session.mediaplayer = self.session.current_dialog
54 self.session.mediaplayer = self.session.open(MediaPlayer)
58 def getFileList(self, param):
59 print "getFileList:", param
61 if param["path"] == "playlist":
62 # TODO: Fix dummy return if unable to load mp
63 if not self.tryOpenMP():
64 return (("empty", "True", "playlist"),)
66 mp = self.session.mediaplayer
68 return [(serviceRef.toString(), "True", "playlist") for serviceRef in mp.playlist.getServiceRefList()]
70 return (("empty", "True", "playlist"),)
72 matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)" #MediaPlayer-Match
74 if param["types"] == "audio":
75 matchingPattern = "(?i)^.*\.(mp3|ogg|wav|wave|m3u|pls|e2pls)"
77 elif param["types"] == "video":
78 matchingPattern = "(?i)^.*\.(ts|avi|mpeg|m3u|pls|e2pls|mpg|vob)"
80 elif param["types"] == "any":
81 matchingPattern = ".*"
83 matchingPattern = param["types"]
86 if path == "undefined":
88 elif path is not None and not os_path.exists(path):
89 # TODO: returning something is better than just dying but is this return sane?
90 return ((None, True, path),)
92 filelist = FileList(path, showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
93 list = filelist.getFileList()
94 if useServiceRef is True:
95 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 ]
97 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 ]
101 def playFile(self, param):
102 print "playFile: ", param
103 # TODO: fix error handling
104 if not self.tryOpenMP():
107 # TODO: what's the root for?
114 mp = self.session.mediaplayer
115 ref = eServiceReference(file)
117 ref = eServiceReference(4097, 0, file)
119 mp.playlist.addFile(ref)
120 mp.playServiceRefEntry(ref)
121 mp.playlist.updateList()
123 def writePlaylist(self, param):
124 print "writePlaylist: ", param
125 filename = "playlist/%s.e2pls" % param
126 from Tools.Directories import resolveFilename, SCOPE_CONFIG
128 # TODO: fix error handling
129 if not self.tryOpenMP():
132 mp = self.session.mediaplayer
133 mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
135 def command(self, param):
136 print "command: ", param
138 # TODO: fix error handling
139 if not self.tryOpenMP():
142 mp = self.session.mediaplayer
144 if param == "previous":
146 elif param == "play":
148 elif param == "pause":
150 elif param == "next":
152 elif param == "stop":
154 elif param == "exit":
157 list = property(lambda self: self.result)
158 lut = {"ServiceReference": 0