Files
Termind/TFI/Features/MobileRemoteFileEditor.swift
T
Kaede Akino c2958a05b3 Add iOS workspaces and shared feature services
Share Vault, persistence, SSH/SFTP, forwarding, and SwiftUI components across platforms. Add mobile editors, terminal input, standalone Assistant, Metrics navigation, transfers, and a unified Live Activity with host system icons.

Validation: 35 iOS tests and 100 focused macOS tests pass; formatting and zh-Hans checks pass. The full macOS run reports 14 issues in the documented timing, Keychain, and popover suites. Remaining Assistant tool and CloudKit work is tracked in Memory/MOBILE_ROLLOUT.md.
2026-09-11 13:47:16 +08:00

46 lines
1.7 KiB
Swift

import SwiftUI
import TermindDomain
import TermindPresentation
import TermindRemoteInfrastructure
struct MobileRemoteFileEditor: View {
enum Mode { case rename, permissions }
let workspace: MobileWorkspace
let file: RemoteFile
let mode: Mode
@State private var name: String
@State private var permissions: SFTPPermissionDraft
init(workspace: MobileWorkspace, file: RemoteFile, mode: Mode) {
self.workspace = workspace
self.file = file
self.mode = mode
_name = State(initialValue: file.name)
_permissions = State(initialValue: SFTPPermissionDraft(permissions: file.permissions))
}
var body: some View {
MobileEditorSheet(
title: mode == .rename ? String(localized: "Rename") : String(localized: "Edit Permissions"),
isDirty: name != file.name || permissions.text != SFTPPermissionDraft.octalString(for: file.permissions),
canSave: workspace.connected
&& (mode == .rename ? !name.isEmpty && name != file.name : permissions.canSave),
compact: mode == .rename,
save: {
if mode == .rename {
try await workspace.rename(file, to: name)
} else {
try await workspace.setPermissions(file, mode: permissions.mode)
}
},
content: {
Section { Text(file.path).font(.caption.monospaced()).textSelection(.enabled) }
if mode == .rename {
TextField("Name", text: $name).textInputAutocapitalization(.never).autocorrectionDisabled()
} else {
UnixPermissionFields(draft: $permissions)
}
})
}
}