Invidious: add images to chapters

Invidious, by design, has no images attached to chapters, in contrast to Piped.

Since the majority of videos with chapters don't have chapter-specific images and only use the videos' thumbnail, there is no difference here when compared to Piped's native thumbnail support.
This commit is contained in:
Toni Förster 2024-05-20 20:11:41 +02:00
parent 90777d91f6
commit 7e3e393c65
No known key found for this signature in database
GPG Key ID: 292F3E5086C83FC7
2 changed files with 18 additions and 2 deletions

View File

@ -502,7 +502,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
keywords: json["keywords"].arrayValue.compactMap { $0.string }, keywords: json["keywords"].arrayValue.compactMap { $0.string },
streams: extractStreams(from: json), streams: extractStreams(from: json),
related: extractRelated(from: json), related: extractRelated(from: json),
chapters: extractChapters(from: description), chapters: createChapters(from: description, thumbnails: json),
captions: extractCaptions(from: json) captions: extractCaptions(from: json)
) )
} }
@ -575,6 +575,22 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
} }
} }
private func createChapters(from description: String, thumbnails: JSON) -> [Chapter] {
var chapters = extractChapters(from: description)
if !chapters.isEmpty {
let thumbnailsData = extractThumbnails(from: thumbnails)
let thumbnailURL = thumbnailsData.first { $0.quality == .medium }?.url
for chapter in chapters.indices {
if let url = thumbnailURL {
chapters[chapter].image = url
}
}
}
return chapters
}
private static var contentItemsKeys = ["items", "videos", "latestVideos", "playlists", "relatedChannels"] private static var contentItemsKeys = ["items", "videos", "latestVideos", "playlists", "relatedChannels"]
private func extractChannelPage(from json: JSON, forceNotLast: Bool = false) -> ChannelPage { private func extractChannelPage(from json: JSON, forceNotLast: Bool = false) -> ChannelPage {

View File

@ -65,7 +65,7 @@ import SwiftUI
} }
static var thumbnailHeight: Double { static var thumbnailHeight: Double {
thumbnailWidth / 1.7777 thumbnailWidth / (16 / 9)
} }
} }