From ebca72d31f97e88e073b413216d9649e09de882e Mon Sep 17 00:00:00 2001 From: mertalev <101130780+mertalev@users.noreply.github.com> Date: Fri, 16 Jan 2026 18:08:22 -0500 Subject: [PATCH] remove incremental --- .../ios/Runner/Images/RemoteImagesImpl.swift | 49 ++++++------------- 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/mobile/ios/Runner/Images/RemoteImagesImpl.swift b/mobile/ios/Runner/Images/RemoteImagesImpl.swift index 6e8476d036..050e0af50d 100644 --- a/mobile/ios/Runner/Images/RemoteImagesImpl.swift +++ b/mobile/ios/Runner/Images/RemoteImagesImpl.swift @@ -6,13 +6,11 @@ import Photos class RemoteImageRequest { weak var task: URLSessionDataTask? var isCancelled = false - let imageSource: CGImageSource var data: CFMutableData? let completion: (Result<[String: Int64], any Error>) -> Void - init(task: URLSessionDataTask, imageSource: CGImageSource, completion: @escaping (Result<[String: Int64], any Error>) -> Void) { + init(task: URLSessionDataTask, completion: @escaping (Result<[String: Int64], any Error>) -> Void) { self.task = task - self.imageSource = imageSource self.data = nil self.completion = completion } @@ -26,7 +24,7 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { try! FileManager.default.createDirectory(at: thumbnailPath, withIntermediateDirectories: true) config.urlCache = URLCache( memoryCapacity: 0, - diskCapacity: 10 << 20, + diskCapacity: 10 << 30, directory: thumbnailPath ) config.httpMaximumConnectionsPerHost = 16 @@ -34,7 +32,6 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { }() func requestImage(url: String, headers: [String : String], requestId: Int64, completion: @escaping (Result<[String : Int64], any Error>) -> Void) { - print("Got image request \(requestId) for \(url)") var urlRequest = URLRequest(url: URL(string: url)!) for (key, value) in headers { urlRequest.setValue(value, forHTTPHeaderField: key) @@ -42,20 +39,13 @@ class RemoteImageApiImpl: NSObject, RemoteImageApi { let task = Self.session.dataTask(with: urlRequest) task.taskDescription = String(requestId) - let imageRequest = RemoteImageRequest( - task: task, - imageSource: CGImageSourceCreateIncremental( - [kCGImageSourceShouldCache: false] as CFDictionary), - completion: completion - ) + let imageRequest = RemoteImageRequest(task: task, completion: completion) Self.delegate.add(requestId: requestId, request: imageRequest) task.resume() - print("Started task for \(requestId)") } func cancelRequest(requestId: Int64) { - print("Cancelling task for \(requestId)") Self.delegate.cancel(requestId: requestId) } } @@ -71,6 +61,11 @@ class RemoteImageApiDelegate: NSObject, URLSessionDataDelegate { )! private static var requests = [Int64: RemoteImageRequest]() private static let cancelledResult = Result<[String: Int64], any Error>.success([:]) + private static let decodeOptions = [ + kCGImageSourceShouldCache: false, + kCGImageSourceShouldCacheImmediately: true, + kCGImageSourceCreateThumbnailWithTransform: true, + ] as CFDictionary func urlSession( _ session: URLSession, dataTask: URLSessionDataTask, @@ -92,46 +87,36 @@ class RemoteImageApiDelegate: NSObject, URLSessionDataDelegate { func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - print("Got data") guard let taskDescription = dataTask.taskDescription, let requestId = Int64(taskDescription), - let request = get(requestId: requestId), - let accumulatedData = request.data + let request = get(requestId: requestId) else { return } data.withUnsafeBytes { bytes in CFDataAppendBytes(request.data, bytes.bindMemory(to: UInt8.self).baseAddress, data.count) } - CGImageSourceUpdateData(request.imageSource, accumulatedData, false) } func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - print("Task ended") guard let taskDescription = task.taskDescription, let requestId = Int64(taskDescription), let request = get(requestId: requestId), - let accumulatedData = request.data + let data = request.data else { return } + defer { remove(requestId: requestId) } + if let error = error { - print("Task failed for \(requestId): \(error)") - remove(requestId: requestId) return request.completion(.failure(error)) } - CGImageSourceUpdateData(request.imageSource, accumulatedData, true) - - let options = [kCGImageSourceShouldCacheImmediately: true] as CFDictionary - guard let cgImage = CGImageSourceCreateImageAtIndex(request.imageSource, 0, nil) else { - print("No image for \(requestId)") - remove(requestId: requestId) + guard let imageSource = CGImageSourceCreateWithData(data, nil), + let cgImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, Self.decodeOptions) else { return request.completion(.failure(PigeonError(code: "", message: "Failed to decode image for request \(requestId)", details: nil))) } - print("Got image for \(requestId)") if request.isCancelled { - remove(requestId: requestId) return request.completion(Self.cancelledResult) } @@ -140,7 +125,6 @@ class RemoteImageApiDelegate: NSObject, URLSessionDataDelegate { if request.isCancelled { buffer.free() - remove(requestId: requestId) return request.completion(Self.cancelledResult) } @@ -151,12 +135,7 @@ class RemoteImageApiDelegate: NSObject, URLSessionDataDelegate { "height": Int64(buffer.height), "rowBytes": Int64(buffer.rowBytes), ])) - print("Successful response for \(requestId)") - - remove(requestId: requestId) } catch { - print("vImage conversion failed for \(requestId): \(error)") - remove(requestId: requestId) return request.completion(.failure(PigeonError(code: "", message: "Failed to convert image for request \(requestId): \(error)", details: nil))) } }