0fdce423 |
from twisted.web import server, resource
from twisted.internet import reactor
from twisted.internet import task
import mpdprotocol
import jinja2
import json
class MPDResource(resource.Resource):
isLeaf = True
jinja2env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates'))
def do(self, mpc, request):
d = mpc.sendCommand('playlistinfo')
cb = self.render_playlist
if 'json' in request.args:
if 'table' in request.args:
cb = self.render_as_table_json
else:
cb = self.render_as_json
d.addCallback(cb, request)
return d
def render_as_table_json(self, result, request):
method, data = result
request.setHeader('Content-Type', 'application/json')
request.write(json.dumps(data.as_table()));
request.finish()
def render_as_json(self, result, request):
method, data = result
request.setHeader('Content-Type', 'application/json')
request.write(json.dumps(data.as_list()));
request.finish()
def render_playlist(self, result, request):
print('rendering playlist!')
method, data = result
template = self.jinja2env.get_template('playlist.html')
tdata = []
for datum in data.as_list():
tdata.append([])
tdata[-1].append(('pos', datum['Pos']))
tdata[-1].append(('title', datum['Title']))
tdata[-1].append(('artist', datum['Artist']))
tdata[-1].append(('album', datum['Album']))
tdata[-1].append(('genre', datum['Genre']))
request.write(template.render(playlist=tdata).encode('utf-8'))
request.finish()
def failed(self, failure, request):
print "whjat should I do here?"
print self, failure, request
failure.printTraceback()
failure.raiseException()
def render_GET(self, request):
print('ello world!')
d = mpdprotocol.get_client().addCallback(self.do, request)
d.addErrback(self.failed, request)
return server.NOT_DONE_YET
resource = MPDResource()
|