diff --git a/app/resolve/scene_resolver.py b/app/resolve/scene_resolver.py index 686355e..7b2bb73 100644 --- a/app/resolve/scene_resolver.py +++ b/app/resolve/scene_resolver.py @@ -644,15 +644,23 @@ def _sync_playback_sources( ) ) else: - # Refresh + uzupełnij braki (nigdy nie nadpisujemy istniejących wartości). + # Refresh + uzupełnij braki (nie nadpisujemy istniejących wartości). existing.last_seen_at = datetime.now(UTC) if existing.scene_id != scene_id: # Ten sam (origin, page_url) trafił do innej canonical sceny — to znaczy # że dedup zmergował. Re-link do bieżącej. existing.scene_id = scene_id - for attr in ("embed_url", "stream_url", "quality", "duration_sec", "thumbnail_url", "animated_thumbnail_url"): + for attr in ("embed_url", "stream_url", "quality", "duration_sec"): if getattr(existing, attr) is None and getattr(ps, attr) is not None: setattr(existing, attr, getattr(ps, attr)) + # Thumbnaile ZAWSZE odśwież do świeżej wartości ze scrape (gdy podana). + # Signed CDN thumbnaile (sxyprn/trafficdeposit) rotują — token wygasa po + # ~tygodniach i stary URL daje 404. Trzymanie "tylko gdy NULL" robiło rot + # permanentnym (bug 2026-06-10). Re-scrape teraz odświeża martwe miniaturki. + for attr in ("thumbnail_url", "animated_thumbnail_url"): + new_val = getattr(ps, attr) + if new_val is not None: + setattr(existing, attr, new_val) def _log_auto_merge(