mirror of
https://github.com/immich-app/immich.git
synced 2026-03-22 23:19:04 +03:00
add schemas sync variants formatting initial implementation use existing db, wip move to separate folder fix table definitions wip wiring it up repository pattern
106 lines
4.0 KiB
Swift
106 lines
4.0 KiB
Swift
import BackgroundTasks
|
|
import Flutter
|
|
import SQLiteData
|
|
import UIKit
|
|
import network_info_plus
|
|
import path_provider_foundation
|
|
import permission_handler_apple
|
|
import photo_manager
|
|
import shared_preferences_foundation
|
|
|
|
@main
|
|
@objc class AppDelegate: FlutterAppDelegate {
|
|
private var backgroundCompletionHandlers: [String: () -> Void] = [:]
|
|
|
|
override func application(
|
|
_ application: UIApplication,
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
) -> Bool {
|
|
// Required for flutter_local_notification
|
|
if #available(iOS 10.0, *) {
|
|
UNUserNotificationCenter.current().delegate = self
|
|
}
|
|
|
|
GeneratedPluginRegistrant.register(with: self)
|
|
let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
|
|
AppDelegate.registerPlugins(with: controller.engine)
|
|
BackgroundServicePlugin.register(with: self.registrar(forPlugin: "BackgroundServicePlugin")!)
|
|
|
|
BackgroundServicePlugin.registerBackgroundProcessing()
|
|
BackgroundWorkerApiImpl.registerBackgroundWorkers()
|
|
|
|
BackgroundServicePlugin.setPluginRegistrantCallback { registry in
|
|
if !registry.hasPlugin("org.cocoapods.path-provider-foundation") {
|
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "org.cocoapods.path-provider-foundation")!)
|
|
}
|
|
|
|
if !registry.hasPlugin("org.cocoapods.photo-manager") {
|
|
PhotoManagerPlugin.register(with: registry.registrar(forPlugin: "org.cocoapods.photo-manager")!)
|
|
}
|
|
|
|
if !registry.hasPlugin("org.cocoapods.shared-preferences-foundation") {
|
|
SharedPreferencesPlugin.register(
|
|
with: registry.registrar(forPlugin: "org.cocoapods.shared-preferences-foundation")!
|
|
)
|
|
}
|
|
|
|
if !registry.hasPlugin("org.cocoapods.permission-handler-apple") {
|
|
PermissionHandlerPlugin.register(with: registry.registrar(forPlugin: "org.cocoapods.permission-handler-apple")!)
|
|
}
|
|
|
|
if !registry.hasPlugin("org.cocoapods.network-info-plus") {
|
|
FPPNetworkInfoPlusPlugin.register(with: registry.registrar(forPlugin: "org.cocoapods.network-info-plus")!)
|
|
}
|
|
}
|
|
|
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
}
|
|
|
|
override func application(
|
|
_ application: UIApplication,
|
|
handleEventsForBackgroundURLSession identifier: String,
|
|
completionHandler: @escaping () -> Void
|
|
) {
|
|
backgroundCompletionHandlers[identifier] = completionHandler
|
|
}
|
|
|
|
func completionHandler(forSession identifier: String) -> (() -> Void)? {
|
|
return backgroundCompletionHandlers.removeValue(forKey: identifier)
|
|
}
|
|
|
|
public static func registerPlugins(with engine: FlutterEngine) {
|
|
NativeSyncApiImpl.register(with: engine.registrar(forPlugin: NativeSyncApiImpl.name)!)
|
|
ThumbnailApiSetup.setUp(binaryMessenger: engine.binaryMessenger, api: ThumbnailApiImpl())
|
|
BackgroundWorkerFgHostApiSetup.setUp(binaryMessenger: engine.binaryMessenger, api: BackgroundWorkerApiImpl())
|
|
|
|
let statusListener = StatusEventListener()
|
|
StreamStatusStreamHandler.register(with: engine.binaryMessenger, streamHandler: statusListener)
|
|
let progressListener = ProgressEventListener()
|
|
StreamProgressStreamHandler.register(with: engine.binaryMessenger, streamHandler: progressListener)
|
|
|
|
let dbUrl = try! FileManager.default.url(
|
|
for: .documentDirectory,
|
|
in: .userDomainMask,
|
|
appropriateFor: nil,
|
|
create: true
|
|
).appendingPathComponent("immich.sqlite")
|
|
let db = try! DatabasePool(path: dbUrl.path)
|
|
let storeRepository = StoreRepository(db: db)
|
|
let taskRepository = TaskRepository(db: db)
|
|
|
|
UploadApiSetup.setUp(
|
|
binaryMessenger: engine.binaryMessenger,
|
|
api: UploadApiImpl(
|
|
storeRepository: storeRepository,
|
|
taskRepository: taskRepository,
|
|
statusListener: statusListener,
|
|
progressListener: progressListener
|
|
)
|
|
)
|
|
}
|
|
|
|
public static func cancelPlugins(with engine: FlutterEngine) {
|
|
(engine.valuePublished(byPlugin: NativeSyncApiImpl.name) as? NativeSyncApiImpl)?.detachFromEngine()
|
|
}
|
|
}
|