feat: fs and operations

This commit is contained in:
Noah Hsu 2022-06-10 21:00:51 +08:00
parent cd7e9974df
commit ec89bb70c7
8 changed files with 137 additions and 24 deletions

View File

@ -59,7 +59,7 @@ func (d *Driver) List(ctx context.Context, path string) ([]driver.FileInfo, erro
panic("implement me")
}
func (d *Driver) Link(ctx context.Context, args driver.LinkArgs) (*driver.Link, error) {
func (d *Driver) Link(ctx context.Context, path string, args driver.LinkArgs) (*driver.Link, error) {
//TODO implement me
panic("implement me")
}
@ -94,7 +94,7 @@ func (d *Driver) Remove(ctx context.Context, path string) error {
panic("implement me")
}
func (d *Driver) Put(ctx context.Context, stream driver.FileStream, parentPath string) error {
func (d *Driver) Put(ctx context.Context, parentPath string, stream driver.FileStream) error {
//TODO implement me
panic("implement me")
}

View File

@ -30,14 +30,14 @@ type Other interface {
type Reader interface {
Get(ctx context.Context, path string) (FileInfo, error)
List(ctx context.Context, path string) ([]FileInfo, error)
Link(ctx context.Context, args LinkArgs) (*Link, error)
Link(ctx context.Context, path string, args LinkArgs) (*Link, error)
}
type Writer interface {
MakeDir(ctx context.Context, path string) error
Move(ctx context.Context, src, dst string) error
Rename(ctx context.Context, src, dst string) error
Copy(ctx context.Context, src, dst string) error
Move(ctx context.Context, srcPath, dstPath string) error
Rename(ctx context.Context, srcPath, dstName string) error
Copy(ctx context.Context, srcPath, dstPath string) error
Remove(ctx context.Context, path string) error
Put(ctx context.Context, stream FileStream, parentPath string) error
Put(ctx context.Context, parentPath string, stream FileStream) error
}

View File

@ -6,7 +6,6 @@ import (
)
type LinkArgs struct {
Path string
IP string
Header http.Header
}

7
internal/fs/error.go Normal file
View File

@ -0,0 +1,7 @@
package fs
import "errors"
var (
ErrMoveBetwwenTwoAccounts = errors.New("can't move files between two account, try to copy")
)

View File

@ -1,16 +0,0 @@
package fs
import (
"context"
"github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/operations"
"github.com/pkg/errors"
)
func Get(ctx context.Context, path string) (driver.FileInfo, error) {
account, actualPath, err := operations.GetAccountAndActualPath(path)
if err != nil {
return nil, errors.WithMessage(err, "failed get account")
}
return operations.Get(ctx, account, actualPath)
}

View File

@ -35,3 +35,19 @@ func List(ctx context.Context, path string) ([]driver.FileInfo, error) {
}
return files, nil
}
func Get(ctx context.Context, path string) (driver.FileInfo, error) {
account, actualPath, err := operations.GetAccountAndActualPath(path)
if err != nil {
return nil, errors.WithMessage(err, "failed get account")
}
return operations.Get(ctx, account, actualPath)
}
func Link(ctx context.Context, path string, args driver.LinkArgs) (*driver.Link, error) {
account, actualPath, err := operations.GetAccountAndActualPath(path)
if err != nil {
return nil, errors.WithMessage(err, "failed get account")
}
return operations.Link(ctx, account, actualPath, args)
}

77
internal/fs/write.go Normal file
View File

@ -0,0 +1,77 @@
package fs
import (
"context"
"github.com/alist-org/alist/v3/internal/driver"
"github.com/alist-org/alist/v3/internal/operations"
"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
// TODO: if not, add copy task
func Copy(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 operations.Copy(ctx, account, srcActualPath, dstActualPath)
}
// TODO: add copy task, maybe like this:
// operations.Link(ctx,srcAccount,srcActualPath,args)
// get a Reader from link
// boxing the Reader to a driver.FileStream
// operations.Put(ctx,dstParentPath, stream)
panic("TODO")
}
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)
}
func Put(ctx context.Context, account driver.Driver, parentPath string, file driver.FileStream) error {
account, actualParentPath, err := operations.GetAccountAndActualPath(parentPath)
if err != nil {
return errors.WithMessage(err, "failed get account")
}
return operations.Put(ctx, account, actualParentPath, file)
}

View File

@ -16,3 +16,33 @@ func List(ctx context.Context, account driver.Driver, path string) ([]driver.Fil
func Get(ctx context.Context, account driver.Driver, path string) (driver.FileInfo, error) {
return account.Get(ctx, path)
}
// Link get link, if is a url. show have an expiry time
func Link(ctx context.Context, account driver.Driver, path string, args driver.LinkArgs) (*driver.Link, error) {
return account.Link(ctx, path, args)
}
func MakeDir(ctx context.Context, account driver.Driver, path string) error {
return account.MakeDir(ctx, path)
}
func Move(ctx context.Context, account driver.Driver, srcPath, dstPath string) error {
return account.Move(ctx, srcPath, dstPath)
}
func Rename(ctx context.Context, account driver.Driver, srcPath, dstName string) error {
return account.Rename(ctx, srcPath, dstName)
}
// Copy Just copy file[s] in an account
func Copy(ctx context.Context, account driver.Driver, srcPath, dstPath string) error {
return account.Copy(ctx, srcPath, dstPath)
}
func Remove(ctx context.Context, account driver.Driver, path string) error {
return account.Remove(ctx, path)
}
func Put(ctx context.Context, account driver.Driver, parentPath string, file driver.FileStream) error {
return account.Put(ctx, parentPath, file)
}