A pass for less prose and fewer boxes. - Header shows the version and node; the port is already in the addresses below it, and the module list belonged in the log. - Settings: "Network" over the port (no explanation under it), "Startup" instead of "Starting up", and no node chooser — the path stays visible, since which node runs is the first thing worth knowing when it won't. - Permissions: one line per permission — a status dot, its name, and the one thing you can do about it. The standing explanation is gone and the modules' own reasons moved to each row's tooltip. Local network results still appear under their row after a check, with a short line and a link only when nothing answered at all. Re-check sits centred at the bottom, outside the group. The app-level "notify me" switch goes with it: macOS's own per-app notification setting already does that job, so notifications now follow the permission alone, asked for by the row's Enable button rather than on first run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
46 lines
2.4 KiB
Swift
46 lines
2.4 KiB
Swift
import Foundation
|
|
|
|
/// The launcher's own preferences — everything that is about *running* ProdDash
|
|
/// rather than about ProdDash itself. (The port is not here: it belongs to
|
|
/// ProdDash and is written to its proddash.json — see LauncherConfig.)
|
|
final class LauncherSettings: ObservableObject {
|
|
|
|
private let defaults = UserDefaults.standard
|
|
|
|
@Published var rootPath: String { didSet { defaults.set(rootPath, forKey: "rootPath") } }
|
|
@Published var nodePath: String { didSet { defaults.set(nodePath, forKey: "nodePath") } }
|
|
/// Start the server as soon as the launcher opens (so a login item brings the
|
|
/// whole dashboard up by itself).
|
|
@Published var startServerAtLaunch: Bool { didSet { defaults.set(startServerAtLaunch, forKey: "startServerAtLaunch") } }
|
|
/// Bring the server back if it dies on its own. Backs off, and gives up
|
|
/// after a burst of fast crashes rather than looping forever.
|
|
@Published var restartOnCrash: Bool { didSet { defaults.set(restartOnCrash, forKey: "restartOnCrash") } }
|
|
/// Open the dashboard in a browser whenever the server comes up.
|
|
@Published var openDashboardOnStart: Bool { didSet { defaults.set(openDashboardOnStart, forKey: "openDashboardOnStart") } }
|
|
/// Show this window at launch. Off means the launcher starts straight into
|
|
/// the menu bar (Companion's "start minimised").
|
|
@Published var showWindowAtLaunch: Bool { didSet { defaults.set(showWindowAtLaunch, forKey: "showWindowAtLaunch") } }
|
|
|
|
init() {
|
|
defaults.register(defaults: [
|
|
"startServerAtLaunch": true,
|
|
"restartOnCrash": true,
|
|
"openDashboardOnStart": false,
|
|
"showWindowAtLaunch": true,
|
|
])
|
|
rootPath = defaults.string(forKey: "rootPath") ?? ""
|
|
nodePath = defaults.string(forKey: "nodePath") ?? ""
|
|
startServerAtLaunch = defaults.bool(forKey: "startServerAtLaunch")
|
|
restartOnCrash = defaults.bool(forKey: "restartOnCrash")
|
|
openDashboardOnStart = defaults.bool(forKey: "openDashboardOnStart")
|
|
showWindowAtLaunch = defaults.bool(forKey: "showWindowAtLaunch")
|
|
}
|
|
|
|
/// False until the launcher has run once — used to open the window (and ask
|
|
/// for the permissions ProdDash needs) the first time only.
|
|
var hasRunBefore: Bool {
|
|
get { defaults.bool(forKey: "hasRunBefore") }
|
|
set { defaults.set(newValue, forKey: "hasRunBefore") }
|
|
}
|
|
}
|