add Sparkle

This commit is contained in:
leetcode-mafia
2023-04-26 11:28:43 -04:00
parent 447214ded4
commit e973efe2b3
6 changed files with 233 additions and 13 deletions

View File

@ -2,6 +2,7 @@ import SwiftUI
import Combine
import LibWhisper
import CheetahIPC
import Sparkle
enum AnswerRequest {
case none
@ -45,6 +46,8 @@ struct CheetahApp: App {
var extensionState = BrowserExtensionState()
let updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil)
func start() async {
viewModel.devices = try! CaptureDevice.devices
@ -118,6 +121,9 @@ struct CheetahApp: App {
.windowResizability(.contentSize)
.windowStyle(.hiddenTitleBar)
.commands {
CommandGroup(after: .appInfo) {
CheckForUpdatesView(updater: updaterController.updater)
}
CommandGroup(replacing: .appSettings) {
Button(action: {
viewModel.authToken = nil

View File

@ -1,5 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
<dict>
<key>SUFeedURL</key>
<string>https://cheetah-sw-update.leetcodemafia.com/appcast.xml</string>
<key>SUPublicEDKey</key>
<string>30J/+sJRxhziFhK63Xe6OY5kjwF5tG7klmntA0XIGNM=</string>
<key>SUEnableSystemProfiling</key>
<true/>
</dict>
</plist>

32
Cheetah/Sparkle.swift Normal file
View File

@ -0,0 +1,32 @@
import SwiftUI
import Sparkle
// This view model class publishes when new updates can be checked by the user
final class CheckForUpdatesViewModel: ObservableObject {
@Published var canCheckForUpdates = false
init(updater: SPUUpdater) {
updater.publisher(for: \.canCheckForUpdates)
.assign(to: &$canCheckForUpdates)
}
}
// This is the view for the Check for Updates menu item
// Note this intermediate view is necessary for the disabled state on the menu item to work properly before Monterey.
// See https://stackoverflow.com/questions/68553092/menu-not-updating-swiftui-bug for more info
struct CheckForUpdatesView: View {
@ObservedObject private var checkForUpdatesViewModel: CheckForUpdatesViewModel
private let updater: SPUUpdater
init(updater: SPUUpdater) {
self.updater = updater
// Create our view model for our CheckForUpdatesView
self.checkForUpdatesViewModel = CheckForUpdatesViewModel(updater: updater)
}
var body: some View {
Button("Check for Updates…", action: updater.checkForUpdates)
.disabled(!checkForUpdatesViewModel.canCheckForUpdates)
}
}