aboutsummaryrefslogtreecommitdiff
path: root/Map/Presentation/Commands/UpdateCommands.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Map/Presentation/Commands/UpdateCommands.swift')
-rw-r--r--Map/Presentation/Commands/UpdateCommands.swift39
1 files changed, 39 insertions, 0 deletions
diff --git a/Map/Presentation/Commands/UpdateCommands.swift b/Map/Presentation/Commands/UpdateCommands.swift
new file mode 100644
index 0000000..44a4610
--- /dev/null
+++ b/Map/Presentation/Commands/UpdateCommands.swift
@@ -0,0 +1,39 @@
+import SwiftUI
+import Sparkle
+
+struct UpdateCommands: Commands {
+ let updaterController: SPUStandardUpdaterController
+
+ var body: some Commands {
+ CommandGroup(after: .appInfo) {
+ CheckForUpdatesView(updater: updaterController.updater)
+ }
+ }
+}
+
+
+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)
+ }
+}
+
+final class CheckForUpdatesViewModel: ObservableObject {
+ @Published var canCheckForUpdates = false
+
+ init(updater: SPUUpdater) {
+ updater.publisher(for: \.canCheckForUpdates)
+ .assign(to: &$canCheckForUpdates)
+ }
+}