From 66253e7c033b75ec8efa94b6df0d327a5c397b13 Mon Sep 17 00:00:00 2001 From: Chris Fulljames Date: Sun, 5 Jan 2025 21:12:49 -0500 Subject: [PATCH] Add songs-by-tag view --- main.py | 32 ++++++++++++++++++++++++-------- templates/songs-by-tag.html | 31 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 templates/songs-by-tag.html diff --git a/main.py b/main.py index 6b67547..55002e8 100644 --- a/main.py +++ b/main.py @@ -113,20 +113,15 @@ def users_profile(profile_username): # Get songs for current profile profile_userid = profile_data["userid"] profile_songs_data = query_db("select * from songs where userid = ?", [profile_userid]) - profile_songs_tags = {} - profile_songs_collabs = {} - for song in profile_songs_data: - songid = song["songid"] - profile_songs_tags[songid] = query_db("select (tag) from song_tags where songid = ?", [songid]) - profile_songs_collabs[songid] = query_db("select (name) from song_collaborators where songid = ?", [songid]) + tags, collabs = get_tags_and_collabs_for_songs(profile_songs_data) return render_template( "profile.html", name=profile_username, username=username, songs=profile_songs_data, - songs_tags=profile_songs_tags, - songs_collaborators=profile_songs_collabs) + songs_tags=tags, + songs_collaborators=collabs) @app.post("/uploadsong") def upload_song(): @@ -220,6 +215,19 @@ def song(userid, songid): return send_from_directory(DATA_DIR / "songs" / userid, songid + ".mp3") +@app.get("/songs-by-tag/") +def songs_by_tag(tag): + songs_data = query_db("select * from song_tags inner join songs on song_tags.songid = songs.songid where tag = ?", [tag]) + tags, collabs = get_tags_and_collabs_for_songs(songs_data) + + return render_template( + "songs-by-tag.html", + tag=tag, + username=session["username"], + songs=songs_data, + songs_tags=tags, + songs_collaborators=collabs) + ################################################################################ # Database ################################################################################ @@ -253,6 +261,14 @@ def init_db(): db.cursor().executescript(f.read()) db.commit() +def get_tags_and_collabs_for_songs(songs): + tags = {} + collabs = {} + for song in songs: + songid = song["songid"] + tags[songid] = query_db("select (tag) from song_tags where songid = ?", [songid]) + collabs[songid] = query_db("select (name) from song_collaborators where songid = ?", [songid]) + return tags, collabs ################################################################################ # Generate Session Key diff --git a/templates/songs-by-tag.html b/templates/songs-by-tag.html new file mode 100644 index 0000000..2342f86 --- /dev/null +++ b/templates/songs-by-tag.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} + +{% block title %}Songs with Tag: {{ tag }}{% endblock %} + +{% block body %} + +

Songs tagged with '{{ tag }}'

+ +{% for song in songs %} +
+
{{ song["title"] }}
+ +
{{ song["description"] }}
+
+ {% for tag in songs_tags[song["songid"]] %} + {{ tag["tag"] }} + {% endfor %} +
+
+ {% for collab in songs_collaborators[song["songid"]] %} + {% if collab["name"].startswith("@") %} + {{ collab["name"] }} + {% else %} + {{ collab["name"] }} + {% endif %} + {% endfor %} +
+
+{% endfor %} + +{% endblock %} -- 2.39.5