/* * Atoll (DynamicIsland) * Copyright (C) 2024-2026 Atoll Contributors * * Originally from boring.notch project * Modified and adapted for Atoll (DynamicIsland) * See NOTICE for details. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import SwiftUI import Sparkle final class CheckForUpdatesViewModel: ObservableObject { @Published var canCheckForUpdates = false init(updater: SPUUpdater) { updater.publisher(for: \.canCheckForUpdates) .assign(to: &$canCheckForUpdates) } } 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) } } struct UpdaterSettingsView: View { private let updater: SPUUpdater @State private var automaticallyChecksForUpdates: Bool @State private var automaticallyDownloadsUpdates: Bool init(updater: SPUUpdater) { self.updater = updater self.automaticallyChecksForUpdates = updater.automaticallyChecksForUpdates self.automaticallyDownloadsUpdates = updater.automaticallyDownloadsUpdates } var body: some View { Section { Toggle("Automatically check for updates", isOn: $automaticallyChecksForUpdates) .onChange(of: automaticallyChecksForUpdates) { _, newValue in updater.automaticallyChecksForUpdates = newValue } Toggle("Automatically download updates", isOn: $automaticallyDownloadsUpdates) .disabled(!automaticallyChecksForUpdates) .onChange(of: automaticallyDownloadsUpdates) { _, newValue in updater.automaticallyDownloadsUpdates = newValue } } header: { HStack { Text("Software updates") } } } }