1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-12-22 08:56:17 +00:00

Implemented getMusicDirectory.view

This commit is contained in:
Alban 2012-11-11 00:01:52 +01:00
parent e022f09db8
commit 584f1cf90c
2 changed files with 40 additions and 1 deletions

View File

@ -79,7 +79,31 @@ def list_indexes():
'name': a.name
} for a in sorted(v, key = lambda a: a.name.lower()) ]
} for k, v in sorted(indexes.iteritems()) ],
'child': [ c.as_subsonic_child() for c in sorted(childs, key = lambda t: t.album.artist.name + t.album.name + str(t.disc) + str(t.number) + t.title ) ]
'child': [ c.as_subsonic_child() for c in sorted(childs, key = lambda t: t.sort_key()) ]
}
})
@app.route('/rest/getMusicDirectory.view')
def show_directory():
did = request.args.get('id')
if not did:
return request.error_formatter(10, 'Missing directory id')
try:
fid = uuid.UUID(did)
except:
return request.error_formatter(0, 'Invalid directory id')
folder = Folder.query.get(fid)
if not folder:
return request.error_formatter(70, 'Directory not found')
directory = {
'id': str(folder.id),
'name': folder.name,
'child': [ f.as_subsonic_child() for f in sorted(folder.children, key = lambda c: c.name) ] + [ t.as_subsonic_child() for t in sorted(folder.tracks, key = lambda t: t.sort_key()) ]
}
if not folder.root:
directory['parent'] = str(folder.parent_id)
return request.formatter({ 'directory': directory })

15
db.py
View File

@ -67,6 +67,18 @@ class Folder(Base):
parent_id = Column(UUID, ForeignKey('folder.id'), nullable = True)
children = relationship('Folder', backref = backref('parent', remote_side = [ id ]))
def as_subsonic_child(self):
info = {
'id': str(self.id),
'isDir': True,
'title': self.name,
}
if not self.root:
info['parent'] = str(self.parent_id)
info['artist'] = self.parent.name
return info
class Artist(Base):
__tablename__ = 'artist'
@ -144,6 +156,9 @@ class Track(Base):
ret = '%02i:%s' % (self.duration / 3600, ret)
return ret
def sort_key(self):
return self.album.artist.name + self.album.name + ("%02i" % self.disc) + ("%02i" % self.number) + self.title
def init_db():
Base.metadata.create_all(bind = engine)