From 9d77a7907c98d3069266e6cb0191440e516b3beb Mon Sep 17 00:00:00 2001 From: Mikunj Varsani Date: Wed, 8 May 2019 15:32:10 +1000 Subject: [PATCH] Fix crashing in LokiApi. --- SignalServiceKit/src/Loki/LokiAPI.swift | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/SignalServiceKit/src/Loki/LokiAPI.swift b/SignalServiceKit/src/Loki/LokiAPI.swift index 68ad3e0df..6497f88c7 100644 --- a/SignalServiceKit/src/Loki/LokiAPI.swift +++ b/SignalServiceKit/src/Loki/LokiAPI.swift @@ -1,5 +1,19 @@ import PromiseKit +// Helper function for objc apis +private extension Promise where T == Any { + func recoverNetworkError(on queue: DispatchQueue) -> Promise { + return self.recover(on: queue) { error -> Promise in + switch error { + case NetworkManagerError.taskError(_, let underlyingError): + throw underlyingError + default: + throw error + } + } + } +} + @objc public final class LokiAPI : NSObject { private static let version = "v1" @@ -68,13 +82,16 @@ import PromiseKit // MARK: Obj-C API @objc public static func objc_getMessages() -> AnyPromise { let promise = getMessages() + .recoverNetworkError(on: DispatchQueue.global()) let anyPromise = AnyPromise(promise) anyPromise.retainUntilComplete() return anyPromise } @objc public static func objc_sendSignalMessage(_ signalMessage: SignalMessage, to destination: String, requiringPoW isPoWRequired: Bool) -> AnyPromise { - let promise = LokiMessage.fromSignalMessage(signalMessage, requiringPoW: isPoWRequired).then(sendMessage) + let promise = LokiMessage.fromSignalMessage(signalMessage, requiringPoW: isPoWRequired) + .then(sendMessage) + .recoverNetworkError(on: DispatchQueue.global()) let anyPromise = AnyPromise(promise) anyPromise.retainUntilComplete() return anyPromise