53 lines
1.9 KiB
Swift
53 lines
1.9 KiB
Swift
import Cocoa
|
||
import SwiftUI
|
||
import UniformTypeIdentifiers
|
||
|
||
class AppDelegate: NSObject, NSApplicationDelegate {
|
||
weak var menuBarManager: MenuBarManager?
|
||
|
||
func applicationDidFinishLaunching(_ notification: Notification) {
|
||
menuBarManager?.applyActivationPolicy()
|
||
}
|
||
|
||
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
|
||
menuBarManager?.applyActivationPolicy()
|
||
|
||
if !flag {
|
||
menuBarManager?.focusMainWindow()
|
||
}
|
||
return true
|
||
}
|
||
|
||
func applicationDidBecomeActive(_ notification: Notification) {
|
||
menuBarManager?.applyActivationPolicy()
|
||
}
|
||
|
||
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
|
||
return false
|
||
}
|
||
|
||
// Stash URL when app cold-starts to avoid spawning a new window/tab
|
||
var pendingOpenFileURL: URL?
|
||
|
||
func application(_ application: NSApplication, open urls: [URL]) {
|
||
guard let url = urls.first(where: { SupportedMedia.isSupported(url: $0) }) else {
|
||
return
|
||
}
|
||
|
||
NSApplication.shared.activate(ignoringOtherApps: true)
|
||
|
||
if WindowManager.shared.currentMainWindow() == nil {
|
||
// Cold start: do NOT create a window here to avoid extra window/tab.
|
||
// Defer to SwiftUI’s WindowGroup-created ContentView and let it process this later.
|
||
pendingOpenFileURL = url
|
||
} else {
|
||
// Running: focus current window and route in-place to Transcribe Audio
|
||
menuBarManager?.focusMainWindow()
|
||
NotificationCenter.default.post(name: .navigateToDestination, object: nil, userInfo: ["destination": "Transcribe Audio"])
|
||
DispatchQueue.main.async {
|
||
NotificationCenter.default.post(name: .openFileForTranscription, object: nil, userInfo: ["url": url])
|
||
}
|
||
}
|
||
}
|
||
}
|