Release 1.3.9
This commit is contained in:
75
BusyMirror/MenuBarSupport.swift
Normal file
75
BusyMirror/MenuBarSupport.swift
Normal file
@@ -0,0 +1,75 @@
|
||||
import SwiftUI
|
||||
import AppKit
|
||||
|
||||
enum BusyMirrorSceneID {
|
||||
static let mainWindow = "main-window"
|
||||
}
|
||||
|
||||
@MainActor
|
||||
final class BusyMirrorAppController: ObservableObject {
|
||||
@Published private(set) var isSyncing = false
|
||||
@Published private(set) var hasPendingSyncRequest = false
|
||||
@Published private(set) var syncRequestToken = UUID()
|
||||
@Published private(set) var isMainWindowVisible = false
|
||||
|
||||
func requestSync() {
|
||||
hasPendingSyncRequest = true
|
||||
syncRequestToken = UUID()
|
||||
}
|
||||
|
||||
func clearPendingSyncRequest() {
|
||||
hasPendingSyncRequest = false
|
||||
}
|
||||
|
||||
func setSyncing(_ syncing: Bool) {
|
||||
isSyncing = syncing
|
||||
}
|
||||
|
||||
func setMainWindowVisible(_ visible: Bool) {
|
||||
isMainWindowVisible = visible
|
||||
}
|
||||
|
||||
func openMainWindow(using openWindow: OpenWindowAction) {
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
openWindow(id: BusyMirrorSceneID.mainWindow)
|
||||
}
|
||||
}
|
||||
|
||||
struct BusyMirrorMenuBarView: View {
|
||||
@Environment(\.openWindow) private var openWindow
|
||||
@EnvironmentObject private var appController: BusyMirrorAppController
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
Text("BusyMirror")
|
||||
.font(.headline)
|
||||
|
||||
Text(appController.isSyncing ? "Sync in progress." : "Use your saved routes or current selection.")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
Divider()
|
||||
|
||||
Button(appController.isSyncing ? "Syncing…" : "Sync Now") {
|
||||
let shouldOpenWindow = !appController.isMainWindowVisible
|
||||
appController.requestSync()
|
||||
if shouldOpenWindow {
|
||||
appController.openMainWindow(using: openWindow)
|
||||
}
|
||||
}
|
||||
.disabled(appController.isSyncing)
|
||||
|
||||
Button("Open BusyMirror") {
|
||||
appController.openMainWindow(using: openWindow)
|
||||
}
|
||||
|
||||
Divider()
|
||||
|
||||
Button("Quit BusyMirror") {
|
||||
NSApp.terminate(nil)
|
||||
}
|
||||
}
|
||||
.padding(12)
|
||||
.frame(width: 240, alignment: .leading)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user