mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-10-12 04:46:15 +00:00
macos: hook up our new update controller
This commit is contained in:
55
macos/Sources/Features/Update/UpdateController.swift
Normal file
55
macos/Sources/Features/Update/UpdateController.swift
Normal file
@@ -0,0 +1,55 @@
|
||||
import Sparkle
|
||||
import Cocoa
|
||||
|
||||
/// Standard controller for managing Sparkle updates in Ghostty.
|
||||
///
|
||||
/// This controller wraps SPUStandardUpdaterController to provide a simpler interface
|
||||
/// for managing updates with Ghostty's custom driver and delegate. It handles
|
||||
/// initialization, starting the updater, and provides the check for updates action.
|
||||
class UpdateController {
|
||||
private(set) var updater: SPUUpdater
|
||||
private let userDriver: UpdateDriver
|
||||
private let updaterDelegate = UpdaterDelegate()
|
||||
|
||||
var viewModel: UpdateViewModel {
|
||||
userDriver.viewModel
|
||||
}
|
||||
|
||||
/// Initialize a new update controller.
|
||||
init() {
|
||||
let hostBundle = Bundle.main
|
||||
self.userDriver = UpdateDriver(viewModel: .init())
|
||||
self.updater = SPUUpdater(
|
||||
hostBundle: hostBundle,
|
||||
applicationBundle: hostBundle,
|
||||
userDriver: userDriver,
|
||||
delegate: updaterDelegate
|
||||
)
|
||||
}
|
||||
|
||||
/// Start the updater.
|
||||
///
|
||||
/// This must be called before the updater can check for updates. If starting fails,
|
||||
/// an error alert will be shown after a short delay.
|
||||
func startUpdater() {
|
||||
try? updater.start()
|
||||
}
|
||||
|
||||
/// Check for updates.
|
||||
///
|
||||
/// This is typically connected to a menu item action.
|
||||
@objc func checkForUpdates() {
|
||||
updater.checkForUpdates()
|
||||
}
|
||||
|
||||
/// Validate the check for updates menu item.
|
||||
///
|
||||
/// - Parameter item: The menu item to validate
|
||||
/// - Returns: Whether the menu item should be enabled
|
||||
func validateMenuItem(_ item: NSMenuItem) -> Bool {
|
||||
if item.action == #selector(checkForUpdates) {
|
||||
return updater.canCheckForUpdates
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user