1package sync
2
3import (
4	"context"
5
6	"github.com/rclone/rclone/fs/rc"
7)
8
9func init() {
10	for _, name := range []string{"sync", "copy", "move"} {
11		name := name
12		moveHelp := ""
13		if name == "move" {
14			moveHelp = "- deleteEmptySrcDirs - delete empty src directories if set\n"
15		}
16		rc.Add(rc.Call{
17			Path:         "sync/" + name,
18			AuthRequired: true,
19			Fn: func(ctx context.Context, in rc.Params) (rc.Params, error) {
20				return rcSyncCopyMove(ctx, in, name)
21			},
22			Title: name + " a directory from source remote to destination remote",
23			Help: `This takes the following parameters:
24
25- srcFs - a remote name string e.g. "drive:src" for the source
26- dstFs - a remote name string e.g. "drive:dst" for the destination
27- createEmptySrcDirs - create empty src directories on destination if set
28` + moveHelp + `
29
30See the [` + name + ` command](/commands/rclone_` + name + `/) command for more information on the above.`,
31		})
32	}
33}
34
35// Sync/Copy/Move a file
36func rcSyncCopyMove(ctx context.Context, in rc.Params, name string) (out rc.Params, err error) {
37	srcFs, err := rc.GetFsNamed(ctx, in, "srcFs")
38	if err != nil {
39		return nil, err
40	}
41	dstFs, err := rc.GetFsNamed(ctx, in, "dstFs")
42	if err != nil {
43		return nil, err
44	}
45	createEmptySrcDirs, err := in.GetBool("createEmptySrcDirs")
46	if rc.NotErrParamNotFound(err) {
47		return nil, err
48	}
49	switch name {
50	case "sync":
51		return nil, Sync(ctx, dstFs, srcFs, createEmptySrcDirs)
52	case "copy":
53		return nil, CopyDir(ctx, dstFs, srcFs, createEmptySrcDirs)
54	case "move":
55		deleteEmptySrcDirs, err := in.GetBool("deleteEmptySrcDirs")
56		if rc.NotErrParamNotFound(err) {
57			return nil, err
58		}
59		return nil, MoveDir(ctx, dstFs, srcFs, deleteEmptySrcDirs, createEmptySrcDirs)
60	}
61	panic("unknown rcSyncCopyMove type")
62}
63