From a9df8a9160c3569ef4e3134a54efe75bb7211fd1 Mon Sep 17 00:00:00 2001 From: Chris Fulljames Date: Thu, 3 Jul 2025 21:48:12 -0400 Subject: [PATCH] Allow users to download their own songs --- src/littlesongplace/songs.py | 17 +++++++++++------ .../static/lsp_btn_download02.gif | Bin 0 -> 168 bytes src/littlesongplace/static/nav.js | 4 +++- src/littlesongplace/templates/song.html | 1 + 4 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 src/littlesongplace/static/lsp_btn_download02.gif diff --git a/src/littlesongplace/songs.py b/src/littlesongplace/songs.py index a8c25f8..fbb7ccc 100644 --- a/src/littlesongplace/songs.py +++ b/src/littlesongplace/songs.py @@ -548,17 +548,22 @@ def delete_song(songid): @bp.get("/song//") def song(userid, songid): - if request.args.get("action", None) == "view": + action = request.args.get("action", None) + if action in ["view", "download"]: try: song = by_id(songid) if song.userid != userid: abort(404) - return render_template( - "song.html", - songs=[song], - song=song, - **users.get_user_colors(userid)) + if action == "view": + return render_template( + "song.html", + songs=[song], + song=song, + **users.get_user_colors(userid)) + else: # download + return send_from_directory( + datadir.get_user_songs_path(userid), str(songid) + ".mp3", as_attachment=True, download_name=song.title + ".mp3") except ValueError: abort(404) else: diff --git a/src/littlesongplace/static/lsp_btn_download02.gif b/src/littlesongplace/static/lsp_btn_download02.gif new file mode 100644 index 0000000000000000000000000000000000000000..9137bc86368d12462a757b30d8b528f8f38e4336 GIT binary patch literal 168 zcmZ?wbh9u|6krfwSi}GVFP?3kT)c8m!}{LShrj|LLh(PhpKD04vtxj(k)8oFBS`2c z3#Sf{p#zc!X=h+ome_SiPO0nqlO?Ag>1@9wx1)1vs+*7bTve8dGTtX8Y~t@tgXj|h bYC+PcgiYU>%4q^FMcSgt>uV~bnHa1Ab~!SI literal 0 HcmV?d00001 diff --git a/src/littlesongplace/static/nav.js b/src/littlesongplace/static/nav.js index 932430c..53ea655 100644 --- a/src/littlesongplace/static/nav.js +++ b/src/littlesongplace/static/nav.js @@ -8,7 +8,9 @@ document.addEventListener("DOMContentLoaded", async (e) => { // Handle link clicks with AJAX document.querySelectorAll("a").forEach((anchor) => { anchor.removeEventListener("click", onLinkClick); - anchor.addEventListener("click", onLinkClick); + if (!anchor.download) { + anchor.addEventListener("click", onLinkClick); + } }); // Handle form submissions with AJAX diff --git a/src/littlesongplace/templates/song.html b/src/littlesongplace/templates/song.html index 6e1e49f..85a4983 100644 --- a/src/littlesongplace/templates/song.html +++ b/src/littlesongplace/templates/song.html @@ -24,6 +24,7 @@ {% if session["userid"] == song.userid -%} + {%- endif %}

-- 2.39.5