Add GitHub update checker and installer
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#if os(macOS)
|
||||
|
||||
import AppKit
|
||||
import Library
|
||||
import MarkdownUI
|
||||
import SwiftUI
|
||||
|
||||
public struct UpdateSheet: View {
|
||||
@ObservedObject var updateManager: UpdateManager
|
||||
@EnvironmentObject private var environments: ExtensionEnvironments
|
||||
|
||||
public init(updateManager: UpdateManager) {
|
||||
self.updateManager = updateManager
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
VStack(spacing: 16) {
|
||||
Text("Check Update")
|
||||
.font(.headline)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
Text("New version available: \(updateManager.updateInfo?.versionName ?? "")")
|
||||
.font(.subheadline)
|
||||
.foregroundStyle(.secondary)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
|
||||
if let releaseNotes = updateManager.updateInfo?.releaseNotes, !releaseNotes.isEmpty {
|
||||
ScrollView {
|
||||
Markdown(GitHubEmoji.replaceShortcodes(in: releaseNotes))
|
||||
.markdownTheme(.gitHub.text {
|
||||
FontSize(10)
|
||||
})
|
||||
.textSelection(.enabled)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
.frame(maxHeight: 300)
|
||||
}
|
||||
|
||||
if updateManager.isDownloading {
|
||||
ProgressView(value: updateManager.downloadProgress)
|
||||
}
|
||||
|
||||
HStack(spacing: 12) {
|
||||
if let releaseURL = updateManager.updateInfo?.releaseURL,
|
||||
let url = URL(string: releaseURL)
|
||||
{
|
||||
Button("View Release") {
|
||||
NSWorkspace.shared.open(url)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
Button("Cancel", role: .cancel) {
|
||||
updateManager.dismissUpdateSheet()
|
||||
}
|
||||
.keyboardShortcut(.escape, modifiers: [])
|
||||
.disabled(updateManager.isDownloading)
|
||||
|
||||
Button("Update") {
|
||||
Task {
|
||||
await updateManager.downloadAndInstall(environments: environments)
|
||||
}
|
||||
}
|
||||
.keyboardShortcut(.defaultAction)
|
||||
.disabled(updateManager.isDownloading)
|
||||
}
|
||||
}
|
||||
.padding(20)
|
||||
.frame(minWidth: 480)
|
||||
.interactiveDismissDisabled(updateManager.isDownloading)
|
||||
.alert($updateManager.alert)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user