bd44b5aa08
Test / build-libghostty-vt (x86_64-windows-gnu) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-ios) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt-macos (x86_64-macos) (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-dist (push) Has been cancelled
Test / GTK x11=true wayland=true (push) Has been cancelled
Test / Build -Dsimd=false (push) Has been cancelled
Test / Build -Dsimd=true (push) Has been cancelled
Test / Build -Dsentry=false (push) Has been cancelled
Test / Build -Dsentry=true (push) Has been cancelled
Test / zig-fmt (push) Has been cancelled
Test / GitHub Actions Pins (push) Has been cancelled
Test / prettier (push) Has been cancelled
Test / swiftlint (push) Has been cancelled
Test / alejandra (push) Has been cancelled
Test / typos (push) Has been cancelled
Nix / Required Checks: Nix (push) Has been cancelled
Nix / check-zig-cache-hash (push) Has been cancelled
Test / skip (push) Has been cancelled
Test / Required Checks: Test (push) Has been cancelled
Test / build-bench (push) Has been cancelled
Test / list-examples (push) Has been cancelled
Test / Example ${{ matrix.dir }} (Windows) (push) Has been cancelled
Test / build-cmake (push) Has been cancelled
Test / test-lib-vt-pkgconfig (push) Has been cancelled
Test / build-flatpak (push) Has been cancelled
Test / build-snap (push) Has been cancelled
Test / build-libghostty-vt (aarch64-linux) (push) Has been cancelled
Test / build-libghostty-vt (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt (wasm32-freestanding) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux-musl) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-macos) (push) Has been cancelled
Test / build-libghostty-vt-android (aarch64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-android (arm-linux-androideabi) (push) Has been cancelled
Test / build-libghostty-vt-android (x86_64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-windows (push) Has been cancelled
Test / build-libghostty-windows-gnu (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-linux-libghostty (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-dist-lib-vt (push) Has been cancelled
Test / trigger-snap (push) Has been cancelled
Test / trigger-flatpak (push) Has been cancelled
Test / build-macos (push) Has been cancelled
Test / build-macos-freetype (push) Has been cancelled
Test / test (push) Has been cancelled
Test / test-lib-vt (push) Has been cancelled
Test / GTK x11=false wayland=false (push) Has been cancelled
Test / GTK x11=true wayland=false (push) Has been cancelled
Test / GTK x11=false wayland=true (push) Has been cancelled
Test / test-macos (push) Has been cancelled
Test / test-windows (push) Has been cancelled
Test / Build -Di18n=false (push) Has been cancelled
Test / Build -Di18n=true (push) Has been cancelled
Test / Build test/fuzz-libghostty (push) Has been cancelled
Test / shellcheck (push) Has been cancelled
Test / translations (push) Has been cancelled
Test / blueprint-compiler (push) Has been cancelled
Test / Test pkg/wuffs (push) Has been cancelled
Test / Test build on Debian 13 (push) Has been cancelled
Test / valgrind (push) Has been cancelled
Test / Example ${{ matrix.dir }} (push) Has been cancelled
84 lines
2.7 KiB
Swift
84 lines
2.7 KiB
Swift
import SwiftUI
|
|
|
|
/// A badge view that displays the current state of an update operation.
|
|
///
|
|
/// Shows different visual indicators based on the update state:
|
|
/// - Progress ring for downloading/extracting with progress
|
|
/// - Animated rotating icon for checking/installing
|
|
/// - Static icon for other states
|
|
struct UpdateBadge: View {
|
|
/// The update view model that provides the current state and progress
|
|
@ObservedObject var model: UpdateViewModel
|
|
|
|
/// Current rotation angle for animated icon states
|
|
@State private var rotationAngle: Double = 0
|
|
|
|
var body: some View {
|
|
badgeContent
|
|
.accessibilityLabel(model.text)
|
|
}
|
|
|
|
@ViewBuilder
|
|
private var badgeContent: some View {
|
|
switch model.state {
|
|
case .downloading(let download):
|
|
if let expectedLength = download.expectedLength, expectedLength > 0 {
|
|
let progress = min(1, max(0, Double(download.progress) / Double(expectedLength)))
|
|
ProgressRingView(progress: progress)
|
|
} else {
|
|
Image(systemName: "arrow.down.circle")
|
|
}
|
|
|
|
case .extracting(let extracting):
|
|
ProgressRingView(progress: min(1, max(0, extracting.progress)))
|
|
|
|
case .checking:
|
|
if let iconName = model.iconName {
|
|
Image(systemName: iconName)
|
|
.rotationEffect(.degrees(rotationAngle))
|
|
.onAppear {
|
|
withAnimation(.linear(duration: 2.5).repeatForever(autoreverses: false)) {
|
|
rotationAngle = 360
|
|
}
|
|
}
|
|
.onDisappear {
|
|
rotationAngle = 0
|
|
}
|
|
} else {
|
|
EmptyView()
|
|
}
|
|
|
|
default:
|
|
if let iconName = model.iconName {
|
|
Image(systemName: iconName)
|
|
} else {
|
|
EmptyView()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// A circular progress indicator with a stroke-based ring design.
|
|
///
|
|
/// Displays a partially filled circle that represents progress from 0.0 to 1.0.
|
|
private struct ProgressRingView: View {
|
|
/// The current progress value, ranging from 0.0 (empty) to 1.0 (complete)
|
|
let progress: Double
|
|
|
|
/// The width of the progress ring stroke
|
|
let lineWidth: CGFloat = 2
|
|
|
|
var body: some View {
|
|
ZStack {
|
|
Circle()
|
|
.stroke(Color.primary.opacity(0.2), lineWidth: lineWidth)
|
|
|
|
Circle()
|
|
.trim(from: 0, to: progress)
|
|
.stroke(Color.primary, style: StrokeStyle(lineWidth: lineWidth, lineCap: .round))
|
|
.rotationEffect(.degrees(-90))
|
|
.animation(.easeInOut(duration: 0.2), value: progress)
|
|
}
|
|
}
|
|
}
|