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 } } } }