From 0c4fe98370792364b58142a4f3a2ea740bebf785 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 15 Nov 2022 17:05:39 -0600 Subject: [PATCH] Adds ResultOperation.localizedFailure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows ResultOperations to provide default localized failures for errors that don’t have their own localized failure. --- AltStore/Operations/Operation.swift | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/AltStore/Operations/Operation.swift b/AltStore/Operations/Operation.swift index baba0384..79824e4d 100644 --- a/AltStore/Operations/Operation.swift +++ b/AltStore/Operations/Operation.swift @@ -13,6 +13,9 @@ class ResultOperation: Operation { var resultHandler: ((Result) -> Void)? + // Should only be set by subclasses. + var localizedFailure: String? + @available(*, unavailable) override func finish() { @@ -23,15 +26,21 @@ class ResultOperation: Operation { guard !self.isFinished else { return } + var result = result + if self.isCancelled { - self.resultHandler?(.failure(OperationError.cancelled)) + result = .failure(OperationError.cancelled) } - else + else if case .failure(let nsError as NSError) = result, let localizedFailure, nsError.localizedFailure == nil { - self.resultHandler?(result) + // Error does not have localizedFailure, so give it the Operation's failure (if one exists). + let error = nsError.withLocalizedFailure(localizedFailure) + result = .failure(error) } + self.resultHandler?(result) + super.finish() } }