Session editor and live sessions!
This commit is contained in:
@@ -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,
|
||||
|
||||
163
folkugat_web/fragments/sessio.py
Normal file
163
folkugat_web/fragments/sessio.py
Normal 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,
|
||||
}
|
||||
)
|
||||
@@ -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:
|
||||
|
||||
72
folkugat_web/fragments/set_page.py
Normal file
72
folkugat_web/fragments/set_page.py
Normal 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,
|
||||
}
|
||||
)
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user