1 from enigma import eServiceReference, iServiceInformation, eServiceCenter
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"]
85 filelist = FileList(param["path"], showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
86 list = filelist.getFileList()
87 if useServiceRef is True:
88 returnList = [ (x[0][0].toString(), x[0][1], param["path"]) if x[0][1] is False else (x[0][0], x[0][1], param["path"]) for x in list ]
90 returnList = [ (param["path"] + x[0][0], x[0][1], param["path"]) if x[0][1] is False else (x[0][0], x[0][1], param["path"]) for x in list ]
94 def playFile(self, param):
95 print "playFile: ", param
96 # TODO: fix error handling
97 if not self.tryOpenMP():
100 # TODO: what's the root for?
107 mp = self.session.mediaplayer
108 ref = eServiceReference(4097, 0, file)
110 mp.playlist.addFile(ref)
111 mp.playServiceRefEntry(ref)
112 mp.playlist.updateList()
114 def writePlaylist(self, param):
115 print "writePlaylist: ", param
116 filename = "playlist/%s.e2pls" % param
117 from Tools.Directories import resolveFilename, SCOPE_CONFIG
119 # TODO: fix error handling
120 if not self.tryOpenMP():
123 mp = self.session.mediaplayer
124 mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
126 def command(self, param):
127 print "command: ", param
129 # TODO: fix error handling
130 if not self.tryOpenMP():
133 mp = self.session.mediaplayer
135 if param == "previous":
137 elif param == "play":
139 elif param == "pause":
141 elif param == "next":
143 elif param == "stop":
145 elif param == "exit":
148 list = property(lambda self: self.result)
149 lut = {"ServiceReference": 0