mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.8 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,
 | |
|         queue: DispatchQueue,
 | |
|         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(on: queue) { _ in success(job, false) }
 | |
|             .catch(on: queue) { error in failure(job, error, false) }
 | |
|             .retainUntilComplete()
 | |
|     }
 | |
|     
 | |
|     public static func run() {
 | |
|         GetSnodePoolJob.run(
 | |
|             Job(variant: .getSnodePool),
 | |
|             queue: DispatchQueue.global(qos: .background),
 | |
|             success: { _, _ in },
 | |
|             failure: { _, _, _ in },
 | |
|             deferred: { _ in }
 | |
|         )
 | |
|     }
 | |
| }
 |