diff --git a/AltStore/Operations/Operation.swift b/AltStore/Operations/Operation.swift index baba0384..b0caaea1 100644 --- a/AltStore/Operations/Operation.swift +++ b/AltStore/Operations/Operation.swift @@ -12,7 +12,10 @@ import Roxas class ResultOperation: Operation { var resultHandler: ((Result) -> Void)? - + + // Should only be set by subclasses + var localizedFailure: String? + @available(*, unavailable) override func finish() { @@ -22,16 +25,20 @@ class ResultOperation: Operation func finish(_ result: Result) { guard !self.isFinished else { return } - + + var result = result + if self.isCancelled { - self.resultHandler?(.failure(OperationError.cancelled)) + result = .failure(OperationError.cancelled) } - else - { - self.resultHandler?(result) + else if case .failure(let nsError as NSError) = result, let localizedFailure, nsError.localizedFailure == nil { + // Error doesn't have its own localizedFailure, so we give it the Operation's (if it exists) + let error = nsError.withLocalizedFailure(localizedFailure) + result = .failure(error) } - + self.resultHandler?(result) + super.finish() } }