Afegir metadades per quan es comparteixen enllaços

This commit is contained in:
marc
2025-11-02 14:22:22 +01:00
parent 2fbdbbf290
commit c1ec268823
12 changed files with 1227 additions and 12 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
.direnv
**/**.pyc
certs

View File

@@ -62,6 +62,8 @@
sqlite
lazysql
opencode
# Local https
mkcert
];
shellHook = ''

View File

@@ -13,6 +13,7 @@ def index(request: Request, logged_in: auth.LoggedIn):
{
"request": request,
"page_title": "Folkugat",
"page_description": "Sessions de folk a Sant Cugat",
"content": "/api/content/sessions",
"logged_in": logged_in,
"animate": True,

View File

@@ -1,12 +1,22 @@
from fastapi import Request
from fastapi import HTTPException, Request
from folkugat_web.api.router import get_router
from folkugat_web.fragments import set_page
from folkugat_web.model import playlists
from folkugat_web.services import auth
from folkugat_web.services import playlists as playlists_service
from folkugat_web.templates import templates
router = get_router()
def set_description(set_: playlists.Set) -> str:
tema_names = [tis.tema.title if tis.tema else "Desconegut" for tis in set_.temes]
return " i ".join(filter(bool, [
", ".join(tema_names[:-1]),
tema_names[-1]
]))
@router.get("/playlist/{playlist_id}/set/{set_id}")
def page(
request: Request,
@@ -14,11 +24,16 @@ def page(
playlist_id: int,
set_id: int,
):
set_ = playlists_service.get_set(playlist_id=playlist_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(
"index.html",
{
"request": request,
"page_title": "Folkugat",
"page_title": "Folkugat - Set",
"page_description": set_description(set_=set_),
"content": f"/api/content/playlist/{playlist_id}/set/{set_id}",
"logged_in": logged_in,
}

View File

@@ -1,27 +1,47 @@
from typing import Annotated
from fastapi import Form, Request
from fastapi import HTTPException, Request
from folkugat_web.api.router import get_router
from folkugat_web.fragments import live
from folkugat_web.fragments.sessio import page as sessio
from folkugat_web.model.sessions import Session
from folkugat_web.services import auth
from folkugat_web.services.temes import write as temes_service
from folkugat_web.services import sessions as sessions_service
from folkugat_web.templates import templates
router = get_router()
def session_description(session: Session) -> str:
date_names = sessions_service.get_date_names(session.date)
date_str = f"{date_names.day_name} {date_names.day} {date_names.month_name} de {date_names.year}"
location_str = f"A {session.venue.name}" if session.venue else ""
time_str = f"de {session.start_time.strftime('%H:%M')} a {session.end_time.strftime('%H:%M')}"
location_time_str = " ".join([location_str, time_str])
if location_time_str:
location_time_str = location_time_str[0].upper() + location_time_str[1:]
notes_str = session.notes or ""
return "\n".join(filter(bool, [
date_str,
location_time_str,
notes_str,
]))
@router.get("/sessio/{session_id}")
def page(
request: Request,
logged_in: auth.LoggedIn,
session_id: int,
):
session = sessions_service.get_session(session_id=session_id)
if not session:
raise HTTPException(status_code=404, detail="Could not find session")
return templates.TemplateResponse(
"index.html",
{
"request": request,
"page_title": "Folkugat",
"page_title": "Folkugat - Sessió",
"page_description": session_description(session),
"page_card": session.cartell_url,
"content": f"/api/content/sessio/{session_id}",
"logged_in": logged_in,
}

View File

@@ -23,11 +23,17 @@ router = get_router()
@router.get("/tema/{tema_id}")
def page(request: Request, logged_in: auth.LoggedIn, tema_id: int):
tema = temes_q.get_tema_by_id(tema_id)
if not tema:
raise HTTPException(status_code=404, detail="Could not find tune")
tema = scores_service.add_scores_to_tema(tema)
return templates.TemplateResponse(
"index.html",
{
"request": request,
"page_title": "Folkugat",
"page_title": "Folkugat - Tema",
"page_description": tema.title,
"page_card": "",
"content": f"/api/tema/{tema_id}",
"logged_in": logged_in,
}

View File

@@ -29,11 +29,16 @@ def page(
order_params=order_params,
)
content_url = f"/api/content/temes?{temes_params}"
if query:
additional_description = f" - Resultats per a '{query}'"
else:
additional_description = ""
return templates.TemplateResponse(
"index.html",
{
"request": request,
"page_title": "Folkugat",
"page_title": "Folkugat - Temes",
"page_description": f"Buscador de temes{additional_description}",
"content": content_url,
"logged_in": logged_in,
"animate": False,

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

View File

@@ -1,8 +1,10 @@
<div class="h-4/5 min-h-[400px] flex flex-col items-center justify-center">
<a href="/">
<img src="{{ url_for(request, 'static', path='img/folkugat.svg') }}"
class="{% if animate %} opacity-0 animate-fade-in-one {% endif %} m-3"
width="100"
alt="Folkugat"/>
<h1 class="text-3xl sm:text-8xl text-beige m-3 {% if animate %} opacity-0 animate-fade-in-one {% endif %}">{{ page_title }}</h1>
</a>
<h1 class="text-3xl sm:text-8xl text-beige m-3 {% if animate %} opacity-0 animate-fade-in-one {% endif %}">Folkugat</h1>
<h2 class="text-center sm:text-3xl m-6 {% if animate %} opacity-0 animate-fade-in-two {% endif %}">Sessions de folk a Sant Cugat</h2>
</div>

View File

@@ -4,6 +4,16 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/>
<!-- Essential Open Graph (Facebook, WhatsApp, etc.) -->
<meta property="og:title" content="{{ page_title }}">
<meta property="og:description" content="{{ page_description }}">
<meta property="og:image" content="{{ page_card or url_for(request, 'static', path='img/folkugat_card.jpg') }}">
<!-- Twitter Card (optional but recommended) -->
<meta name="twitter:title" content="{{ page_title }}">
<meta name="twitter:description" content="{{ page_description }}">
<meta name="twitter:image" content="{{ page_card or url_for(request, 'static', path='img/folkugat_card.jpg') }}">
<title>{{ page_title }}</title>
<meta name="description" content="{{ page_description }}"/>

View File

@@ -1,6 +1,5 @@
from fastapi import HTTPException, Request
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.templates import templates