Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions View/Catalog/CatalogView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4019,7 +4019,9 @@ private struct CatalogHeroRemoteImage: View {
image = cached.image
hasFailed = false
isLoading = false
onScrimColorChange(CatalogHeroImageMetadata.scrimColor(from: cached.data) ?? .black)
let color = await CatalogHeroImageMetadata.scrimColor(from: cached.data)
guard !Task.isCancelled else { return }
onScrimColorChange(color ?? .black)
} else {
guard !Task.isCancelled else { return }
image = nil
Expand Down Expand Up @@ -4140,12 +4142,14 @@ private enum CatalogHeroImageMetadata {
let bottom: String?
}

static func scrimColor(from data: Data) -> CatalogMarqueeScrimColor? {
guard let source = CGImageSourceCreateWithData(data as CFData, nil) else { return nil }
if let metadataColor = metadataScrimColor(from: source) {
return metadataColor
}
return sampledLeftEdgeColor(from: source)
static func scrimColor(from data: Data) async -> CatalogMarqueeScrimColor? {
await Task.detached(priority: .userInitiated) {
guard let source = CGImageSourceCreateWithData(data as CFData, nil) else { return nil }
if let metadataColor = metadataScrimColor(from: source) {
return metadataColor
}
return sampledLeftEdgeColor(from: source)
}.value
}

private static func metadataScrimColor(from source: CGImageSource) -> CatalogMarqueeScrimColor? {
Expand Down