76 lines
2.7 KiB
Swift
76 lines
2.7 KiB
Swift
#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
|