-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Labels
enhancementNew feature or requestNew feature or request
Milestone
Description
Overview
Add progress reporting for asset uploads to improve UX during large file transfers.
Current API
// No progress feedback during upload
let data = try Data(contentsOf: largeVideoURL) // 200 MB
let result = try await service.uploadAssets(data: data)
// User waits with no feedbackProposed API
// Option 1: Callback-based progress
let result = try await service.uploadAssets(
data: data,
progress: { bytesUploaded, totalBytes in
let percent = Double(bytesUploaded) / Double(totalBytes) * 100
print("Upload: \(percent)%")
}
)
// Option 2: AsyncSequence of progress updates
for try await progress in service.uploadAssetsWithProgress(data: data) {
switch progress {
case .uploading(let bytes, let total):
updateUI(bytes: bytes, total: total)
case .completed(let result):
handleResult(result)
}
}
// Option 3: Publisher-based (Combine)
service.uploadAssetsPublisher(data: data)
.sink(
receiveValue: { progress in updateUI(progress) },
receiveCompletion: { completion in handleCompletion(completion) }
)Benefits
- Better UX: Users see upload progress
- Timeout handling: Detect stalled uploads
- Cancellation support: Allow user to cancel long uploads
- Network diagnostics: Monitor upload speed
Implementation Notes
- Use URLSession's
uploadTask(with:from:)progress monitoring - Leverage OpenAPIRuntime's HTTPBody streaming
- Consider memory-efficient streaming for large files
- Add upload speed calculation (bytes/second)
- Support cancellation via Task cancellation
Considerations
- Which API style is most idiomatic for Swift Concurrency?
- Should progress be opt-in or always available?
- How to handle progress with batch uploads?
- Minimum file size threshold for progress tracking?
Related
- Implemented in Uploading Assets (assets/upload) #30 (uploadAssets)
- Consider combining with Enhancement: Support batch asset upload (multiple files) #201 (batch upload)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request