feat: send or move files and folders to another machine or an SSH host from the move dialog, streamed as tar with progress, speed and cancel; same conflict rules as a local move

This commit is contained in:
redtea committed 2026-10-14 21:29:25 +03:00
1 parent 1a38c2ac18
commit 18d6684c55
7 files changed
+1274 -28

No files matched your search

+29
View File
@@ -150,6 +150,8 @@ const (
TaskSysUserAdd = "sys.useradd" // create a new OS user
TaskSysStat = "sys.stat" // CPU load, RAM and disk usage right now
TaskSysSpeed = "sys.speed" // measure the link to the server (ping, down, up)
TaskFSShipOut = "fs.ship.out" // pack a file or folder and send it to another machine
TaskFSShipIn = "fs.ship.in" // unpack what another machine sends
)
// FSReadCap bounds how many bytes TaskFSRead returns (5 MiB). The panel lets a
@@ -313,3 +315,30 @@ type SysSpeedResult struct {
// counted on its own side by then.
Partial bool `json:"partial,omitempty"`
}
// FSShipArgs are the arguments of TaskFSShipOut and TaskFSShipIn: Src (on the
// sending machine) lands in Dir as Name (on the receiving one), following
// Conflict as FSCopyArgs does. The sender packs it as a tar stream and either
// posts it in pieces of Chunk bytes to Relay on the server, for the receiver
// to take, or with SSH set writes it to tar on that host itself, and with
// Move then deletes Src. Both report to Job how far they are.
type FSShipArgs struct {
Src string `json:"src,omitempty"`
Name string `json:"name"`
Dir string `json:"dir"`
Conflict string `json:"conflict,omitempty"`
Move bool `json:"move,omitempty"`
Relay string `json:"relay,omitempty"`
Chunk int `json:"chunk,omitempty"`
Job string `json:"job,omitempty"`
SSH *SSHTarget `json:"ssh,omitempty"`
}
// ShipProgress is what a sending machine reports: bytes of files sent out of
// Total, and files done.
type ShipProgress struct {
Total int64 `json:"total"`
Done int64 `json:"done"`
Files int `json:"files"`
Note string `json:"note,omitempty"` // what is going on: connecting, signing in
}