diff --git a/internal/fs/copy.go b/internal/fs/copy.go index df8ffb2b891..aa9b7c33bd6 100644 --- a/internal/fs/copy.go +++ b/internal/fs/copy.go @@ -15,6 +15,28 @@ import ( var copyTaskManager = task.NewTaskManager() +// Copy if in an account, call move method +// if not, add copy task +func Copy(ctx context.Context, account driver.Driver, srcPath, dstPath string) (bool, error) { + srcAccount, srcActualPath, err := operations.GetAccountAndActualPath(srcPath) + if err != nil { + return false, errors.WithMessage(err, "failed get src account") + } + dstAccount, dstActualPath, err := operations.GetAccountAndActualPath(dstPath) + if err != nil { + return false, errors.WithMessage(err, "failed get dst account") + } + // copy if in an account, just call driver.Copy + if srcAccount.GetAccount() == dstAccount.GetAccount() { + return false, operations.Copy(ctx, account, srcActualPath, dstActualPath) + } + // not in an account + copyTaskManager.Add(fmt.Sprintf("copy [%s](%s) to [%s](%s)", srcAccount.GetAccount().VirtualPath, srcActualPath, dstAccount.GetAccount().VirtualPath, dstActualPath), func(task *task.Task) error { + return CopyBetween2Accounts(task.Ctx, srcAccount, dstAccount, srcActualPath, dstActualPath, task.SetStatus) + }) + return true, nil +} + func CopyBetween2Accounts(ctx context.Context, srcAccount, dstAccount driver.Driver, srcPath, dstPath string, setStatus func(status string)) error { setStatus("getting src object") srcObj, err := operations.Get(ctx, srcAccount, srcPath) diff --git a/internal/fs/put.go b/internal/fs/put.go new file mode 100644 index 00000000000..edb1b916355 --- /dev/null +++ b/internal/fs/put.go @@ -0,0 +1,25 @@ +package fs + +import ( + "context" + "fmt" + "github.com/alist-org/alist/v3/internal/driver" + "github.com/alist-org/alist/v3/internal/model" + "github.com/alist-org/alist/v3/internal/operations" + "github.com/alist-org/alist/v3/pkg/task" + "github.com/pkg/errors" +) + +var uploadTaskManager = task.NewTaskManager() + +// Put add as a put task +func Put(ctx context.Context, account driver.Driver, parentPath string, file model.FileStreamer) error { + account, actualParentPath, err := operations.GetAccountAndActualPath(parentPath) + if err != nil { + return errors.WithMessage(err, "failed get account") + } + uploadTaskManager.Add(fmt.Sprintf("upload %s to [%s](%s)", file.GetName(), account.GetAccount().VirtualPath, actualParentPath), func(task *task.Task) error { + return operations.Put(task.Ctx, account, actualParentPath, file, nil) + }) + return nil +} diff --git a/internal/fs/write.go b/internal/fs/write.go index c0bf4215c9e..b27c1a04af8 100644 --- a/internal/fs/write.go +++ b/internal/fs/write.go @@ -2,11 +2,8 @@ package fs import ( "context" - "fmt" "github.com/alist-org/alist/v3/internal/driver" - "github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/operations" - "github.com/alist-org/alist/v3/pkg/task" "github.com/pkg/errors" ) @@ -41,28 +38,6 @@ func Rename(ctx context.Context, account driver.Driver, srcPath, dstName string) return operations.Rename(ctx, account, srcActualPath, dstName) } -// Copy if in an account, call move method -// if not, add copy task -func Copy(ctx context.Context, account driver.Driver, srcPath, dstPath string) (bool, error) { - srcAccount, srcActualPath, err := operations.GetAccountAndActualPath(srcPath) - if err != nil { - return false, errors.WithMessage(err, "failed get src account") - } - dstAccount, dstActualPath, err := operations.GetAccountAndActualPath(dstPath) - if err != nil { - return false, errors.WithMessage(err, "failed get dst account") - } - // copy if in an account, just call driver.Copy - if srcAccount.GetAccount() == dstAccount.GetAccount() { - return false, operations.Copy(ctx, account, srcActualPath, dstActualPath) - } - // not in an account - copyTaskManager.Add(fmt.Sprintf("copy [%s](%s) to [%s](%s)", srcAccount.GetAccount().VirtualPath, srcActualPath, dstAccount.GetAccount().VirtualPath, dstActualPath), func(task *task.Task) error { - return CopyBetween2Accounts(task.Ctx, srcAccount, dstAccount, srcActualPath, dstActualPath, task.SetStatus) - }) - return true, nil -} - func Remove(ctx context.Context, account driver.Driver, path string) error { account, actualPath, err := operations.GetAccountAndActualPath(path) if err != nil { @@ -70,12 +45,3 @@ func Remove(ctx context.Context, account driver.Driver, path string) error { } return operations.Remove(ctx, account, actualPath) } - -// Put add as a put task -func Put(ctx context.Context, account driver.Driver, parentPath string, file model.FileStreamer) error { - account, actualParentPath, err := operations.GetAccountAndActualPath(parentPath) - if err != nil { - return errors.WithMessage(err, "failed get account") - } - return operations.Put(ctx, account, actualParentPath, file, nil) -}