add Sparkle appcast

This commit is contained in:
Micha
2025-11-25 16:21:07 +01:00
parent dc9560e31a
commit 01c89de738
18 changed files with 262 additions and 356 deletions

View File

@@ -12,15 +12,13 @@ struct MainView: View {
private static let serverOrderKeyStatic = "serverOrder"
private static let storedServersKeyStatic = "storedServers"
@EnvironmentObject private var updateViewModel: UpdateViewModel
@EnvironmentObject private var sparkleUpdater: SparkleUpdater
@State var showAddServerSheet: Bool = false
@State private var serverBeingEdited: Server?
@State private var serverToDelete: Server?
@State private var showDeleteConfirmation = false
@State private var isFetchingInfo: Bool = false
@State private var refreshTimer = Timer.publish(every: 60, on: .main, in: .common).autoconnect()
@State private var progress: Double = 0
@State private var lastRefresh = Date()
@State private var pingTimer: Timer?
private let serverOrderKey = MainView.serverOrderKeyStatic
private let storedServersKey = MainView.storedServersKeyStatic
@@ -64,14 +62,9 @@ struct MainView: View {
}
ToolbarItem {
Button {
updateViewModel.checkForUpdates(userInitiated: true)
sparkleUpdater.checkForUpdates()
} label: {
if updateViewModel.isChecking {
ProgressView()
.scaleEffect(0.6)
} else {
Image(systemName: "square.and.arrow.down")
}
Image(systemName: "square.and.arrow.down")
}
.help("Check for Updates")
}
@@ -144,26 +137,8 @@ struct MainView: View {
pingTimer = Timer.scheduledTimer(withTimeInterval: 10.0, repeats: true) { _ in
pingAllServers()
}
updateViewModel.startAutomaticCheckIfNeeded()
}
.frame(minWidth: 800, minHeight: 450)
.alert(item: availableReleaseBinding) { release in
Alert(
title: Text("Update Available"),
message: Text("iKeyMon \(release.versionString) is available."),
primaryButton: .default(Text("Download")) {
updateViewModel.downloadLatest()
},
secondaryButton: .cancel(Text("Later"))
)
}
.alert(item: statusAlertBinding) { alert in
Alert(
title: Text(alert.title),
message: Text(alert.message),
dismissButton: .default(Text("OK"))
)
}
}
private func fetchServerInfo(for id: UUID) {
@@ -290,23 +265,9 @@ struct MainView: View {
return []
}
}
private var availableReleaseBinding: Binding<ReleaseInfo?> {
Binding(
get: { updateViewModel.availableRelease },
set: { updateViewModel.availableRelease = $0 }
)
}
private var statusAlertBinding: Binding<UpdateViewModel.StatusAlert?> {
Binding(
get: { updateViewModel.statusAlert },
set: { updateViewModel.statusAlert = $0 }
)
}
}
#Preview {
MainView()
.environmentObject(UpdateViewModel())
.environmentObject(SparkleUpdater())
}