diff --git a/folkugat_web/api/routes/llistes/index.py b/folkugat_web/api/routes/llistes/index.py index cbb3734..c6080d6 100644 --- a/folkugat_web/api/routes/llistes/index.py +++ b/folkugat_web/api/routes/llistes/index.py @@ -24,3 +24,13 @@ def page(request: Request, logged_in: auth.LoggedIn): @router.get("/api/content/llistes") def content(request: Request, logged_in: auth.LoggedIn): return llistes.llistes_pagina(request, logged_in) + + +@router.post("/api/llistes/editor/") +def insert_row(request: Request, _: auth.RequireLogin): + return llistes.llistes_editor_insert_row(request) + + +@router.delete("/api/llistes/{playlist_id}") +def delete_playlist(playlist_id: int, _: auth.RequireLogin): + return llistes.llistes_editor_delete_row(playlist_id) diff --git a/folkugat_web/assets/static/css/main.css b/folkugat_web/assets/static/css/main.css index db51c08..c96d85a 100644 --- a/folkugat_web/assets/static/css/main.css +++ b/folkugat_web/assets/static/css/main.css @@ -1147,10 +1147,6 @@ video { transition-duration: 200ms; } -.hover\:underline:hover { - text-decoration-line: underline; -} - .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; diff --git a/folkugat_web/assets/templates/fragments/llista/visibility.html b/folkugat_web/assets/templates/fragments/llista/visibility.html index 61b29e7..ed2ba21 100644 --- a/folkugat_web/assets/templates/fragments/llista/visibility.html +++ b/folkugat_web/assets/templates/fragments/llista/visibility.html @@ -12,4 +12,4 @@ hx-swap="outerHTML"> -{% endif %} \ No newline at end of file +{% endif %} diff --git a/folkugat_web/assets/templates/fragments/llistes/pagina.html b/folkugat_web/assets/templates/fragments/llistes/pagina.html index d728386..8db73ca 100644 --- a/folkugat_web/assets/templates/fragments/llistes/pagina.html +++ b/folkugat_web/assets/templates/fragments/llistes/pagina.html @@ -1,16 +1,26 @@ {% include "fragments/menu.html" %}

Llistes de Repertori

- + {% if logged_in %} + + {% endif %} +
{% if playlists %} -
{% for playlist in playlists %} {% include "fragments/llistes/playlist_entry.html" %} {% endfor %} -
{% else %}

No hi ha llistes disponibles.

{% endif %} +
diff --git a/folkugat_web/assets/templates/fragments/llistes/playlist_entry.html b/folkugat_web/assets/templates/fragments/llistes/playlist_entry.html index 138720f..097e4f7 100644 --- a/folkugat_web/assets/templates/fragments/llistes/playlist_entry.html +++ b/folkugat_web/assets/templates/fragments/llistes/playlist_entry.html @@ -1,7 +1,8 @@
+ relative" + id="playlist-entry-{{ playlist.id }}">

@@ -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)