@@ -9,15 +10,22 @@
{% if playlist.name %}
{{ playlist.name }}
{% else %}
- Llista de temes #{{ playlist.id }}
+ Llista de temes
{% endif %}
- {% if logged_in %}
-
- {% include "fragments/llista/visibility.html" %}
+ {% if logged_in %}
+
+ {% include "fragments/llistes/playlist_visibility.html" %}
+
{% endif %}
diff --git a/folkugat_web/assets/templates/fragments/llistes/playlist_visibility.html b/folkugat_web/assets/templates/fragments/llistes/playlist_visibility.html
new file mode 100644
index 0000000..e20d601
--- /dev/null
+++ b/folkugat_web/assets/templates/fragments/llistes/playlist_visibility.html
@@ -0,0 +1,15 @@
+{% if not playlist.hidden %}
+
+{% else %}
+
+{% endif %}
diff --git a/folkugat_web/dal/sql/playlists/query.py b/folkugat_web/dal/sql/playlists/query.py
index 2b2ab0b..b4f3d7d 100644
--- a/folkugat_web/dal/sql/playlists/query.py
+++ b/folkugat_web/dal/sql/playlists/query.py
@@ -73,19 +73,26 @@ def get_playlist_name(playlist_id: int, con: Connection | None = None) -> str |
def get_all_playlists(logged_in: bool = False, con: Connection | None = None) -> Iterator[model.Playlist]:
if logged_in:
- # Show all playlists for logged in users
+ # Show all playlists for logged in users, except session-associated ones
query = """
SELECT id, name, hidden
FROM playlists
- ORDER BY id ASC
+ WHERE id NOT IN (
+ SELECT DISTINCT playlist_id
+ FROM session_playlists
+ )
+ ORDER BY id DESC
"""
else:
- # Show only visible playlists for non-logged in users
+ # Show only visible playlists for non-logged in users, except session-associated ones
query = """
SELECT id, name, hidden
FROM playlists
- WHERE hidden = 0
- ORDER BY id ASC
+ WHERE hidden = 0 AND id NOT IN (
+ SELECT DISTINCT playlist_id
+ FROM session_playlists
+ )
+ ORDER BY id DESC
"""
with get_connection(con) as con:
diff --git a/folkugat_web/fragments/llistes.py b/folkugat_web/fragments/llistes.py
index f0cae6a..20631c1 100644
--- a/folkugat_web/fragments/llistes.py
+++ b/folkugat_web/fragments/llistes.py
@@ -1,9 +1,11 @@
+from fastapi import Request
+from folkugat_web.model import playlists as playlists_model
from folkugat_web.model.pagines import Pages
from folkugat_web.services import playlists as playlists_service
from folkugat_web.templates import templates
-def llistes_pagina(request, logged_in):
+def llistes_pagina(request: Request, logged_in: bool):
playlists = playlists_service.get_all_playlists(logged_in=logged_in)
return templates.TemplateResponse(
"fragments/llistes/pagina.html",
@@ -13,5 +15,28 @@ def llistes_pagina(request, logged_in):
"playlists": playlists,
"Pages": Pages,
"menu_selected_id": Pages.Llistes,
+ "playlist_list_id": "playlist-list",
}
)
+
+
+def llistes_editor_insert_row(request: Request):
+ new_playlist = playlists_service.create_playlist(name=playlists_model.DEFAULT_PLAYLIST_NAME)
+ return llistes_editor_row(request, new_playlist)
+
+
+def llistes_editor_row(request: Request, playlist: playlists_model.Playlist):
+ return templates.TemplateResponse(
+ "fragments/llistes/playlist_entry.html",
+ {
+ "request": request,
+ "playlist": playlist,
+ "logged_in": True,
+ }
+ )
+
+
+def llistes_editor_delete_row(playlist_id: int):
+ playlists_service.delete_playlist(playlist_id)
+ from fastapi.responses import HTMLResponse
+ return HTMLResponse()
diff --git a/folkugat_web/model/playlists.py b/folkugat_web/model/playlists.py
index a87df2a..bde9dae 100644
--- a/folkugat_web/model/playlists.py
+++ b/folkugat_web/model/playlists.py
@@ -6,6 +6,8 @@ from typing import Self
from folkugat_web.model.temes import Tema
from folkugat_web.utils import groupby
+DEFAULT_PLAYLIST_NAME = "Llista de temes"
+
class PlaylistType(enum.Enum):
SESSION_SETLIST = "session_setlist"
diff --git a/folkugat_web/services/playlists.py b/folkugat_web/services/playlists.py
index 2609d36..13b702b 100644
--- a/folkugat_web/services/playlists.py
+++ b/folkugat_web/services/playlists.py
@@ -233,3 +233,12 @@ def set_visibility(playlist_id: int, hidden: bool) -> playlists.Playlist:
# Return updated playlist
return dataclasses.replace(playlist, hidden=hidden)
+
+
+def create_playlist(name: str | None = None) -> playlists.Playlist:
+ playlist_id = write.create_playlist(name=name)
+ return get_playlist(playlist_id=playlist_id)
+
+
+def delete_playlist(playlist_id: int):
+ write.delete_playlist(playlist_id=playlist_id)