From c74e9188e6b6ac6264025d99b3f8f89ad0a6fb75 Mon Sep 17 00:00:00 2001 From: Mikhail Kuzmin Date: Mon, 20 Mar 2023 20:03:56 +0400 Subject: [PATCH] Add ability to set asset version to ImageRequestOptions --- ImageSource/Core/ImageRequestOptions.swift | 19 +++++++++++-------- .../Core/ImageRequestOptionsVersion.swift | 13 +++++++++++++ ImageSource/PHAsset/PHAssetImageSource.swift | 11 ++++++++++- 3 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 ImageSource/Core/ImageRequestOptionsVersion.swift diff --git a/ImageSource/Core/ImageRequestOptions.swift b/ImageSource/Core/ImageRequestOptions.swift index 3385aad..72805b2 100644 --- a/ImageSource/Core/ImageRequestOptions.swift +++ b/ImageSource/Core/ImageRequestOptions.swift @@ -1,21 +1,24 @@ public struct ImageRequestOptions { - public var size: ImageSizeOption = .fullResolution - public var deliveryMode: ImageDeliveryMode = .best + public var size: ImageSizeOption + public var deliveryMode: ImageDeliveryMode + public var version: ImageRequestOptionsVersion public let needsMetadata: Bool /// Called on main thread when image download starts public var onDownloadStart: ((ImageRequestId) -> ())? /// Called on main thread when image download finishes public var onDownloadFinish: ((ImageRequestId) -> ())? - - public init() { - needsMetadata = false - } - - public init(size: ImageSizeOption, deliveryMode: ImageDeliveryMode, needsMetadata: Bool = false) { + + public init( + size: ImageSizeOption = .fullResolution, + deliveryMode: ImageDeliveryMode = .best, + version: ImageRequestOptionsVersion = .original, + needsMetadata: Bool = false + ) { self.size = size self.deliveryMode = deliveryMode + self.version = version self.needsMetadata = needsMetadata } } diff --git a/ImageSource/Core/ImageRequestOptionsVersion.swift b/ImageSource/Core/ImageRequestOptionsVersion.swift new file mode 100644 index 0000000..cb53e5b --- /dev/null +++ b/ImageSource/Core/ImageRequestOptionsVersion.swift @@ -0,0 +1,13 @@ +/// Options for requesting an image asset with or without adjustments. +/// important: Can be applied to `PHAssetImageSource` only. +public enum ImageRequestOptionsVersion { + + /// Request the most recent version of the image asset (the one that reflects all edits). + case current + + /// Request a version of the image asset without adjustments. + case unadjusted + + /// Request the original, highest-fidelity version of the image asset. + case original +} diff --git a/ImageSource/PHAsset/PHAssetImageSource.swift b/ImageSource/PHAsset/PHAssetImageSource.swift index 9920db3..123c283 100644 --- a/ImageSource/PHAsset/PHAssetImageSource.swift +++ b/ImageSource/PHAsset/PHAssetImageSource.swift @@ -147,7 +147,7 @@ public final class PHAssetImageSource: ImageSource { private func imageRequestParameters(from options: ImageRequestOptions) -> (options: PHImageRequestOptions, size: CGSize, contentMode: PHImageContentMode) { - let phOptions = PHImageRequestOptions() + let phOptions: PHImageRequestOptions = PHImageRequestOptions() phOptions.isNetworkAccessAllowed = true switch options.deliveryMode { @@ -158,6 +158,15 @@ public final class PHAssetImageSource: ImageSource { phOptions.deliveryMode = .highQualityFormat phOptions.resizeMode = .exact } + + switch options.version { + case .current: + phOptions.version = .current + case .original: + phOptions.version = .original + case .unadjusted: + phOptions.version = .unadjusted + } let size: CGSize let contentMode: PHImageContentMode