2022-06-10 13:00:51 +00:00
package fs
import (
"context"
2022-06-17 07:57:16 +00:00
"fmt"
2022-06-10 13:00:51 +00:00
"github.com/alist-org/alist/v3/internal/driver"
2022-06-15 10:06:42 +00:00
"github.com/alist-org/alist/v3/internal/model"
2022-06-10 13:00:51 +00:00
"github.com/alist-org/alist/v3/internal/operations"
2022-06-17 13:23:44 +00:00
"github.com/alist-org/alist/v3/pkg/task"
2022-06-10 13:00:51 +00:00
"github.com/pkg/errors"
)
func MakeDir ( ctx context . Context , account driver . Driver , path string ) error {
account , actualPath , err := operations . GetAccountAndActualPath ( path )
if err != nil {
return errors . WithMessage ( err , "failed get account" )
}
return operations . MakeDir ( ctx , account , actualPath )
}
func Move ( ctx context . Context , account driver . Driver , srcPath , dstPath string ) error {
srcAccount , srcActualPath , err := operations . GetAccountAndActualPath ( srcPath )
if err != nil {
return errors . WithMessage ( err , "failed get src account" )
}
dstAccount , dstActualPath , err := operations . GetAccountAndActualPath ( srcPath )
if err != nil {
return errors . WithMessage ( err , "failed get dst account" )
}
if srcAccount . GetAccount ( ) != dstAccount . GetAccount ( ) {
return errors . WithStack ( ErrMoveBetwwenTwoAccounts )
}
return operations . Move ( ctx , account , srcActualPath , dstActualPath )
}
func Rename ( ctx context . Context , account driver . Driver , srcPath , dstName string ) error {
account , srcActualPath , err := operations . GetAccountAndActualPath ( srcPath )
if err != nil {
return errors . WithMessage ( err , "failed get account" )
}
return operations . Rename ( ctx , account , srcActualPath , dstName )
}
// Copy if in an account, call move method
2022-06-15 10:06:42 +00:00
// if not, add copy task
2022-06-17 07:57:16 +00:00
func Copy ( ctx context . Context , account driver . Driver , srcPath , dstPath string ) ( bool , error ) {
2022-06-10 13:00:51 +00:00
srcAccount , srcActualPath , err := operations . GetAccountAndActualPath ( srcPath )
if err != nil {
2022-06-17 07:57:16 +00:00
return false , errors . WithMessage ( err , "failed get src account" )
2022-06-10 13:00:51 +00:00
}
2022-06-17 13:23:44 +00:00
dstAccount , dstActualPath , err := operations . GetAccountAndActualPath ( dstPath )
2022-06-10 13:00:51 +00:00
if err != nil {
2022-06-17 07:57:16 +00:00
return false , errors . WithMessage ( err , "failed get dst account" )
2022-06-10 13:00:51 +00:00
}
2022-06-15 10:06:42 +00:00
// copy if in an account, just call driver.Copy
2022-06-10 13:00:51 +00:00
if srcAccount . GetAccount ( ) == dstAccount . GetAccount ( ) {
2022-06-17 07:57:16 +00:00
return false , operations . Copy ( ctx , account , srcActualPath , dstActualPath )
2022-06-10 13:00:51 +00:00
}
2022-06-15 10:58:26 +00:00
// not in an account
2022-06-17 13:30:16 +00:00
copyTaskManager . Add ( fmt . Sprintf ( "copy [%s](%s) to [%s](%s)" , srcAccount . GetAccount ( ) . VirtualPath , srcActualPath , dstAccount . GetAccount ( ) . VirtualPath , dstActualPath ) , func ( task * task . Task ) error {
2022-06-17 13:23:44 +00:00
return CopyBetween2Accounts ( task . Ctx , srcAccount , dstAccount , srcActualPath , dstActualPath , task . SetStatus )
2022-06-17 07:57:16 +00:00
} )
return true , nil
2022-06-10 13:00:51 +00:00
}
func Remove ( ctx context . Context , account driver . Driver , path string ) error {
account , actualPath , err := operations . GetAccountAndActualPath ( path )
if err != nil {
return errors . WithMessage ( err , "failed get account" )
}
return operations . Remove ( ctx , account , actualPath )
}
2022-06-17 13:23:44 +00:00
// Put add as a put task
2022-06-15 10:06:42 +00:00
func Put ( ctx context . Context , account driver . Driver , parentPath string , file model . FileStreamer ) error {
2022-06-10 13:00:51 +00:00
account , actualParentPath , err := operations . GetAccountAndActualPath ( parentPath )
if err != nil {
return errors . WithMessage ( err , "failed get account" )
}
2022-06-17 13:23:44 +00:00
return operations . Put ( ctx , account , actualParentPath , file , nil )
2022-06-10 13:00:51 +00:00
}