Files
sing-box-for-apple/ApplicationLibrary/Views/Setting/UpdateSheet.swift
T

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