62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package sync
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/rclone/rclone/fs/rc"
|
|
)
|
|
|
|
func init() {
|
|
for _, name := range []string{"sync", "copy", "move"} {
|
|
name := name
|
|
moveHelp := ""
|
|
if name == "move" {
|
|
moveHelp = "- deleteEmptySrcDirs - delete empty src directories if set\n"
|
|
}
|
|
rc.Add(rc.Call{
|
|
Path: "sync/" + name,
|
|
AuthRequired: true,
|
|
Fn: func(ctx context.Context, in rc.Params) (rc.Params, error) {
|
|
return rcSyncCopyMove(ctx, in, name)
|
|
},
|
|
Title: name + " a directory from source remote to destination remote",
|
|
Help: `This takes the following parameters:
|
|
|
|
- srcFs - a remote name string e.g. "drive:src" for the source
|
|
- dstFs - a remote name string e.g. "drive:dst" for the destination
|
|
- createEmptySrcDirs - create empty src directories on destination if set
|
|
` + moveHelp + `
|
|
|
|
See the [` + name + `](/commands/rclone_` + name + `/) command for more information on the above.`,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Sync/Copy/Move a file
|
|
func rcSyncCopyMove(ctx context.Context, in rc.Params, name string) (out rc.Params, err error) {
|
|
srcFs, err := rc.GetFsNamed(ctx, in, "srcFs")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
dstFs, err := rc.GetFsNamed(ctx, in, "dstFs")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
createEmptySrcDirs, err := in.GetBool("createEmptySrcDirs")
|
|
if rc.NotErrParamNotFound(err) {
|
|
return nil, err
|
|
}
|
|
switch name {
|
|
case "sync":
|
|
return nil, Sync(ctx, dstFs, srcFs, createEmptySrcDirs)
|
|
case "copy":
|
|
return nil, CopyDir(ctx, dstFs, srcFs, createEmptySrcDirs)
|
|
case "move":
|
|
deleteEmptySrcDirs, err := in.GetBool("deleteEmptySrcDirs")
|
|
if rc.NotErrParamNotFound(err) {
|
|
return nil, err
|
|
}
|
|
return nil, MoveDir(ctx, dstFs, srcFs, deleteEmptySrcDirs, createEmptySrcDirs)
|
|
}
|
|
panic("unknown rcSyncCopyMove type")
|
|
}
|