From 26a3005efc11da32d3231a66140e7b6946ff852d Mon Sep 17 00:00:00 2001 From: onevcat Date: Sun, 5 May 2024 07:08:45 +0900 Subject: [PATCH] Remove watchOS specified interface Since now we can use KingfisherHasImageComponent to replace it --- Kingfisher.xcodeproj/project.pbxproj | 4 - .../WKInterfaceImage+Kingfisher.swift | 208 ------------------ 2 files changed, 212 deletions(-) delete mode 100644 Sources/Extensions/WKInterfaceImage+Kingfisher.swift diff --git a/Kingfisher.xcodeproj/project.pbxproj b/Kingfisher.xcodeproj/project.pbxproj index de181e2d7..75c0f1dca 100644 --- a/Kingfisher.xcodeproj/project.pbxproj +++ b/Kingfisher.xcodeproj/project.pbxproj @@ -28,7 +28,6 @@ 4BD821622189FC0C0084CC21 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD821612189FC0C0084CC21 /* SessionDelegate.swift */; }; 4BD821672189FD330084CC21 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD821662189FD330084CC21 /* SessionDataTask.swift */; }; 4BE688F722FD513100B11168 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12AB6AD215D2BB50013BA68 /* NSButton+Kingfisher.swift */; }; - 4BE688F822FD513700B11168 /* WKInterfaceImage+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12AB6AF215D2BB50013BA68 /* WKInterfaceImage+Kingfisher.swift */; }; 76FB4FD2262D773E006D15F8 /* GraphicsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76FB4FD1262D773E006D15F8 /* GraphicsContext.swift */; }; C9286407228584EB00257182 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9286406228584EB00257182 /* ImageProgressive.swift */; }; D1132C9725919F69003E528D /* KFOptionsSetter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1132C9625919F69003E528D /* KFOptionsSetter.swift */; }; @@ -191,7 +190,6 @@ D12AB6AC215D2BB50013BA68 /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ImageView+Kingfisher.swift"; sourceTree = ""; }; D12AB6AD215D2BB50013BA68 /* NSButton+Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSButton+Kingfisher.swift"; sourceTree = ""; }; D12AB6AE215D2BB50013BA68 /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Kingfisher.swift"; sourceTree = ""; }; - D12AB6AF215D2BB50013BA68 /* WKInterfaceImage+Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WKInterfaceImage+Kingfisher.swift"; sourceTree = ""; }; D12AB6B1215D2BB50013BA68 /* Kingfisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Kingfisher.swift; sourceTree = ""; }; D12AB6B2215D2BB50013BA68 /* KingfisherError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KingfisherError.swift; sourceTree = ""; }; D12AB6B3215D2BB50013BA68 /* KingfisherManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KingfisherManager.swift; sourceTree = ""; }; @@ -400,7 +398,6 @@ D12AB6AD215D2BB50013BA68 /* NSButton+Kingfisher.swift */, E9E3ED8A2B1F66B200734CFF /* HasImageComponent+Kingfisher.swift */, D12AB6AE215D2BB50013BA68 /* UIButton+Kingfisher.swift */, - D12AB6AF215D2BB50013BA68 /* WKInterfaceImage+Kingfisher.swift */, DCEB2841257E4BE100D7A610 /* TVMonogramView+Kingfisher.swift */, 22FDCE0D2700078B0044D11E /* CPListItem+Kingfisher.swift */, ); @@ -873,7 +870,6 @@ D1A37BDE215D34E8009B39B7 /* ImageDrawing.swift in Sources */, 4BD821672189FD330084CC21 /* SessionDataTask.swift in Sources */, D12AB708215D2BB50013BA68 /* KingfisherError.swift in Sources */, - 4BE688F822FD513700B11168 /* WKInterfaceImage+Kingfisher.swift in Sources */, D12AB724215D2BB50013BA68 /* Box.swift in Sources */, 4B8E291C216F40AA0095FAD1 /* AuthenticationChallengeResponsable.swift in Sources */, 3ADE9AF92A73CD69009A86CA /* String+SHA256.swift in Sources */, diff --git a/Sources/Extensions/WKInterfaceImage+Kingfisher.swift b/Sources/Extensions/WKInterfaceImage+Kingfisher.swift deleted file mode 100644 index 5a6f7f1bf..000000000 --- a/Sources/Extensions/WKInterfaceImage+Kingfisher.swift +++ /dev/null @@ -1,208 +0,0 @@ -// -// WKInterfaceImage+Kingfisher.swift -// Kingfisher -// -// Created by Rodrigo Borges Soares on 04/05/18. -// -// Copyright (c) 2019 Wei Wang -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if canImport(WatchKit) - -import WatchKit - -@MainActor -extension KingfisherWrapper where Base: WKInterfaceImage { - - // MARK: Setting Image - - /// Sets an image to the image view with a source. - /// - /// - Parameters: - /// - source: The `Source` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested source - /// Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: (@Sendable (Result) -> Void)? = nil) -> DownloadTask? - { - let options = KingfisherParsedOptionsInfo(KingfisherManager.shared.defaultOptions + (options ?? .empty)) - return setImage( - with: source, - placeholder: placeholder, - parsedOptions: options, - progressBlock: progressBlock, - completionHandler: completionHandler - ) - } - - /// Sets an image to the image view with a requested resource. - /// - /// - Parameters: - /// - resource: The `Resource` object contains information about the image. - /// - placeholder: A placeholder to show while retrieving the image from the given `resource`. - /// - options: An options set to define image setting behaviors. See `KingfisherOptionsInfo` for more. - /// - progressBlock: Called when the image downloading progress gets updated. If the response does not contain an - /// `expectedContentLength`, this block will not be called. - /// - completionHandler: Called when the image retrieved and set finished. - /// - Returns: A task represents the image downloading. - /// - /// - Note: - /// - /// Internally, this method will use `KingfisherManager` to get the requested resource, from either cache - /// or network. Since this method will perform UI changes, you must call it from the main thread. - /// Both `progressBlock` and `completionHandler` will be also executed in the main thread. - /// - @discardableResult - public func setImage( - with resource: Resource?, - placeholder: KFCrossPlatformImage? = nil, - options: KingfisherOptionsInfo? = nil, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: (@Sendable (Result) -> Void)? = nil) -> DownloadTask? - { - return setImage( - with: resource?.convertToSource(), - placeholder: placeholder, - options: options, - progressBlock: progressBlock, - completionHandler: completionHandler) - } - - func setImage( - with source: Source?, - placeholder: KFCrossPlatformImage? = nil, - parsedOptions: KingfisherParsedOptionsInfo, - progressBlock: DownloadProgressBlock? = nil, - completionHandler: (@Sendable (Result) -> Void)? = nil) -> DownloadTask? - { - var mutatingSelf = self - guard let source = source else { - base.setImage(placeholder) - mutatingSelf.taskIdentifier = nil - completionHandler?(.failure(KingfisherError.imageSettingError(reason: .emptySource))) - return nil - } - - var options = parsedOptions - if !options.keepCurrentImageWhileLoading { - base.setImage(placeholder) - } - - let issuedIdentifier = Source.Identifier.next() - mutatingSelf.taskIdentifier = issuedIdentifier - - if let block = progressBlock { - options.onDataReceived = (options.onDataReceived ?? []) + [ImageLoadingProgressSideEffect(block)] - } - - let task = KingfisherManager.shared.retrieveImage( - with: source, - options: options, - downloadTaskUpdated: { task in - Task { @MainActor in mutatingSelf.imageTask = task } - }, - progressiveImageSetter: { self.base.setImage($0) }, - referenceTaskIdentifierChecker: { issuedIdentifier == self.taskIdentifier }, - completionHandler: { result in - CallbackQueueMain.currentOrAsync { - guard issuedIdentifier == self.taskIdentifier else { - let reason: KingfisherError.ImageSettingErrorReason - do { - let value = try result.get() - reason = .notCurrentSourceTask(result: value, error: nil, source: source) - } catch { - reason = .notCurrentSourceTask(result: nil, error: error, source: source) - } - let error = KingfisherError.imageSettingError(reason: reason) - completionHandler?(.failure(error)) - return - } - - mutatingSelf.imageTask = nil - mutatingSelf.taskIdentifier = nil - - switch result { - case .success(let value): - self.base.setImage(value.image) - completionHandler?(result) - - case .failure: - if let image = options.onFailureImage { - self.base.setImage(image) - } - completionHandler?(result) - } - } - } - ) - - mutatingSelf.imageTask = task - return task - } - - // MARK: Cancelling Image - - /// Cancel the image download task bounded to the image view if it is running. - /// Nothing will happen if the downloading has already finished. - public func cancelDownloadTask() { - imageTask?.cancel() - } -} - -@MainActor private var taskIdentifierKey: Void? -@MainActor private var imageTaskKey: Void? - -// MARK: Properties -@MainActor -extension KingfisherWrapper where Base: WKInterfaceImage { - - public private(set) var taskIdentifier: Source.Identifier.Value? { - get { - let box: Box? = getAssociatedObject(base, &taskIdentifierKey) - return box?.value - } - set { - let box = newValue.map { Box($0) } - setRetainedAssociatedObject(base, &taskIdentifierKey, box) - } - } - - private var imageTask: DownloadTask? { - get { return getAssociatedObject(base, &imageTaskKey) } - set { setRetainedAssociatedObject(base, &imageTaskKey, newValue)} - } -} -#endif