Skip to content
Merged
Show file tree
Hide file tree
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
11 changes: 6 additions & 5 deletions Sources/Networking/Networking+HTTPRequests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
33 changes: 8 additions & 25 deletions Sources/Networking/Networking+Private.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}

Expand Down
4 changes: 0 additions & 4 deletions Sources/Networking/Networking.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,6 @@ public actor Networking {
case delete = "DELETE"
}

enum SessionTaskType: String {
case data, upload, download
}

enum ResponseType {
case json
case data
Expand Down