X-Git-Url: https://git.r.bdr.sh/rbdr/captura/blobdiff_plain/377442f2f1f0f08bc525393c9bd1c84f159c5159..e42019cd38b59e757f6036b132614a471d4cf6fe:/Captura/CapturaApp.swift?ds=sidebyside diff --git a/Captura/CapturaApp.swift b/Captura/CapturaApp.swift index c6ec9f0..2136d72 100644 --- a/Captura/CapturaApp.swift +++ b/Captura/CapturaApp.swift @@ -6,7 +6,7 @@ import AVFoundation @main struct CapturaApp: App { - + @NSApplicationDelegateAdaptor(CapturaAppDelegate.self) var appDelegate var body: some Scene { @@ -20,7 +20,7 @@ struct CapturaApp: App { } } -class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { +@objc(CapturaAppDelegate) class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { @Environment(\.openURL) var openURL var statusItem: NSStatusItem! @@ -39,7 +39,7 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { var remoteFiles: [CapturaRemoteFile] = [] var captureSessionConfiguration: CaptureSessionConfiguration = CaptureSessionConfiguration() - @objc var scriptedPreferences: ScriptedPreferences? + @objc dynamic var scriptedPreferences: ScriptedPreferences = ScriptedPreferences() func applicationDidFinishLaunching(_ notification: Notification) { setupStatusBar() @@ -50,8 +50,6 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { object: nil) closeWindow() fetchRemoteItems() - - scriptedPreferences = ScriptedPreferences() } // MARK: - Setup Functions @@ -101,7 +99,7 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { window.close() } } - + // MARK: - URL Event Handler func application(_ application: NSApplication, open urls: [URL]) { @@ -110,13 +108,14 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { if let action = CapturaURLDecoder.decodeParams(url: url) { switch action { case let .configure(config): - CapturaSettings.apply(config) + NotificationCenter.default.post(name: .setConfiguration, object: nil, userInfo: [ + "config": config + ]) case let .record(config): - let config = CaptureSessionConfiguration(from: config) - NotificationCenter.default.post(name: .startAreaSelection, object: nil, userInfo: [ + NotificationCenter.default.post(name: .setCaptureSessionConfiguration, object: nil, userInfo: [ "config": config ]) - NotificationCenter.default.post(name: .startAreaSelection, object: nil, userInfo: nil) + NotificationCenter.default.post(name: .startAreaSelection, object: nil, userInfo: nil) } } } @@ -203,8 +202,16 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { if let frame = notification.userInfo?["frame"] { receivedFrame(frame as! CVImageBuffer) } + case .setConfiguration: + DispatchQueue.main.async { + if let userInfo = notification.userInfo { + if let config = userInfo["config"] as? ConfigureAction { + self.setConfiguration(config) + } + } + } case .reloadConfiguration: - reloadConfiguration() + reloadConfiguration() case .setCaptureSessionConfiguration: if let userInfo = notification.userInfo { if let config = userInfo["config"] as? RecordAction { @@ -339,6 +346,10 @@ class CapturaAppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { } } + func setConfiguration(_ config: ConfigureAction) { + CapturaSettings.apply(config) + } + func reloadConfiguration() { self.captureSessionConfiguration = CaptureSessionConfiguration() }