mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-05-24 22:00:16 +00:00
35 lines
1.3 KiB
Swift
35 lines
1.3 KiB
Swift
import Sparkle
|
|
import Cocoa
|
|
|
|
extension UpdateDriver: SPUUpdaterDelegate {
|
|
func feedURLString(for updater: SPUUpdater) -> String? {
|
|
guard let appDelegate = NSApplication.shared.delegate as? AppDelegate else {
|
|
return nil
|
|
}
|
|
|
|
// Sparkle supports a native concept of "channels" but it requires that
|
|
// you share a single appcast file. We don't want to do that so we
|
|
// do this instead.
|
|
switch appDelegate.ghostty.config.autoUpdateChannel {
|
|
case .tip: return "https://tip.files.ghostty.org/appcast.xml"
|
|
case .stable: return "https://release.files.ghostty.org/appcast.xml"
|
|
}
|
|
}
|
|
|
|
/// Called when an update is scheduled to install silently,
|
|
/// which occurs when `auto-update = download`.
|
|
///
|
|
/// When `auto-update = check`, Sparkle will call the corresponding
|
|
/// delegate method on the responsible driver instead.
|
|
func updater(_ updater: SPUUpdater, willInstallUpdateOnQuit item: SUAppcastItem, immediateInstallationBlock immediateInstallHandler: @escaping () -> Void) -> Bool {
|
|
viewModel.state = .installing(.init(
|
|
isAutoUpdate: true,
|
|
retryTerminatingApplication: immediateInstallHandler,
|
|
dismiss: { [weak viewModel] in
|
|
viewModel?.state = .idle
|
|
}
|
|
))
|
|
return true
|
|
}
|
|
}
|