]> git.r.bdr.sh - rbdr/map/blob - Map/Presentation/Commands/UpdateCommands.swift
Bump build version
[rbdr/map] / Map / Presentation / Commands / UpdateCommands.swift
1 // Copyright (C) 2024 Rubén Beltrán del Río
2
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12
13 // You should have received a copy of the GNU General Public License
14 // along with this program. If not, see https://map.tranquil.systems.
15 import Sparkle
16 import SwiftUI
17
18 struct UpdateCommands: Commands {
19 let updaterController: SPUStandardUpdaterController
20
21 var body: some Commands {
22 CommandGroup(after: .appInfo) {
23 CheckForUpdatesView(updater: updaterController.updater)
24 }
25 }
26 }
27
28 struct CheckForUpdatesView: View {
29 @ObservedObject private var checkForUpdatesViewModel: CheckForUpdatesViewModel
30 private let updater: SPUUpdater
31
32 init(updater: SPUUpdater) {
33 self.updater = updater
34
35 // Create our view model for our CheckForUpdatesView
36 self.checkForUpdatesViewModel = CheckForUpdatesViewModel(updater: updater)
37 }
38
39 var body: some View {
40 Button("Check for Updates…", action: updater.checkForUpdates)
41 .disabled(!checkForUpdatesViewModel.canCheckForUpdates)
42 }
43 }
44
45 final class CheckForUpdatesViewModel: ObservableObject {
46 @Published var canCheckForUpdates = false
47
48 init(updater: SPUUpdater) {
49 updater.publisher(for: \.canCheckForUpdates)
50 .assign(to: &$canCheckForUpdates)
51 }
52 }