git.fiddlerwoaroof.com
Raw Blame History
# -*- 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()