From 6537b5704a02b34fc8bceab432b58e07a8af4cbc Mon Sep 17 00:00:00 2001 From: Elvis Nunez Date: Wed, 16 Sep 2026 23:10:36 +0200 Subject: [PATCH] The cancel path keeps its selection, not a void helper --- .../Networking/Networking+HTTPRequests.swift | 11 ++++--- Sources/Networking/Networking+Private.swift | 33 +++++-------------- Sources/Networking/Networking.swift | 4 --- 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/Sources/Networking/Networking+HTTPRequests.swift b/Sources/Networking/Networking+HTTPRequests.swift index 778a319..00ff89d 100644 --- a/Sources/Networking/Networking+HTTPRequests.swift +++ b/Sources/Networking/Networking+HTTPRequests.swift @@ -735,11 +735,12 @@ extension Networking { /// Completes the in-flight download for `path` with `URLError.cancelled`. public func cancelImageDownload(_ path: String) async throws { let url = try composedURL(with: path) - await cancelRequest( - .data, - requestType: .get, - url: url - ) + let (dataTasks, _, _) = await session.tasks + Self.firstTask( + matching: .get, + url: url, + among: dataTasks + )?.cancel() } public func fakeImageDownload( diff --git a/Sources/Networking/Networking+Private.swift b/Sources/Networking/Networking+Private.swift index d9324ae..d16a34c 100644 --- a/Sources/Networking/Networking+Private.swift +++ b/Sources/Networking/Networking+Private.swift @@ -347,31 +347,14 @@ extension Networking { return (exchange.data, exchange.response) } - // The cancel path is Networking's own, reached from the verbs in another file. - // oida:disable:next no_single_use_void_functions - func cancelRequest( - _ sessionTaskType: SessionTaskType, - requestType: RequestType, - url: URL - ) async { - let (dataTasks, uploadTasks, downloadTasks) = await session.tasks - var sessionTasks = [URLSessionTask]() - switch sessionTaskType { - case .data: - sessionTasks = dataTasks - case .download: - sessionTasks = downloadTasks - case .upload: - sessionTasks = uploadTasks - } - - for sessionTask in sessionTasks { - if sessionTask.originalRequest?.httpMethod == requestType.rawValue - && sessionTask.originalRequest?.url?.absoluteString == url.absoluteString - { - sessionTask.cancel() - break - } + static func firstTask( + matching requestType: RequestType, + url: URL, + among tasks: [URLSessionTask] + ) -> URLSessionTask? { + tasks.first { + $0.originalRequest?.httpMethod == requestType.rawValue + && $0.originalRequest?.url?.absoluteString == url.absoluteString } } diff --git a/Sources/Networking/Networking.swift b/Sources/Networking/Networking.swift index 99301bf..65ebc87 100644 --- a/Sources/Networking/Networking.swift +++ b/Sources/Networking/Networking.swift @@ -34,10 +34,6 @@ public actor Networking { case delete = "DELETE" } - enum SessionTaskType: String { - case data, upload, download - } - enum ResponseType { case json case data