1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-09-19 10:51:04 +00:00

Started implementing getAlbumList.view

This commit is contained in:
Alban 2012-12-09 18:39:27 +01:00
parent f938e34b0a
commit 004ad255b3

View File

@ -1,11 +1,14 @@
# coding: utf-8
from flask import request
from web import app
from db import Track
from sqlalchemy import desc
from sqlalchemy.orm import aliased
import random
import uuid
from web import app
from db import Track, Folder
@app.route('/rest/getRandomSongs.view', methods = [ 'GET', 'POST' ])
def rand_songs():
size = request.args.get('size', '10')
@ -39,3 +42,44 @@ def rand_songs():
}
})
@app.route('/rest/getAlbumList.view', methods = [ 'GET', 'POST' ])
def album_list():
ltype, size, offset = map(request.args.get, [ 'type', 'size', 'offset' ])
try:
size = int(size) if size else 10
offset = int(offset) if offset else 0
except:
return request.error_formatter(0, 'Invalid parameter format')
query = Folder.query.filter(Folder.tracks.any())
if ltype == 'random':
albums = query.all()
return request.formatter({
'albumList': {
'album': [ random.choice(albums).as_subsonic_child() for x in xrange(size) ]
}
})
elif ltype == 'newest':
query = query.order_by(desc(Folder.created))
elif ltype == 'highest':
return request.error_formatter(0, 'Not implemented')
elif ltype == 'frequent':
return request.error_formatter(0, 'Not implemented')
elif ltype == 'recent':
return request.error_formatter(0, 'Not implemented')
elif ltype == 'starred':
return request.error_formatter(0, 'Not implemented')
elif ltype == 'alphabeticalByName':
query = query.order_by(Folder.name)
elif ltype == 'alphabeticalByArtist':
parent = aliased(Folder)
query = query.join(parent, Folder.parent).order_by(parent.name).order_by(Folder.name)
else:
return request.error_formatter(0, 'Unknown search type')
return request.formatter({
'albumList': {
'album': [ f.as_subsonic_child() for f in query.limit(size).offset(offset) ]
}
})