mirror of
https://github.com/spl0k/supysonic.git
synced 2024-12-22 17:06:17 +00:00
Converting api:browsing
This commit is contained in:
parent
4dd8c28729
commit
8725500ec7
@ -19,7 +19,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from flask import request
|
||||
from web import app
|
||||
from web import app, store
|
||||
from db import Folder, Artist, Album, Track
|
||||
from . import get_entity
|
||||
import uuid, time, string
|
||||
@ -31,7 +31,7 @@ def list_folders():
|
||||
'musicFolder': [ {
|
||||
'id': str(f.id),
|
||||
'name': f.name
|
||||
} for f in Folder.query.filter(Folder.root == True).order_by(Folder.name).all() ]
|
||||
} for f in store.find(Folder, Folder.root == True).order_by(Folder.name) ]
|
||||
}
|
||||
})
|
||||
|
||||
@ -46,25 +46,25 @@ def list_indexes():
|
||||
return request.error_formatter(0, 'Invalid timestamp')
|
||||
|
||||
if musicFolderId is None:
|
||||
folder = Folder.query.filter(Folder.root == True).all()
|
||||
folder = store.find(Folder, Folder.root == True)
|
||||
else:
|
||||
try:
|
||||
mfid = uuid.UUID(musicFolderId)
|
||||
except:
|
||||
return request.error_formatter(0, 'Invalid id')
|
||||
|
||||
folder = Folder.query.get(mfid)
|
||||
folder = store.get(Folder, mfid)
|
||||
|
||||
if not folder or (type(folder) is not list and not folder.root):
|
||||
if not folder or (type(folder) is Folder and not folder.root):
|
||||
return request.error_formatter(70, 'Folder not found')
|
||||
|
||||
last_modif = max(map(lambda f: f.last_scan, folder)) if type(folder) is list else folder.last_scan
|
||||
last_modif = max(map(lambda f: f.last_scan, folder)) if type(folder) is not Folder else folder.last_scan
|
||||
|
||||
if (not ifModifiedSince is None) and last_modif < ifModifiedSince:
|
||||
return request.formatter({ 'indexes': { 'lastModified': last_modif * 1000 } })
|
||||
|
||||
# The XSD lies, we don't return artists but a directory structure
|
||||
if type(folder) is list:
|
||||
if type(folder) is not Folder:
|
||||
artists = []
|
||||
childs = []
|
||||
for f in folder:
|
||||
@ -121,7 +121,7 @@ def show_directory():
|
||||
def list_artists():
|
||||
# According to the API page, there are no parameters?
|
||||
indexes = {}
|
||||
for artist in Artist.query.all():
|
||||
for artist in store.find(Artist):
|
||||
index = artist.name[0].upper() if artist.name else '?'
|
||||
if index in map(str, xrange(10)):
|
||||
index = '#'
|
||||
|
32
db.py
32
db.py
@ -26,7 +26,7 @@ from storm.variables import Variable
|
||||
|
||||
import uuid, datetime, time
|
||||
import os.path
|
||||
|
||||
|
||||
def now():
|
||||
return datetime.datetime.now().replace(microsecond = 0)
|
||||
|
||||
@ -71,14 +71,14 @@ class Folder(object):
|
||||
if self.has_cover_art:
|
||||
info['coverArt'] = str(self.id)
|
||||
|
||||
starred = StarredFolder.query.get((user.id, self.id))
|
||||
starred = Store.of(self).get(StarredFolder, (user.id, self.id))
|
||||
if starred:
|
||||
info['starred'] = starred.date.isoformat()
|
||||
|
||||
rating = RatingFolder.query.get((user.id, self.id))
|
||||
rating = Store.of(self).get(RatingFolder, (user.id, self.id))
|
||||
if rating:
|
||||
info['userRating'] = rating.rating
|
||||
avgRating = RatingFolder.query.filter(RatingFolder.rated_id == self.id).value(func.avg(RatingFolder.rating))
|
||||
avgRating = Store.of(self).find(RatingFolder, RatingFolder.rated_id == self.id).avg(RatingFolder.rating)
|
||||
if avgRating:
|
||||
info['averageRating'] = avgRating
|
||||
|
||||
@ -95,10 +95,10 @@ class Artist(object):
|
||||
'id': str(self.id),
|
||||
'name': self.name,
|
||||
# coverArt
|
||||
'albumCount': len(self.albums)
|
||||
'albumCount': self.albums.count()
|
||||
}
|
||||
|
||||
starred = StarredArtist.query.get((user.id, self.id))
|
||||
starred = Store.of(self).get(StarredArtist, (user.id, self.id))
|
||||
if starred:
|
||||
info['starred'] = starred.date.isoformat()
|
||||
|
||||
@ -118,14 +118,16 @@ class Album(object):
|
||||
'name': self.name,
|
||||
'artist': self.artist.name,
|
||||
'artistId': str(self.artist_id),
|
||||
'songCount': len(self.tracks),
|
||||
'duration': sum(map(lambda t: t.duration, self.tracks)),
|
||||
'created': min(map(lambda t: t.created, self.tracks)).isoformat()
|
||||
'songCount': self.tracks.count(),
|
||||
'duration': sum(self.tracks.values(Track.duration)),
|
||||
'created': min(self.tracks.values(Track.created)).isoformat()
|
||||
}
|
||||
if self.tracks[0].folder.has_cover_art:
|
||||
info['coverArt'] = str(self.tracks[0].folder_id)
|
||||
|
||||
starred = StarredAlbum.query.get((user.id, self.id))
|
||||
track_with_cover = self.tracks.find(Track.folder_id == Folder.id, Folder.has_cover_art).any()
|
||||
if track_with_cover:
|
||||
info['coverArt'] = str(track_with_cover.folder_id)
|
||||
|
||||
starred = Store.of(self).get(StarredAlbum, (user.id, self.id))
|
||||
if starred:
|
||||
info['starred'] = starred.date.isoformat()
|
||||
|
||||
@ -194,14 +196,14 @@ class Track(object):
|
||||
if self.folder.has_cover_art:
|
||||
info['coverArt'] = str(self.folder_id)
|
||||
|
||||
starred = StarredTrack.query.get((user.id, self.id))
|
||||
starred = Store.of(self).get(StarredTrack, (user.id, self.id))
|
||||
if starred:
|
||||
info['starred'] = starred.date.isoformat()
|
||||
|
||||
rating = RatingTrack.query.get((user.id, self.id))
|
||||
rating = Store.of(self).get(RatingTrack, (user.id, self.id))
|
||||
if rating:
|
||||
info['userRating'] = rating.rating
|
||||
avgRating = RatingTrack.query.filter(RatingTrack.rated_id == self.id).value(func.avg(RatingTrack.rating))
|
||||
avgRating = Store.of(self).find(RatingTrack, RatingTrack.rated_id == self.id).avg(RatingTrack.rating)
|
||||
if avgRating:
|
||||
info['averageRating'] = avgRating
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user