]> littlesong.place Git - littlesongplace.git/commitdiff
Add song delete button
authorChris Fulljames <christianfulljames@gmail.com>
Mon, 6 Jan 2025 12:30:21 +0000 (07:30 -0500)
committerChris Fulljames <christianfulljames@gmail.com>
Mon, 6 Jan 2025 12:30:21 +0000 (07:30 -0500)
main.py
templates/profile.html
todo.txt

diff --git a/main.py b/main.py
index 55002e8912bfc2aa687272734b5f935b4c85122f..d976c71d43c9b8849bdbaafeda90fd565d77e47e 100644 (file)
--- a/main.py
+++ b/main.py
@@ -204,6 +204,37 @@ def upload_song():
 
     return redirect(request.referrer)
 
+@app.get("/delete-song/<userid>/<songid>")
+def delete_song(userid, songid):
+    try:
+        # Make sure values are valid integers
+        int(userid)
+        int(songid)
+    except ValueError:
+        abort(404)
+
+    # Users can only delete their own songs
+    if int(userid) != session["userid"]:
+        abort(401)
+
+    if not query_db("select * from songs where songid = ?", [songid]):
+        abort(404)  # Song doesn't exist
+
+    # Delete tags, collaborators
+    query_db("delete from song_tags where songid = ?", [songid])
+    query_db("delete from song_collaborators where songid = ?", [songid])
+
+    # Delete song database entry
+    query_db("delete from songs where songid = ?", [songid])
+    get_db().commit()
+
+    # Delete song file from disk
+    songpath = DATA_DIR / "songs" / userid / (songid + ".mp3")
+    if songpath.exists():
+        os.remove(songpath)
+
+    return redirect(request.referrer)
+
 @app.get("/song/<userid>/<songid>")
 def song(userid, songid):
     try:
index 558c47e2e7e4ef49b30b9223c63632197cca2258..dfa66ae7f1e196a7b9c81ecafdc1eb4a0f83c340 100644 (file)
@@ -51,14 +51,31 @@ document.getElementById("file-select").addEventListener("change", function(e) {
 <!-- TODO: This is duplicated in songs-by-tag.html -->
 {% for song in songs %}
 <div class="song">
-    <div class="song-title">{{ song["title"] }}</div>
+    <!-- Song Title -->
+    <div class="song-title"><h3>{{ song["title"] }}</h3></div>
+
+    <!-- Owner-Specific Buttons (Edit/Delete) -->
+    {% if name == username %}
+    <!-- TODO: Edit button -->
+    <div class="song-delete-button">
+    <a href="/delete-song/{{ song["userid"] }}/{{ song["songid"] }}">Delete</a>
+    </div>
+    {% endif %}
+
+    <!-- Play Button -->
     <audio src="/song/{{ song["userid"] }}/{{ song["songid"] }}" controls></audio>
+
+    <!-- Song Description -->
     <div class="song-description">{{ song["description"] }}</div>
+
+    <!-- Song Tags -->
     <div class="song-tags">
         {% for tag in songs_tags[song["songid"]] %}
         <a href="/songs-by-tag/{{ tag["tag"] }}">{{ tag["tag"] }}</a>
         {% endfor %}
     </div>
+
+    <!-- Song Collaborators -->
     <div class="song-collabs">
         {% for collab in songs_collaborators[song["songid"]] %}
             {% if collab["name"].startswith("@") %}
index 3dcc677367f021a3ca6fc223ff53427e02b97541..95997ce4665f96bf75cba307652f73c4ffa413a8 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -2,6 +2,7 @@
 - edit song info
 - user bio
 - edit user bio
+- delete user account
 
 - javascript song player
 
@@ -10,6 +11,8 @@
 
 - css/design
 
+- playlists
+
 URL
 secrethideout.net
 sneaky.place