add UserDefaults-backed Settings storage

Settings enum holds all upcoming settings-window preferences. Booleans
default to false (disabled by default); includeGreedyCasks and
confirmBeforeUpgradeAll default to true via register(defaults:), which
provides fallbacks without writing to disk. Launch-at-login is not
stored here — SMAppService will be its source of truth.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
maxsoch 2026-07-06 22:03:19 +02:00
parent 9f848be875
commit be49480732
2 changed files with 49 additions and 0 deletions

View file

@ -43,6 +43,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
// MARK: - Menu // MARK: - Menu
func applicationDidFinishLaunching(_: Notification) { func applicationDidFinishLaunching(_: Notification) {
Settings.registerDefaults()
statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
setMenuBarIcon("brewbar-uptodate") setMenuBarIcon("brewbar-uptodate")

47
BrewBar/Settings.swift Normal file
View file

@ -0,0 +1,47 @@
import Foundation
/// UserDefaults-backed app settings. Booleans read false for unset keys,
/// which covers the disabled-by-default settings; enabled-by-default ones
/// get their fallback via registerDefaults() (consulted only when the user
/// has never changed the value nothing is written to disk).
///
/// Launch-at-login is intentionally absent: SMAppService is its source of
/// truth, so storing a copy here could only drift out of sync.
enum Settings {
static func registerDefaults() {
UserDefaults.standard.register(defaults: [
"includeGreedyCasks": true,
"confirmBeforeUpgradeAll": true,
])
}
static var autoUpgradeFormulae: Bool {
get { UserDefaults.standard.bool(forKey: "autoUpgradeFormulae") }
set { UserDefaults.standard.set(newValue, forKey: "autoUpgradeFormulae") }
}
static var autoUpgradeCasks: Bool {
get { UserDefaults.standard.bool(forKey: "autoUpgradeCasks") }
set { UserDefaults.standard.set(newValue, forKey: "autoUpgradeCasks") }
}
static var notifyOnNewUpdates: Bool {
get { UserDefaults.standard.bool(forKey: "notifyOnNewUpdates") }
set { UserDefaults.standard.set(newValue, forKey: "notifyOnNewUpdates") }
}
static var showCountInMenuBar: Bool {
get { UserDefaults.standard.bool(forKey: "showCountInMenuBar") }
set { UserDefaults.standard.set(newValue, forKey: "showCountInMenuBar") }
}
static var includeGreedyCasks: Bool {
get { UserDefaults.standard.bool(forKey: "includeGreedyCasks") }
set { UserDefaults.standard.set(newValue, forKey: "includeGreedyCasks") }
}
static var confirmBeforeUpgradeAll: Bool {
get { UserDefaults.standard.bool(forKey: "confirmBeforeUpgradeAll") }
set { UserDefaults.standard.set(newValue, forKey: "confirmBeforeUpgradeAll") }
}
}