git.fiddlerwoaroof.com
web_bridge.py
5475dee4
 # Copyright (c) 2011 Edward Langley
 # All rights reserved.
0fdce423
 # -*- coding: utf-8 -*-
5475dee4
 
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()