mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
3514ed4f50
Added a backoff to the Poller retry Updated the "blocking" behaviour of the JobRunner Tweaked the Job dependency handling to better handle orphaned dependencies Fixed an issue where the Conversation screen wasn't observing database changes
51 lines
1.7 KiB
Swift
51 lines
1.7 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
import GRDB
|
|
import SignalCoreKit
|
|
import SessionUtilitiesKit
|
|
|
|
public enum GetSnodePoolJob: JobExecutor {
|
|
public static let maxFailureCount: Int = -1
|
|
public static let requiresThreadId: Bool = false
|
|
public static let requiresInteractionId: Bool = false
|
|
|
|
public static func run(
|
|
_ job: Job,
|
|
success: @escaping (Job, Bool) -> (),
|
|
failure: @escaping (Job, Error?, Bool) -> (),
|
|
deferred: @escaping (Job) -> ()
|
|
) {
|
|
// If the user doesn't exist then don't do anything (when the user registers we run this
|
|
// job directly)
|
|
guard Identity.userExists() else {
|
|
deferred(job)
|
|
return
|
|
}
|
|
|
|
// If we already have cached Snodes then we still want to trigger the 'SnodeAPI.getSnodePool'
|
|
// but we want to succeed this job immediately (since it's marked as blocking), this allows us
|
|
// to block if we have no Snode pool and prevent other jobs from failing but avoids having to
|
|
// wait if we already have a potentially valid snode pool
|
|
guard !SnodeAPI.hasCachedSnodesInclusingExpired() else {
|
|
SnodeAPI.getSnodePool().retainUntilComplete()
|
|
success(job, false)
|
|
return
|
|
}
|
|
|
|
SnodeAPI.getSnodePool()
|
|
.done { _ in success(job, false) }
|
|
.catch { error in failure(job, error, false) }
|
|
.retainUntilComplete()
|
|
}
|
|
|
|
public static func run() {
|
|
GetSnodePoolJob.run(
|
|
Job(variant: .getSnodePool),
|
|
success: { _, _ in },
|
|
failure: { _, _, _ in },
|
|
deferred: { _ in }
|
|
)
|
|
}
|
|
}
|