Use ImageManager of SDWebImageSwiftUI

This commit is contained in:
Arkadiusz Fal
2022-12-11 00:51:21 +01:00
parent 92999118fd
commit 7ba743afbc
4 changed files with 47 additions and 14 deletions

View File

@@ -0,0 +1,37 @@
import SDWebImageSwiftUI
import SwiftUI
struct ThumbnailView: View {
var url: URL?
@ObservedObject private var imageManager = ImageManager()
private var thumbnails = ThumbnailsModel.shared
init(url: URL? = nil) {
self.url = url
}
var body: some View {
Group {
if imageManager.image != nil {
#if os(macOS)
Image(nsImage: imageManager.image!)
.resizable()
#else
Image(uiImage: imageManager.image!)
.resizable()
#endif
} else {
Rectangle().fill(Color("PlaceholderColor"))
.onAppear {
self.imageManager.setOnFailure { _ in
guard let url else { return }
self.thumbnails.insertUnloadable(url)
}
self.imageManager.load(url: url)
}
.onDisappear { self.imageManager.cancel() }
}
}
}
}

View File

@@ -131,8 +131,7 @@ struct VideoBanner: View {
Color("PlaceholderColor")
if let video {
if let thumbnail = video.thumbnailURL(quality: .medium) {
WebImage(url: thumbnail, options: [.lowPriority])
.resizable()
ThumbnailView(url: thumbnail)
} else if video.isLocal {
Image(systemName: video.localStreamImageSystemName)
}

View File

@@ -421,18 +421,7 @@ struct VideoCell: View {
private var thumbnailImage: some View {
Group {
let url = thumbnails.best(video)
WebImage(url: url, options: [.lowPriority])
.resizable()
.placeholder {
Rectangle().foregroundColor(Color("PlaceholderColor"))
}
.retryOnAppear(true)
.onFailure { _ in
guard let url else { return }
thumbnails.insertUnloadable(url)
}
ThumbnailView(url: thumbnails.best(video))
#if os(tvOS)
.frame(minHeight: 320)