starred view

This commit is contained in:
dave 2017-08-15 22:16:48 -07:00
parent c7af853358
commit b6daecdd5e
3 changed files with 81 additions and 38 deletions

View File

@ -162,43 +162,48 @@ class PysonicApi(object):
if not item["isdir"] and item["type"] not in MUSIC_TYPES: if not item["isdir"] and item["type"] not in MUSIC_TYPES:
continue continue
item_meta = self.db.decode_metadata(item['metadata']) item_meta = self.db.decode_metadata(item['metadata'])
child = doc.new_tag("child", dirtag.append(self.render_node(doc, item, item_meta, directory, dir_meta))
id=item["id"],
parent=directory["id"],
isDir="true" if item['isdir'] else "false",
title=item_meta.get("id3_title", item["name"]),
album=item_meta.get("id3_album", item["album"]),
artist=item_meta.get("id3_artist", item["artist"]),
# playCount="5",
# created="2016-04-25T07:31:33.000Z"
# X track="3",
# X year="2012",
# X coverArt="12835",
# X contentType="audio/mpeg"
# X suffix="mp3"
# genre="Other",
# size="15838864"
# duration="395"
# bitRate="320"
# path="Cosmic Gate/Sign Of The Times/03 Flatline (featuring Kyler England).mp3"
albumId=directory["id"],
artistId=directory["parent"],
type="music")
if "." in item["name"]:
child.attrs["suffix"] = item["name"].split(".")[-1]
if item["type"]:
child.attrs["contentType"] = item["type"]
if 'cover' in item_meta:
child.attrs["coverArt"] = item_meta["cover"]
elif 'cover' in dir_meta:
child.attrs["coverArt"] = dir_meta["cover"]
if 'track' in item_meta:
child.attrs["track"] = item_meta['track']
if 'id3_year' in item_meta:
child.attrs["year"] = item_meta['id3_year']
dirtag.append(child)
yield doc.prettify() yield doc.prettify()
def render_node(self, doc, item, item_meta, directory, dir_meta, tagname="child"):
child = doc.new_tag(tagname,
id=item["id"],
parent=item["id"],
isDir="true" if item['isdir'] else "false",
title=item_meta.get("id3_title", item["name"]),
album=item_meta.get("id3_album", item["album"]),
artist=item_meta.get("id3_artist", item["artist"]),
# playCount="5",
# created="2016-04-25T07:31:33.000Z"
# X track="3",
# X year="2012",
# X coverArt="12835",
# X contentType="audio/mpeg"
# X suffix="mp3"
# genre="Other",
# size="15838864"
# duration="395"
# bitRate="320"
# path="Cosmic Gate/Sign Of The Times/03 Flatline (featuring Kyler England).mp3"
type="music")
if "albumId" in directory:
child.attrs["albumId"] = directory["id"]
if "artistId" in directory:
child.attrs["artistId"] = directory["parent"]
if "." in item["name"]:
child.attrs["suffix"] = item["name"].split(".")[-1]
if item["type"]:
child.attrs["contentType"] = item["type"]
if 'cover' in item_meta:
child.attrs["coverArt"] = item_meta["cover"]
elif 'cover' in dir_meta:
child.attrs["coverArt"] = dir_meta["cover"]
if 'track' in item_meta:
child.attrs["track"] = item_meta['track']
if 'id3_year' in item_meta:
child.attrs["year"] = item_meta['id3_year']
return child
@cherrypy.expose @cherrypy.expose
def stream_view(self, id, maxBitRate="256", **kwargs): def stream_view(self, id, maxBitRate="256", **kwargs):
maxBitRate = int(maxBitRate) maxBitRate = int(maxBitRate)
@ -313,10 +318,32 @@ class PysonicApi(object):
@cherrypy.expose @cherrypy.expose
def star_view(self, id, **kwargs): def star_view(self, id, **kwargs):
self.library.set_starred(cherrypy.request.login, int(id), starred=True) self.library.set_starred(cherrypy.request.login, int(id), starred=True)
print(cherrypy.request.login)
yield self.response()[0].prettify() yield self.response()[0].prettify()
@cherrypy.expose @cherrypy.expose
def unstar_view(self, id, **kwargs): def unstar_view(self, id, **kwargs):
self.library.set_starred(cherrypy.request.login, int(id), starred=False) self.library.set_starred(cherrypy.request.login, int(id), starred=False)
yield self.response()[0].prettify() yield self.response()[0].prettify()
@cherrypy.expose
def getStarred_view(self, **kwargs):
children = self.library.get_starred(cherrypy.request.login)
cherrypy.response.headers['Content-Type'] = 'text/xml; charset=utf-8'
doc, root = self.response()
tag = doc.new_tag("starred")
#directory = self.library.get_dir(dir_id)
#dir_meta = self.db.decode_metadata(directory["metadata"])
#children = self.library.get_dir_children(dir_id)
root.append(tag)
for item in children:
# omit not dirs and media in browser
if not item["isdir"] and item["type"] not in MUSIC_TYPES:
continue
item_meta = self.db.decode_metadata(item['metadata'])
itemtype = "song" if item["type"] in MUSIC_TYPES else "album"
tag.append(self.render_node(doc, item, item_meta, {}, {}, tagname=itemtype))
yield doc.prettify()

View File

@ -170,3 +170,14 @@ class PysonicDatabase(object):
else: else:
query = "DELETE FROM stars WHERE userid=? and nodeid=?;" query = "DELETE FROM stars WHERE userid=? and nodeid=?;"
cursor.execute(query, (user_id, node_id)) cursor.execute(query, (user_id, node_id))
def get_starred_items(self, for_user_id=None):
with closing(self.db.cursor()) as cursor:
q = """SELECT n.* FROM nodes as n INNER JOIN stars as s ON s.nodeid = n.id"""
qargs = []
if for_user_id:
q += """ AND userid=?"""
qargs += [int(for_user_id)]
print(q)
print(qargs)
return cursor.execute(q, qargs).fetchall()

View File

@ -97,6 +97,11 @@ class PysonicLibrary(object):
def set_starred(self, username, node_id, starred): def set_starred(self, username, node_id, starred):
self.db.set_starred(self.db.get_user(username)["id"], node_id, starred) self.db.set_starred(self.db.get_user(username)["id"], node_id, starred)
def get_stars(self, user, user_id):
self.db.get_stars()
def get_user(self, user): def get_user(self, user):
if type(user) is int: return self.db.get_user(user)
return self.db.get_user(username)
def get_starred(self, username):
return self.db.get_starred_items(self.db.get_user(username)["id"])