summaryrefslogtreecommitdiff
path: root/app.py
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2012-12-16 11:53:03 +0100
committerJon Bergli Heier <snakebite@jvnv.net>2012-12-16 11:53:03 +0100
commit3072dcabb7f8d35f21ebfaeae53a1218ecd9d43e (patch)
treecc117e7da3923bc7948c0ce19cac985a297c4468 /app.py
parentb96cdbf27095f57c4800f1295ddc76482ba62443 (diff)
Added album view.
Diffstat (limited to 'app.py')
-rwxr-xr-xapp.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/app.py b/app.py
index 5a077e0..8aecdf8 100755
--- a/app.py
+++ b/app.py
@@ -80,16 +80,46 @@ class JSONApplication(object):
start_response('200 OK', [])
return json.dumps(results)
+ def albums(self, environ, start_response, path):
+ page = int(path[1] if len(path) > 1 else 0)
+ page_size = config.getint('album_pagesize', default = 75)
+ try:
+ session = db.Session()
+ albums = session.query(db.Album).offset(page*page_size).limit(page_size)
+ results = [{'id': a.id, 'name': a.name, 'artist': {'name': a.artist.name}} for a in albums]
+ finally:
+ session.close()
+
+ start_response('200 OK', [])
+ return json.dumps(results)
+
+ def album(self, environ, start_response, path):
+ album = int(path[1])
+ try:
+ session = db.Session()
+ album = session.query(db.Album).filter(db.Album.id == album).one()
+ results = [self.format_track(x) for x in album.tracks]
+ finally:
+ session.close()
+
+ start_response('200 OK', [])
+ return json.dumps(results)
+
handlers = {
'list': list,
'hint': hint,
'search': search,
+ 'albums': albums,
+ 'album': album,
}
def __call__(self, environ, start_response, path):
module = path[0]
if module in self.handlers:
return self.handlers[module](self, environ, start_response, path)
+ else:
+ start_response('404 Not Found', [])
+ return []
class Application(object):
rfc1123_format = '%a, %d %b %Y %H:%M:%S +0000'
@@ -163,11 +193,32 @@ class Application(object):
return self._serve_path(environ, start_response, filename)
+ def album_cover(self, environ, start_response, path):
+ album = int(path[1].split('.')[0])
+ session = db.Session()
+ cover = None
+ try:
+ album = db.Album.get_by_id(session, album)
+ import coverart
+ cover = coverart.get_coverart(album)
+ except db.NoResultFound:
+ start_response('404 Not Found', [])
+ return []
+ finally:
+ session.close()
+
+ if not cover:
+ start_response('302 Found', [('Location', '/static/nocover.jpg')])
+ return []
+
+ return self._serve_path(environ, start_response, cover)
+
handlers = {
'json': json,
'static': static,
'file': file,
'track': track,
+ 'album-cover': album_cover,
}
def __call__(self, environ, start_response):