1 from enigma import eServiceReference, iServiceInformation, eServiceCenter
2 from Components.Sources.Source import Source
3 from ServiceReference import ServiceReference
4 from Components.FileList import FileList
5 from os import path as os_path
13 def __init__(self, session, func=LIST):
16 self.session = session
17 error = "unknown command (%s)" % func
18 self.result = ((error, error, error),)
20 def handleCommand(self, cmd):
22 if self.func is self.LIST:
23 self.result = self.getFileList(cmd)
24 elif self.func is self.PLAY:
25 self.result = self.playFile(cmd)
26 elif self.func is self.COMMAND:
27 self.result = self.command(cmd)
28 elif self.func is self.WRITEPLAYLIST:
29 self.result = self.writePlaylist(cmd)
32 # See is the Link is still active
33 if self.session.mediaplayer is not None:
35 test = len(self.session.mediaplayer.playlist)
40 # Link inactive, instantiate new MP
42 from Plugins.Extensions.MediaPlayer.plugin import MediaPlayer, MyPlayList
43 self.session.mediaplayer = self.session.open(MediaPlayer)
44 self.session.mediaplayer.playlist = MyPlayList()
48 except ImportError, ie:
51 def getFileList(self, param):
52 print "getFileList:", param
54 if param["path"] == "playlist":
55 # TODO: Fix dummy return if unable to load mp
56 if not self.tryOpenMP():
57 return (("empty", "True", "playlist"),)
59 mp = self.session.mediaplayer
61 return [(serviceRef.toString(), "True", "playlist") for serviceRef in mp.playlist.getServiceRefList()]
63 return (("empty", "True", "playlist"),)
67 matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob)" #MediaPlayer-Match
69 if param["types"] == "audio":
70 matchingPattern = "(?i)^.*\.(mp3|ogg|wav|wave|m3u|pls|e2pls)"
72 elif param["types"] == "video":
73 matchingPattern = "(?i)^.*\.(ts|avi|mpeg|m3u|pls|e2pls|mpg|vob)"
75 elif param["types"] == "any":
76 matchingPattern = ".*"
78 matchingPattern = param["types"]
80 filelist = FileList(param["path"], showDirectories=True, showFiles=True, matchingPattern=matchingPattern, useServiceRef=useServiceRef, isTop=False)
81 list = filelist.getFileList()
83 if useServiceRef == True:
84 if x[0][1] == False: #isDir
85 returnList.append((x[0][0].toString(), x[0][1], param["path"]))
87 returnList.append((x[0][0], x[0][1], param["path"]))
89 if x[0][1] == False: #isDir
90 returnList.append((param["path"] + x[0][0], x[0][1], param["path"]))
92 returnList.append((x[0][0], x[0][1], param["path"]))
96 def playFile(self, param):
97 print "playFile: ", param
98 # TODO: fix error handling
99 if not self.tryOpenMP():
105 mp = self.session.mediaplayer
106 ref = eServiceReference(file)
108 mp.switchToPlayList()
110 if len(mp.playlist) == 1:
113 mp.playlist.addFile(ref)
115 #mp.playServiceRefEntry(ref)
116 sRefList = mp.playlist.getServiceRefList()
118 print "len len(mp.playlist.getServiceRefList()): ", len(mp.playlist.getServiceRefList())
121 currref = sRefList[lastEntry]
122 if self.session.nav.getCurrentlyPlayingServiceReference() is None or currref != self.session.nav.getCurrentlyPlayingServiceReference():
123 self.session.nav.playService(sRefList[lastEntry])
124 info = eServiceCenter.getInstance().info(currref)
125 description = info and info.getInfoString(currref, iServiceInformation.sDescription) or ""
126 mp["title"].setText(description)
128 #mp.playEntry(len(self.playlist.getServiceRefList()))
130 mp.playlist.updateList()
133 def writePlaylist(self, param):
134 print "writePlaylist: ", param
135 filename = "playlist/%s.e2pls" % param
136 from Tools.Directories import resolveFilename, SCOPE_CONFIG
138 # TODO: fix error handling
139 if not self.tryOpenMP():
142 mp = self.session.mediaplayer
143 mp.playlistIOInternal.save(resolveFilename(SCOPE_CONFIG, filename))
145 def command(self, param):
146 print "command: ", param
148 # TODO: fix error handling
149 if not self.tryOpenMP():
152 mp = self.session.mediaplayer
154 if param == "previous":
156 elif param == "play":
158 elif param == "pause":
160 elif param == "next":
162 elif param == "stop":
164 elif param == "exit":
167 list = property(lambda self: self.result)
168 lut = {"ServiceReference": 0