mirror of https://github.com/Xhofe/alist
parent
2dd30f2b77
commit
3fa0217c4b
|
@ -2,10 +2,12 @@ package alist_v3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"io"
|
||||||
|
"path"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/alist-org/alist/v3/drivers/base"
|
"github.com/alist-org/alist/v3/drivers/base"
|
||||||
"github.com/alist-org/alist/v3/internal/driver"
|
"github.com/alist-org/alist/v3/internal/driver"
|
||||||
"github.com/alist-org/alist/v3/internal/errs"
|
|
||||||
"github.com/alist-org/alist/v3/internal/model"
|
"github.com/alist-org/alist/v3/internal/model"
|
||||||
"github.com/alist-org/alist/v3/pkg/utils"
|
"github.com/alist-org/alist/v3/pkg/utils"
|
||||||
"github.com/alist-org/alist/v3/server/common"
|
"github.com/alist-org/alist/v3/server/common"
|
||||||
|
@ -100,27 +102,86 @@ func (d *AListV3) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AListV3) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error {
|
func (d *AListV3) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error {
|
||||||
return errs.NotImplement
|
url := d.Address + "/api/fs/mkdir"
|
||||||
|
var resp common.Resp[interface{}]
|
||||||
|
_, err := base.RestyClient.R().
|
||||||
|
SetResult(&resp).
|
||||||
|
SetHeader("Authorization", d.AccessToken).
|
||||||
|
SetBody(MkdirOrLinkReq{
|
||||||
|
Path: path.Join(parentDir.GetPath(), dirName),
|
||||||
|
}).Post(url)
|
||||||
|
return checkResp(resp, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AListV3) Move(ctx context.Context, srcObj, dstDir model.Obj) error {
|
func (d *AListV3) Move(ctx context.Context, srcObj, dstDir model.Obj) error {
|
||||||
return errs.NotImplement
|
url := d.Address + "/api/fs/move"
|
||||||
|
var resp common.Resp[interface{}]
|
||||||
|
_, err := base.RestyClient.R().
|
||||||
|
SetResult(&resp).
|
||||||
|
SetHeader("Authorization", d.AccessToken).
|
||||||
|
SetBody(MoveCopyReq{
|
||||||
|
SrcDir: srcObj.GetPath(),
|
||||||
|
DstDir: dstDir.GetPath(),
|
||||||
|
Names: []string{srcObj.GetName()},
|
||||||
|
}).Post(url)
|
||||||
|
return checkResp(resp, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AListV3) Rename(ctx context.Context, srcObj model.Obj, newName string) error {
|
func (d *AListV3) Rename(ctx context.Context, srcObj model.Obj, newName string) error {
|
||||||
return errs.NotImplement
|
url := d.Address + "/api/fs/rename"
|
||||||
|
var resp common.Resp[interface{}]
|
||||||
|
_, err := base.RestyClient.R().
|
||||||
|
SetResult(&resp).
|
||||||
|
SetHeader("Authorization", d.AccessToken).
|
||||||
|
SetBody(RenameReq{
|
||||||
|
Path: srcObj.GetPath(),
|
||||||
|
Name: newName,
|
||||||
|
}).Post(url)
|
||||||
|
return checkResp(resp, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AListV3) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
|
func (d *AListV3) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
|
||||||
return errs.NotImplement
|
url := d.Address + "/api/fs/copy"
|
||||||
|
var resp common.Resp[interface{}]
|
||||||
|
_, err := base.RestyClient.R().
|
||||||
|
SetResult(&resp).
|
||||||
|
SetHeader("Authorization", d.AccessToken).
|
||||||
|
SetBody(MoveCopyReq{
|
||||||
|
SrcDir: srcObj.GetPath(),
|
||||||
|
DstDir: dstDir.GetPath(),
|
||||||
|
Names: []string{srcObj.GetName()},
|
||||||
|
}).Post(url)
|
||||||
|
return checkResp(resp, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AListV3) Remove(ctx context.Context, obj model.Obj) error {
|
func (d *AListV3) Remove(ctx context.Context, obj model.Obj) error {
|
||||||
return errs.NotImplement
|
url := d.Address + "/api/fs/remove"
|
||||||
|
var resp common.Resp[interface{}]
|
||||||
|
_, err := base.RestyClient.R().
|
||||||
|
SetResult(&resp).
|
||||||
|
SetHeader("Authorization", d.AccessToken).
|
||||||
|
SetBody(RemoveReq{
|
||||||
|
Dir: obj.GetPath(),
|
||||||
|
Names: []string{obj.GetName()},
|
||||||
|
}).Post(url)
|
||||||
|
return checkResp(resp, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *AListV3) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {
|
func (d *AListV3) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {
|
||||||
return errs.NotImplement
|
url := d.Address + "/api/fs/put"
|
||||||
|
var resp common.Resp[interface{}]
|
||||||
|
fileBytes, err := io.ReadAll(stream.GetReadCloser())
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
_, err = base.RestyClient.R().
|
||||||
|
SetResult(&resp).
|
||||||
|
SetHeader("Authorization", d.AccessToken).
|
||||||
|
SetHeader("File-Path", path.Join(dstDir.GetPath(), stream.GetName())).
|
||||||
|
SetHeader("Password", d.Password).
|
||||||
|
SetHeader("Content-Length", strconv.FormatInt(stream.GetSize(), 10)).
|
||||||
|
SetBody(fileBytes).Put(url)
|
||||||
|
return checkResp(resp, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
//func (d *AList) Other(ctx context.Context, args model.OtherArgs) (interface{}, error) {
|
//func (d *AList) Other(ctx context.Context, args model.OtherArgs) (interface{}, error) {
|
||||||
|
|
|
@ -15,7 +15,6 @@ type Addition struct {
|
||||||
var config = driver.Config{
|
var config = driver.Config{
|
||||||
Name: "AList V3",
|
Name: "AList V3",
|
||||||
LocalSort: true,
|
LocalSort: true,
|
||||||
NoUpload: true,
|
|
||||||
DefaultRoot: "/",
|
DefaultRoot: "/",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,3 +43,23 @@ type FsGetResp struct {
|
||||||
Provider string `json:"provider"`
|
Provider string `json:"provider"`
|
||||||
Related []ObjResp `json:"related"`
|
Related []ObjResp `json:"related"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MkdirOrLinkReq struct {
|
||||||
|
Path string `json:"path" form:"path"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MoveCopyReq struct {
|
||||||
|
SrcDir string `json:"src_dir"`
|
||||||
|
DstDir string `json:"dst_dir"`
|
||||||
|
Names []string `json:"names"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RenameReq struct {
|
||||||
|
Path string `json:"path"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoveReq struct {
|
||||||
|
Dir string `json:"dir"`
|
||||||
|
Names []string `json:"names"`
|
||||||
|
}
|
||||||
|
|
|
@ -1 +1,17 @@
|
||||||
package alist_v3
|
package alist_v3
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/alist-org/alist/v3/server/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
func checkResp(resp common.Resp[interface{}], err error) error {
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if resp.Message == "success" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New(resp.Message)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue