mirror of
https://github.com/yattee/yattee.git
synced 2026-08-05 23:01:28 +00:00
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:
@@ -217,7 +217,7 @@ final class Bookmark {
|
||||
publishedText: publishedText,
|
||||
viewCount: viewCount,
|
||||
likeCount: nil,
|
||||
thumbnails: thumbnailURL.map { [Thumbnail(url: $0, width: nil, height: nil)] } ?? [],
|
||||
thumbnails: Thumbnail.fallbackChain(for: thumbnailURL),
|
||||
isLive: isLive,
|
||||
isUpcoming: false,
|
||||
scheduledStartTime: nil
|
||||
|
||||
@@ -75,10 +75,16 @@ final class LocalPlaylist {
|
||||
}
|
||||
|
||||
/// The first video's thumbnail URL for display.
|
||||
///
|
||||
/// Rewritten to the always-available `hqdefault` variant because the stored
|
||||
/// URL is the best advertised quality (often `maxresdefault`), which 404s
|
||||
/// for many older videos and would leave the cover blank.
|
||||
var thumbnailURL: URL? {
|
||||
(items ?? []).sorted { $0.sortOrder < $1.sortOrder }
|
||||
.first?
|
||||
.thumbnailURL
|
||||
Thumbnail.reliableURL(
|
||||
for: (items ?? []).sorted { $0.sortOrder < $1.sortOrder }
|
||||
.first?
|
||||
.thumbnailURL
|
||||
)
|
||||
}
|
||||
|
||||
/// Sorted items by order.
|
||||
@@ -249,7 +255,7 @@ extension LocalPlaylistItem {
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user