TeraNativeUploadExecution.swift (1469B)
1 import Foundation 2 import RadrootsKit 3 4 /// A lost admission reply is not permission to start a second native task. 5 enum TeraNativeUploadExecution { 6 static var unknown: TeraRuntimeFailure { 7 .local(operation: "add.media.background", code: "ios.add.background_upload_unknown", 8 safeMessage: "The photo upload outcome is not yet confirmed. Check recovery before trying again.") 9 } 10 11 static func start(transfer: any RadrootsBackgroundTransfer, 12 request: RadrootsBackgroundTransferRequest, retrying: Bool) async throws -> RadrootsBackgroundTransferSnapshot 13 { 14 try Task.checkCancellation() 15 do { 16 if retrying { 17 _ = try await transfer.retry(request) 18 } else { 19 _ = try await transfer.enqueue(request) 20 } 21 } catch { 22 try Task.checkCancellation() 23 // A lost reply still requires the same exact query below; never retry. 24 } 25 // The producer queries OS tasks before returning reconciled snapshots. 26 // Carry the observed execution into receipt waiting across this await. 27 let snapshot = try await transfer.snapshot(for: request.identifier) 28 try Task.checkCancellation() 29 guard let snapshot, snapshot.identifier == request.identifier, 30 TeraBackgroundUploadRequest.persistedRequestMatches(snapshot.request, request: request), 31 [.queued, .running, .awaitingVerification, .completed].contains(snapshot.state) 32 else { throw unknown } 33 return snapshot 34 } 35 }