From 2c59d873f3b999707298c9d907c68d4bece0dbac Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Mon, 15 Jun 2026 19:32:00 +0200 Subject: [PATCH] fix: UTF-8 encoding for iCal subscriptions + default_event_duration_minutes setting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Force resp.encoding='utf-8' in _fetch_ics so umlauts (ö/ä/ü) from sources like Ferienwiki.de are decoded correctly instead of showing as ö/ä/ü. Add default_event_duration_minutes to UserSettings (nullable int, same pattern as default_reminder_minutes) with DB migration, GET/PUT in settings_router. Co-Authored-By: Claude Sonnet 4.6 --- backend/routers/ical_router.py | 1 + backend/routers/settings_router.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/routers/ical_router.py b/backend/routers/ical_router.py index b10ad04..9a35ca7 100644 --- a/backend/routers/ical_router.py +++ b/backend/routers/ical_router.py @@ -50,6 +50,7 @@ def _fetch_ics(url: str) -> str: try: resp = http_requests.get(url, timeout=30, allow_redirects=True) resp.raise_for_status() + resp.encoding = 'utf-8' return resp.text except http_requests.RequestException as e: raise ValueError(f"Fehler beim Abrufen der URL: {e}") diff --git a/backend/routers/settings_router.py b/backend/routers/settings_router.py index bcd787d..6c4fc27 100644 --- a/backend/routers/settings_router.py +++ b/backend/routers/settings_router.py @@ -96,7 +96,7 @@ def update_settings( # For these three override colours, an explicit null is meaningful # ("reset to default") and must be persisted as NULL. All other fields # keep the previous behaviour where a null/missing value is ignored. - NULLABLE_OVERRIDES = {"text_color", "line_color", "bg_color", "group_visible_calendar_id", "default_reminder_minutes"} + NULLABLE_OVERRIDES = {"text_color", "line_color", "bg_color", "group_visible_calendar_id", "default_reminder_minutes", "default_event_duration_minutes"} update_data = data.model_dump(exclude_unset=True) for field, value in update_data.items(): if field in NULLABLE_OVERRIDES: