connected overlay in file manager

This commit is contained in:
2025-10-19 23:27:27 +02:00
parent 016629eb82
commit be2629a008

View File

@@ -216,6 +216,14 @@ private struct FileManagerTabView: View {
if let operation = manager.activeFileOperation { if let operation = manager.activeFileOperation {
FileOperationHUD(operation: operation) FileOperationHUD(operation: operation)
} }
if manager.connectionState != .ready {
ConnectionOverlay(
state: manager.connectionState,
statusMessage: manager.statusMessage,
retryAction: manager.forceRescan
)
}
} }
.fileImporter( .fileImporter(
isPresented: $showingImporter, isPresented: $showingImporter,
@@ -371,6 +379,65 @@ private struct FileOperationHUD: View {
} }
} }
private struct ConnectionOverlay: View {
let state: TimeSyncManager.ConnectionState
let statusMessage: String
let retryAction: () -> Void
private var showsSpinner: Bool {
switch state {
case .scanning, .connecting, .discovering:
return true
default:
return false
}
}
private var canRetry: Bool {
switch state {
case .failed, .idle:
return true
default:
return false
}
}
var body: some View {
ZStack {
Color.black.opacity(0.35)
.ignoresSafeArea()
VStack(spacing: 16) {
if showsSpinner {
ProgressView()
.progressViewStyle(.circular)
.scaleEffect(1.2)
} else {
Image(systemName: "exclamationmark.triangle")
.font(.system(size: 42, weight: .semibold))
.foregroundColor(.yellow)
}
Text(statusMessage)
.multilineTextAlignment(.center)
.font(.headline)
.foregroundColor(.primary)
if canRetry {
Button("Try Again", action: retryAction)
.buttonStyle(.borderedProminent)
}
}
.padding(28)
.frame(maxWidth: 320)
.background(.ultraThinMaterial)
.cornerRadius(20)
.shadow(radius: 12)
}
.transition(.opacity)
}
}
extension URL: Identifiable { extension URL: Identifiable {
public var id: String { absoluteString } public var id: String { absoluteString }
} }