# 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():
return send_from_directory(DATA_DIR / "songs" / userid, songid + ".mp3")
+@app.get("/songs-by-tag/<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
################################################################################
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
--- /dev/null
+{% extends "base.html" %}
+
+{% block title %}Songs with Tag: {{ tag }}{% endblock %}
+
+{% block body %}
+
+<h1 class="tag-name">Songs tagged with '{{ tag }}'</h1>
+
+{% for song in songs %}
+<div class="song">
+ <div class="song-title">{{ song["title"] }}</div>
+ <audio src="/song/{{ song["userid"] }}/{{ song["songid"] }}" controls></audio>
+ <div class="song-description">{{ song["description"] }}</div>
+ <div class="song-tags">
+ {% for tag in songs_tags[song["songid"]] %}
+ <a href="/songs-by-tag/{{ tag["tag"] }}">{{ tag["tag"] }}</a>
+ {% endfor %}
+ </div>
+ <div class="song-collabs">
+ {% for collab in songs_collaborators[song["songid"]] %}
+ {% if collab["name"].startswith("@") %}
+ <a href="/users/{{ collab["name"][1:] }}" class="collab-link">{{ collab["name"] }}</a>
+ {% else %}
+ <span class="collab-name">{{ collab["name"] }}</span>
+ {% endif %}
+ {% endfor %}
+ </div>
+</div>
+{% endfor %}
+
+{% endblock %}