diff --git a/gallery/easel/route/view/common/utils/template.py b/gallery/easel/route/view/common/utils/template.py index 290966d..c724e45 100644 --- a/gallery/easel/route/view/common/utils/template.py +++ b/gallery/easel/route/view/common/utils/template.py @@ -1,6 +1,7 @@ import datetime import typing from pathlib import Path +from urllib.parse import parse_qsl, urlencode, urlsplit from babel.dates import format_date from fastapi import Request @@ -28,6 +29,14 @@ def base_context_processor(request: Request) -> dict: } +def build_url(request: Request, query: dict | None = None) -> str: + parts = urlsplit(str(request.url)) + if query: + query_dict = {**dict(parse_qsl(parts.query)), **query} + parts = parts._replace(query=urlencode(query_dict)) + return parts.geturl() + + def build_templates( templates_dir: Path | None = None, filters: dict | None = None, context_processor: ContextProcessor | None = None ) -> Jinja2Templates: @@ -46,6 +55,7 @@ def build_templates( "datetime": datetime, "tag_util": TagUtil, "DATE_FORMAT": "E, d MMMM Y", + "build_url": build_url, } ) if filters: diff --git a/gallery/easel/route/view/schedule/__init__.py b/gallery/easel/route/view/schedule/__init__.py index 5762552..518039d 100644 --- a/gallery/easel/route/view/schedule/__init__.py +++ b/gallery/easel/route/view/schedule/__init__.py @@ -68,3 +68,24 @@ async def get_channel_tag(request: AppRequest, schedule_api: ScheduleApiDepends, "response": response, }, ) + + +@router.get("/group", response_class=HTMLResponse) +async def get_group(request: AppRequest, ids: str, date: datetime.date | None = None, tag: str | None = None): + date = date or datetime.date.today() + if tag: + date = TagUtil.parse_tag(tag).date + channels = [item.split(":") for item in ids.split(" ")] + responses = [ + await request.app.state.api.get_api(ScheduleApi, provider).get_schedule(channel_id, date) + for provider, channel_id in channels + ] + return templates.TemplateResponse( + request=request, + name="group.html", + context={ + "tag_util": TagUtil, + "datetime": datetime, + "responses": responses, + }, + ) diff --git a/gallery/easel/route/view/schedule/templates/channel.html b/gallery/easel/route/view/schedule/templates/channel.html index 7ffec18..bfb67b8 100644 --- a/gallery/easel/route/view/schedule/templates/channel.html +++ b/gallery/easel/route/view/schedule/templates/channel.html @@ -1,4 +1,7 @@ {% extends "base.html" %} +{% set live = request.query_params.live == '1' %} +{% set date = response.date %} + {% block title %} {{_("TV program")}} | {{response.channel.name}} | {{format_date(response.date, DATE_FORMAT, locale=request.state.language)}} @@ -10,19 +13,23 @@ locale=request.state.language)}} {% endblock %} {% block content %} -
| + | + |
| + {{value.start.strftime('%H:%M')}} + ({{(value.end - value.start) | timedelta_format}}) + | +{{value.label}} | +