Fix missing thumbnails for videos saved to library

Persistence models (local playlists, watch history, bookmarks,
downloads) store only the best advertised thumbnail URL - usually
maxresdefault.jpg, which doesn't exist for many older videos and 404s.
Live API results survive this because views fall back through the full
quality chain, but toVideo() rebuilt videos with that single dead URL,
leaving placeholder covers.

Reconstruct the quality fallback chain from the stored YouTube-style
URL at read time (Thumbnail.fallbackChain), and rewrite playlist list
covers to the always-available hqdefault variant
(Thumbnail.reliableURL), since those views render a single URL without
fallback. Also expand the fabricated maxres URL in PipedAPI into a
full chain.
This commit is contained in:
Arkadiusz Fal
2026-07-31 22:30:37 +02:00
parent aa6e7fbce9
commit fd1029d3e0
7 changed files with 64 additions and 9 deletions

View File

@@ -241,7 +241,7 @@ extension WatchEntry {
publishedText: nil,
viewCount: nil,
likeCount: nil,
thumbnails: thumbnailURL.map { [Thumbnail(url: $0, quality: .medium)] } ?? [],
thumbnails: Thumbnail.fallbackChain(for: thumbnailURL),
isLive: isLive,
isUpcoming: false,
scheduledStartTime: nil