diff --git a/SignalMessaging/profiles/ProfileFetcherJob.swift b/SignalMessaging/profiles/ProfileFetcherJob.swift index e3ad5b0f6..176729b02 100644 --- a/SignalMessaging/profiles/ProfileFetcherJob.swift +++ b/SignalMessaging/profiles/ProfileFetcherJob.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation @@ -98,7 +98,7 @@ public class ProfileFetcherJob: NSObject { Logger.error("background task time ran out before profile fetch completed.") }) - DispatchQueue.main.async { + DispatchQueue.global().async { for recipientId in recipientIds { self.getAndUpdateProfile(recipientId: recipientId) } @@ -112,7 +112,7 @@ public class ProfileFetcherJob: NSObject { public func getAndUpdateProfile(recipientId: String, remainingRetries: Int = 3) { self.getProfile(recipientId: recipientId).map(on: DispatchQueue.global()) { profile in self.updateProfile(signalServiceProfile: profile) - }.catch { error in + }.catch(on: DispatchQueue.global()) { error in switch error { case ProfileFetcherJobError.throttled(let lastTimeInterval): Logger.info("skipping updateProfile: \(recipientId), lastTimeInterval: \(lastTimeInterval)") @@ -129,7 +129,6 @@ public class ProfileFetcherJob: NSObject { } public func getProfile(recipientId: String) -> Promise { - AssertIsOnMainThread() if !ignoreThrottling { if let lastDate = ProfileFetcherJob.fetchDateMap[recipientId] { let lastTimeInterval = fabs(lastDate.timeIntervalSinceNow) @@ -162,8 +161,6 @@ public class ProfileFetcherJob: NSObject { private func requestProfile(recipientId: String, udAccess: OWSUDAccess?, canFailoverUDAuth: Bool) -> Promise { - AssertIsOnMainThread() - let requestMaker = RequestMaker(label: "Profile Fetch", requestFactoryBlock: { (udAccessKeyForRequest) -> TSRequest in return OWSRequestFactory.getProfileRequest(recipientId: recipientId, udAccessKey: udAccessKeyForRequest) diff --git a/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift b/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift index 2f28fbd0e..7646ce858 100644 --- a/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift +++ b/SignalServiceKit/src/Messages/UD/OWSRequestMaker.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // import Foundation @@ -95,7 +95,7 @@ public class RequestMaker: NSObject { @objc public func makeRequestObjc() -> AnyPromise { let promise = makeRequest() - .recover { (error: Error) -> Promise in + .recover(on: DispatchQueue.global()) { (error: Error) -> Promise in switch error { case NetworkManagerError.taskError(_, let underlyingError): throw underlyingError @@ -140,7 +140,7 @@ public class RequestMaker: NSObject { }) { (statusCode: Int, responseData: Data?, error: Error) in resolver.reject(RequestMakerError.websocketRequestError(statusCode: statusCode, responseData: responseData, underlyingError: error)) } - }.recover { (error: Error) -> Promise in + }.recover(on: DispatchQueue.global()) { (error: Error) -> Promise in switch error { case RequestMakerError.websocketRequestError(let statusCode, _, _): if isUDRequest && (statusCode == 401 || statusCode == 403) { @@ -173,7 +173,7 @@ public class RequestMaker: NSObject { } } else { return self.networkManager.makePromise(request: request) - .map { (networkManagerResult: TSNetworkManager.NetworkManagerResult) -> RequestMakerResult in + .map(on: DispatchQueue.global()) { (networkManagerResult: TSNetworkManager.NetworkManagerResult) -> RequestMakerResult in if self.udManager.isUDVerboseLoggingEnabled() { if isUDRequest { Logger.debug("UD REST request '\(self.label)' succeeded.") @@ -188,7 +188,7 @@ public class RequestMaker: NSObject { return RequestMakerResult(responseObject: networkManagerResult.responseObject, wasSentByUD: isUDRequest, wasSentByWebsocket: false) - }.recover { (error: Error) -> Promise in + }.recover(on: DispatchQueue.global()) { (error: Error) -> Promise in switch error { case NetworkManagerError.taskError(let task, _): let statusCode = task.statusCode()