feat: fs other api
This commit is contained in:
@ -25,7 +25,7 @@ type Meta interface {
|
||||
}
|
||||
|
||||
type Other interface {
|
||||
Other(ctx context.Context, data interface{}) (interface{}, error)
|
||||
Other(ctx context.Context, args model.OtherArgs) (interface{}, error)
|
||||
}
|
||||
|
||||
type Reader interface {
|
||||
|
@ -2,6 +2,7 @@ package fs
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/alist-org/alist/v3/internal/driver"
|
||||
"github.com/alist-org/alist/v3/internal/model"
|
||||
"github.com/alist-org/alist/v3/internal/operations"
|
||||
@ -102,3 +103,11 @@ func GetStorage(path string) (driver.Driver, error) {
|
||||
}
|
||||
return storageDriver, nil
|
||||
}
|
||||
|
||||
func Other(ctx context.Context, args model.FsOtherArgs) (interface{}, error) {
|
||||
res, err := other(ctx, args)
|
||||
if err != nil {
|
||||
log.Errorf("failed remove %s: %+v", args.Path, err)
|
||||
}
|
||||
return res, err
|
||||
}
|
||||
|
@ -2,7 +2,9 @@ package fs
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/alist-org/alist/v3/internal/errs"
|
||||
"github.com/alist-org/alist/v3/internal/model"
|
||||
"github.com/alist-org/alist/v3/internal/operations"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
@ -45,3 +47,12 @@ func remove(ctx context.Context, path string) error {
|
||||
}
|
||||
return operations.Remove(ctx, storage, actualPath)
|
||||
}
|
||||
|
||||
func other(ctx context.Context, args model.FsOtherArgs) (interface{}, error) {
|
||||
storage, actualPath, err := operations.GetStorageAndActualPath(args.Path)
|
||||
if err != nil {
|
||||
return nil, errors.WithMessage(err, "failed get storage")
|
||||
}
|
||||
args.Path = actualPath
|
||||
return operations.Other(ctx, storage, args)
|
||||
}
|
@ -19,3 +19,15 @@ type Link struct {
|
||||
FilePath *string // local file, return the filepath
|
||||
Expiration *time.Duration // url expiration time
|
||||
}
|
||||
|
||||
type OtherArgs struct {
|
||||
Obj Obj
|
||||
Method string
|
||||
Data interface{}
|
||||
}
|
||||
|
||||
type FsOtherArgs struct {
|
||||
Path string `json:"path" form:"path"`
|
||||
Method string `json:"method" form:"method"`
|
||||
Data interface{} `json:"data" form:"data"`
|
||||
}
|
@ -150,6 +150,19 @@ func Link(ctx context.Context, storage driver.Driver, path string, args model.Li
|
||||
return link, file, err
|
||||
}
|
||||
|
||||
// other api
|
||||
func Other(ctx context.Context, storage driver.Driver, args model.FsOtherArgs) (interface{}, error) {
|
||||
obj, err := Get(ctx, storage, args.Path)
|
||||
if err != nil {
|
||||
return nil, errors.WithMessagef(err, "failed to get obj")
|
||||
}
|
||||
return storage.Other(ctx, model.OtherArgs{
|
||||
Obj: obj,
|
||||
Method: args.Method,
|
||||
Data: args.Data,
|
||||
})
|
||||
}
|
||||
|
||||
func MakeDir(ctx context.Context, storage driver.Driver, path string) error {
|
||||
// check if dir exists
|
||||
f, err := Get(ctx, storage, path)
|
||||
|
Reference in New Issue
Block a user