Skip to content
Closed
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
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ struct StandardizationError: Error {
static var standardizedAssetExportFailure = StandardizationError(
localizedDescription: "Failed to export standardized asset"
)

static var standardizedAssetWriteFailure = StandardizationError(
localizedDescription: "Failed to write standardized asset to disk"
)
}

class UploadInputStandardizationWorker {
Expand Down
78 changes: 75 additions & 3 deletions Sources/MuxUploadSDK/PublicAPI/DirectUpload.swift
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,26 @@ public final class DirectUpload {
// TODO: inject Date() for testing purposes
let outputFileName = "upload-\(Date().timeIntervalSince1970)"

let outputDirectory = FileManager.default.temporaryDirectory
guard let outputDirectory = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
).first else {
let error = StandardizationError.standardizedAssetWriteFailure
let shouldCancelUpload = self.nonStandardInputHandler?() ?? false

self.handleStandardizationFailure(
reporter: reporter,
shouldCancelUpload: shouldCancelUpload,
standardizationError: error,
inputDuration: inputDuration,
inputSize: inputSize,
inputStandardizationStartTime: inputStandardizationStartTime,
nonStandardInputReasons: result.nonStandardInputReasons,
sourceAsset: sourceAsset
)
return
}

let outputURL = URL(
fileURLWithPath: outputFileName,
relativeTo: outputDirectory
Expand Down Expand Up @@ -475,6 +494,7 @@ public final class DirectUpload {
self.fileWorker?.cancel()
self.uploadManager.acknowledgeUpload(id: self.id)
self.input.processUploadCancellation()
try? FileManager.default.removeItem(at: outputURL)
}
} else {
self.startNetworkTransport(
Expand Down Expand Up @@ -504,7 +524,27 @@ public final class DirectUpload {
// TODO: inject Date() for testing purposes
let outputFileName = "upload-\(Date().timeIntervalSince1970)"

let outputDirectory = FileManager.default.temporaryDirectory
guard let outputDirectory = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
).first else {
let error = StandardizationError.standardizedAssetWriteFailure
let shouldCancelUpload = self.nonStandardInputHandler?() ?? false

self.handleStandardizationFailure(
reporter: reporter,
shouldCancelUpload: shouldCancelUpload,
standardizationError: error,
inputDuration: inputDuration,
inputSize: inputSize,
inputStandardizationStartTime: inputStandardizationStartTime,
nonStandardInputReasons: result.nonStandardInputReasons,
sourceAsset: sourceAsset
)

return
}

let outputURL = URL(
fileURLWithPath: outputFileName,
relativeTo: outputDirectory
Expand Down Expand Up @@ -578,6 +618,39 @@ public final class DirectUpload {
}
}

func handleStandardizationFailure(
reporter: Reporter,
shouldCancelUpload: Bool,
standardizationError: Error,
inputDuration: CMTime,
inputSize: UInt64,
inputStandardizationStartTime: Date,
nonStandardInputReasons: [UploadInputFormatInspectionResult.NonstandardInputReason],
sourceAsset: AVURLAsset
) {
reporter.reportUploadInputStandardizationFailure(
errorDescription: standardizationError.localizedDescription,
inputDuration: inputDuration.seconds,
inputSize: inputSize,
nonStandardInputReasons: nonStandardInputReasons,
options: self.uploadInfo.options,
standardizationEndTime: Date(),
standardizationStartTime: inputStandardizationStartTime,
uploadCanceled: shouldCancelUpload,
uploadURL: self.uploadURL
)

if !shouldCancelUpload {
self.startNetworkTransport(
videoFile: sourceAsset.url
)
} else {
self.fileWorker?.cancel()
self.uploadManager.acknowledgeUpload(id: self.id)
self.input.processUploadCancellation()
}
}

func handleInspectionFailure(
inspectionError: Error,
inputDuration: CMTime,
Expand Down Expand Up @@ -672,7 +745,6 @@ public final class DirectUpload {
videoFile: URL,
duration: CMTime
) {

guard readyForTransport() else {
return
}
Expand Down
4 changes: 2 additions & 2 deletions scripts/run-unit-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ echo "▸ Test ${SCHEME}"

xcodebuild clean test \
-scheme $SCHEME \
-destination 'platform=iOS Simulator,OS=17.5,name=iPhone 15' \
-sdk iphonesimulator18.0 \
-destination 'platform=iOS Simulator,OS=18.2,name=iPhone 16' \
-sdk iphonesimulator18.2 \
| xcbeautify