Skip to content

Commit

Permalink
feat: fs and operations
Browse files Browse the repository at this point in the history
  • Loading branch information
xhofe committed Jun 10, 2022
1 parent cd7e997 commit ec89bb7
Show file tree
Hide file tree
Showing 8 changed files with 137 additions and 24 deletions.
4 changes: 2 additions & 2 deletions drivers/local/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Expand Down Expand Up @@ -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")
}
Expand Down
10 changes: 5 additions & 5 deletions internal/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
1 change: 0 additions & 1 deletion internal/driver/link.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
)

type LinkArgs struct {
Path string
IP string
Header http.Header
}
Expand Down
7 changes: 7 additions & 0 deletions internal/fs/error.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fs

import "errors"

var (
ErrMoveBetwwenTwoAccounts = errors.New("can't move files between two account, try to copy")
)
16 changes: 0 additions & 16 deletions internal/fs/get.go

This file was deleted.

16 changes: 16 additions & 0 deletions internal/fs/list.go → internal/fs/read.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 77 additions & 0 deletions internal/fs/write.go
Original file line number Diff line number Diff line change
@@ -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)
}
30 changes: 30 additions & 0 deletions internal/operations/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

0 comments on commit ec89bb7

Please sign in to comment.