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.
72 lines
2.8 KiB
Swift
72 lines
2.8 KiB
Swift
3 years ago
|
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
||
|
|
||
|
import Foundation
|
||
|
import SessionMessagingKit
|
||
|
import SessionUtilitiesKit
|
||
|
import UIKit
|
||
|
|
||
|
public enum AppSetup {
|
||
|
private static var hasRun: Bool = false
|
||
|
|
||
|
public static func setupEnvironment(
|
||
|
appSpecificBlock: @escaping () -> (),
|
||
|
migrationProgressChanged: ((CGFloat, TimeInterval) -> ())? = nil,
|
||
|
migrationsCompletion: @escaping (Bool, Bool) -> ()
|
||
|
) {
|
||
|
guard !AppSetup.hasRun else { return }
|
||
|
|
||
|
AppSetup.hasRun = true
|
||
|
|
||
|
var backgroundTask: OWSBackgroundTask? = OWSBackgroundTask(labelStr: #function)
|
||
|
|
||
|
DispatchQueue.global(qos: .userInitiated).async {
|
||
|
// Order matters here.
|
||
|
//
|
||
|
// All of these "singletons" should have any dependencies used in their
|
||
|
// initializers injected.
|
||
|
OWSBackgroundTaskManager.shared().observeNotifications()
|
||
|
|
||
|
let primaryStorage: OWSPrimaryStorage = OWSPrimaryStorage(storage: ())
|
||
|
OWSPrimaryStorage.protectFiles()
|
||
|
|
||
|
// AFNetworking (via CFNetworking) spools it's attachments to NSTemporaryDirectory().
|
||
|
// If you receive a media message while the device is locked, the download will fail if the temporary directory
|
||
|
// is NSFileProtectionComplete
|
||
|
let success: Bool = OWSFileSystem.protectFileOrFolder(
|
||
|
atPath: NSTemporaryDirectory(),
|
||
|
fileProtectionType: .completeUntilFirstUserAuthentication
|
||
|
)
|
||
|
assert(success)
|
||
|
|
||
|
Environment.shared = Environment(
|
||
|
primaryStorage: primaryStorage,
|
||
|
reachabilityManager: SSKReachabilityManagerImpl(),
|
||
|
audioSession: OWSAudioSession(),
|
||
|
preferences: OWSPreferences(),
|
||
|
proximityMonitoringManager: OWSProximityMonitoringManagerImpl(),
|
||
|
windowManager: OWSWindowManager(default: ())
|
||
|
)
|
||
|
appSpecificBlock()
|
||
|
|
||
|
/// `performMainSetup` **MUST** run before `perform(migrations:)`
|
||
|
Configuration.performMainSetup()
|
||
|
GRDBStorage.shared.perform(
|
||
|
migrations: [
|
||
|
SNUtilitiesKit.migrations(),
|
||
|
SNSnodeKit.migrations(),
|
||
|
SNMessagingKit.migrations()
|
||
|
],
|
||
|
onProgressUpdate: migrationProgressChanged,
|
||
|
onComplete: { success, needsConfigSync in
|
||
|
DispatchQueue.main.async {
|
||
|
migrationsCompletion(success, needsConfigSync)
|
||
|
|
||
|
// The 'if' is only there to prevent the "variable never read" warning from showing
|
||
|
if backgroundTask != nil { backgroundTask = nil }
|
||
|
}
|
||
|
}
|
||
|
)
|
||
|
}
|
||
|
}
|
||
|
}
|