ChWebsiteApp/CHDataManagement/Push/UploadSheet.swift
2025-02-15 01:02:25 +01:00

72 lines
2.0 KiB
Swift

import SwiftUI
import SFSafeSymbols
struct UploadSheet: View {
@EnvironmentObject
private var content: Content
@EnvironmentObject
private var upload: RemotePush
@Environment(\.dismiss)
private var dismiss
@State
private var output = ""
private var uploadSymbol: SFSymbol {
if upload.isTransmittingToRemote {
return .squareAndArrowUpBadgeClock
}
if !upload.lastPushWasSuccessful {
return .squareAndArrowUpTrianglebadgeExclamationmark
}
return .squareAndArrowUp
}
var header: String {
let user = content.settings.general.remoteUserForUpload
let port = content.settings.general.remotePortForUpload
let url = content.settings.general.remotePathForUpload.withHttpPrefixRemoved
let path = content.settings.general.remotePathForUpload
return "\(user)@\(url):\(port)/\(path)"
}
var body: some View {
VStack {
HStack {
Button("Upload", action: startUpload)
.disabled(upload.isTransmittingToRemote)
Text(header)
Spacer()
Button("Close", action: { dismiss() })
}
ScrollView {
Text(output)
.font(.body.monospaced())
.foregroundStyle(.primary)
.frame(maxWidth: .infinity, alignment: .leading)
}
}
.padding()
.frame(minWidth: 500, idealWidth: 600, idealHeight: 500)
}
private func startUpload() {
guard let folder = content.storage.outputScope?.url.path() else {
print("No output folder to start upload")
return
}
output = ""
upload.transmitToRemote(
settings: content.settings.general,
outputFolder: folder) { newContent in
DispatchQueue.main.async {
self.output += newContent
}
}
}
}