Session editor and live sessions!

This commit is contained in:
marc
2025-03-21 19:42:43 +01:00
parent 6c83d11e5b
commit ac54453b7f
54 changed files with 1247 additions and 173 deletions

View File

@@ -1,16 +1,29 @@
from fastapi import Request
from fastapi.responses import HTMLResponse
from folkugat_web.model import sessions as model
from folkugat_web.services import playlists as playlists_service
from folkugat_web.services import sessions as service
from folkugat_web.templates import templates
def sessio_en_directe(request: Request):
session = service.get_live_session()
if not session:
return HTMLResponse()
if not session.id:
raise RuntimeError("Got a session without id!")
current_set = None
if playlist := playlists_service.get_playlist(session_id=session.id):
if playlist.sets:
current_set = playlists_service.add_temes_to_set(playlist.sets[-1])
return templates.TemplateResponse(
"fragments/marquee.html",
{
"request": request,
"session": session,
"current_set": current_set,
}
)
@@ -19,7 +32,7 @@ def start_live_session(request: Request, session_id: int):
service.set_live_session(session_id=session_id)
session = model.Session(id=session_id)
return templates.TemplateResponse(
"fragments/sessions/live/stop.html",
"fragments/sessio/live/stop.html",
{
"request": request,
"session": session,
@@ -34,7 +47,7 @@ def stop_live_session(request: Request, session_id: int):
service.stop_live_sessions()
session = model.Session(id=session_id)
return templates.TemplateResponse(
"fragments/sessions/live/start.html",
"fragments/sessio/live/start.html",
{
"request": request,
"session": session,

View File

@@ -0,0 +1,163 @@
from typing import Optional
from fastapi import Request
from fastapi.responses import HTMLResponse
from folkugat_web.model.pagines import Pages
from folkugat_web.services import playlists as playlists_service
from folkugat_web.services import sessions as sessions_service
from folkugat_web.services.temes import search as search_service
from folkugat_web.templates import templates
def pagina(request: Request, session_id: int, logged_in: bool):
session = sessions_service.get_session(session_id=session_id)
playlist = playlists_service.get_playlist(session_id=session_id)
playlist = playlists_service.add_temes_to_playlist(playlist)
return templates.TemplateResponse(
"fragments/sessio/pagina.html",
{
"request": request,
"logged_in": logged_in,
"Pages": Pages,
"session_id": session_id,
"session": session,
"playlist": playlist,
"date_names": sessions_service.get_date_names,
}
)
def add_set(request: Request, session_id: int, logged_in: bool):
new_set = playlists_service.add_set(session_id=session_id)
return templates.TemplateResponse(
"fragments/sessio/set_entry.html",
{
"request": request,
"logged_in": logged_in,
"new_entry": True,
"session_id": session_id,
"set_id": new_set.id,
"set_entry": new_set,
}
)
def get_set(request: Request, session_id: int, set_id: int, logged_in: bool):
set_entry = playlists_service.get_set(session_id=session_id, set_id=set_id)
if set_entry:
return templates.TemplateResponse(
"fragments/sessio/set_entry.html",
{
"request": request,
"logged_in": logged_in,
"new_entry": True,
"session_id": session_id,
"set_id": set_id,
"set_entry": set_entry,
}
)
else:
return HTMLResponse()
def delete_set(session_id: int, set_id: int):
playlists_service.delete_set(session_id=session_id, set_id=set_id)
return HTMLResponse()
def add_tema(request: Request, session_id: int, set_id: int, logged_in: bool):
new_tema = playlists_service.add_tema(session_id=session_id, set_id=set_id)
playlists_service.add_tema_to_tema_in_set(new_tema)
return templates.TemplateResponse(
"fragments/sessio/tema_editor.html",
{
"request": request,
"logged_in": logged_in,
"session_id": session_id,
"set_id": set_id,
"tema_entry": new_tema,
}
)
def get_tema(request: Request, session_id: int, set_id: int, entry_id: int, logged_in: bool):
tema_entry = playlists_service.get_tema(entry_id=entry_id)
playlists_service.add_tema_to_tema_in_set(tema_entry)
return templates.TemplateResponse(
"fragments/sessio/tema_entry.html",
{
"request": request,
"logged_in": logged_in,
"session_id": session_id,
"set_id": set_id,
"tema_entry": tema_entry,
}
)
def get_tema_editor(request: Request, session_id: int, set_id: int, entry_id: int, logged_in: bool):
tema_entry = playlists_service.get_tema(entry_id=entry_id)
playlists_service.add_tema_to_tema_in_set(tema_entry)
return templates.TemplateResponse(
"fragments/sessio/tema_editor.html",
{
"request": request,
"logged_in": logged_in,
"session_id": session_id,
"set_id": set_id,
"tema_entry": tema_entry,
}
)
def delete_tema(session_id: int, set_id: int, entry_id: int):
playlists_service.delete_tema(entry_id=entry_id)
if not playlists_service.get_set(session_id=session_id, set_id=set_id):
headers = {
"HX-Trigger": f"reload-set-{set_id}"
}
else:
headers = {}
return HTMLResponse(headers=headers)
def busca_tema(
request: Request,
session_id: int,
set_id: int,
entry_id: int,
query: str,
):
results = search_service.busca_temes(
query=query,
hidden=True,
limit=4,
offset=0,
)
return templates.TemplateResponse(
"fragments/sessio/tema_results.html",
{
"request": request,
"session_id": session_id,
"set_id": set_id,
"entry_id": entry_id,
"results": results,
"query": query,
}
)
def set_tema(request: Request, logged_in: bool, session_id: int, set_id: int, entry_id: int, tema_id: Optional[int]):
playlists_service.set_tema(session_id=session_id, set_id=set_id, entry_id=entry_id, tema_id=tema_id)
tema_entry = playlists_service.get_tema(entry_id=entry_id)
playlists_service.add_tema_to_tema_in_set(tema_entry)
return templates.TemplateResponse(
"fragments/sessio/tema_entry.html",
{
"request": request,
"logged_in": logged_in,
"session_id": session_id,
"set_id": set_id,
"tema_entry": tema_entry,
}
)

View File

@@ -87,20 +87,6 @@ def _sessions_list(request: Request, sessions: list[model.Session], has_more_ses
)
def sessio(request: Request, session_id: int, logged_in: bool):
session = service.get_session(session_id=session_id)
return templates.TemplateResponse(
"fragments/sessions/sessio.html",
{
"request": request,
"logged_in": logged_in,
"Pages": Pages,
"session": session,
"date_names": service.get_date_names,
}
)
def sessions_editor_row(request: Request, session_date: Optional[model.Session] = None, session_id: Optional[int] = None):
if session_date is None:
if session_id is None:

View File

@@ -0,0 +1,72 @@
from fastapi import HTTPException, Request
from folkugat_web.model.pagines import Pages
from folkugat_web.model.temes import ContentType, LinkType
from folkugat_web.services import playlists as playlists_service
from folkugat_web.services import sessions as sessions_service
from folkugat_web.templates import templates
def pagina(request: Request, session_id: int, set_id: int, logged_in: bool):
session = sessions_service.get_session(session_id=session_id)
set_ = playlists_service.get_set(session_id=session_id, set_id=set_id)
if not set_:
raise HTTPException(status_code=404, detail="Set not found")
set_ = playlists_service.add_temes_to_set(set_)
return templates.TemplateResponse(
"fragments/sessio/set/pagina.html",
{
"request": request,
"logged_in": logged_in,
"Pages": Pages,
"session_id": session_id,
"session": session,
"set": set_,
"date_names": sessions_service.get_date_names,
"LinkType": LinkType,
"ContentType": ContentType,
}
)
def live(request: Request, logged_in: bool):
session = sessions_service.get_live_session()
set_ = None
if session and session.id:
playlist = playlists_service.get_playlist(session_id=session.id)
if playlist.sets:
set_ = playlists_service.add_temes_to_set(playlist.sets[-1])
return templates.TemplateResponse(
"fragments/sessio/set/pagina.html",
{
"request": request,
"logged_in": logged_in,
"Pages": Pages,
"session": session,
"set": set_,
"date_names": sessions_service.get_date_names,
"LinkType": LinkType,
"ContentType": ContentType,
}
)
def live_set(request: Request, logged_in: bool):
session = sessions_service.get_live_session()
set_ = None
if session and session.id:
playlist = playlists_service.get_playlist(session_id=session.id)
if playlist.sets:
set_ = playlists_service.add_temes_to_set(playlist.sets[-1])
return templates.TemplateResponse(
"fragments/sessio/set/set_page.html",
{
"request": request,
"logged_in": logged_in,
"Pages": Pages,
"session": session,
"set": set_,
"date_names": sessions_service.get_date_names,
"LinkType": LinkType,
"ContentType": ContentType,
}
)

View File

@@ -19,14 +19,30 @@ def temes_pagina(request: Request, logged_in: bool, query: str):
)
def temes_busca(request: Request, query: str, logged_in: bool):
temes = temes_s.busca_temes(query=query, hidden=logged_in)
def temes_busca(request: Request, logged_in: bool, query: str, offset: int = 0, limit: int = 10):
temes = temes_s.busca_temes(
query=query,
hidden=logged_in,
limit=limit + 1,
offset=offset,
)
next_offset, prev_offset = None, None
if len(temes) > limit:
next_offset = offset + limit
temes = temes[:limit]
if offset > 0:
prev_offset = max(offset - limit, 0)
return templates.TemplateResponse(
"fragments/temes/results.html",
{
"request": request,
"logged_in": logged_in,
"temes": temes,
"query": query,
"prev_offset": prev_offset,
"next_offset": next_offset,
"LinkType": model.LinkType,
"ContentType": model.ContentType,
}