# Copyright (c) 2011 Edward Langley # All rights reserved. # -*- coding: utf-8 -*- 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()