mirror of https://github.com/Xhofe/alist
172 lines
4.0 KiB
Go
172 lines
4.0 KiB
Go
package lanzou
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/alist-org/alist/v3/drivers/base"
|
|
"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/pkg/utils"
|
|
"github.com/go-resty/resty/v2"
|
|
)
|
|
|
|
var upClient = base.NewRestyClient().SetTimeout(120 * time.Second)
|
|
|
|
type LanZou struct {
|
|
Addition
|
|
model.Storage
|
|
}
|
|
|
|
func (d *LanZou) Config() driver.Config {
|
|
return config
|
|
}
|
|
|
|
func (d *LanZou) GetAddition() driver.Additional {
|
|
return d.Addition
|
|
}
|
|
|
|
func (d *LanZou) Init(ctx context.Context, storage model.Storage) error {
|
|
d.Storage = storage
|
|
err := utils.Json.UnmarshalFromString(d.Storage.Addition, &d.Addition)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if d.IsCookie() {
|
|
if d.RootFolderID == "" {
|
|
d.RootFolderID = "-1"
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (d *LanZou) Drop(ctx context.Context) error {
|
|
return nil
|
|
}
|
|
|
|
// 获取的大小和时间不准确
|
|
func (d *LanZou) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
|
|
if d.IsCookie() {
|
|
return d.GetFiles(ctx, dir.GetID())
|
|
} else {
|
|
return d.GetFileOrFolderByShareUrl(ctx, dir.GetID(), d.SharePassword)
|
|
}
|
|
}
|
|
|
|
func (d *LanZou) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
|
|
downID := file.GetID()
|
|
pwd := d.SharePassword
|
|
if d.IsCookie() {
|
|
share, err := d.getFileShareUrlByID(ctx, file.GetID())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
downID = share.FID
|
|
pwd = share.Pwd
|
|
}
|
|
fileInfo, err := d.getFilesByShareUrl(ctx, downID, pwd, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &model.Link{
|
|
URL: fileInfo.Url,
|
|
Header: http.Header{
|
|
"User-Agent": []string{base.UserAgent},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func (d *LanZou) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error {
|
|
if d.IsCookie() {
|
|
_, err := d.post(d.BaseUrl+"/doupload.php", func(req *resty.Request) {
|
|
req.SetContext(ctx)
|
|
req.SetFormData(map[string]string{
|
|
"task": "2",
|
|
"parent_id": parentDir.GetID(),
|
|
"folder_name": dirName,
|
|
"folder_description": "",
|
|
})
|
|
}, nil)
|
|
return err
|
|
}
|
|
return errs.NotImplement
|
|
}
|
|
|
|
func (d *LanZou) Move(ctx context.Context, srcObj, dstDir model.Obj) error {
|
|
if d.IsCookie() {
|
|
if !srcObj.IsDir() {
|
|
_, err := d.post(d.BaseUrl+"/doupload.php", func(req *resty.Request) {
|
|
req.SetContext(ctx)
|
|
req.SetFormData(map[string]string{
|
|
"task": "20",
|
|
"folder_id": dstDir.GetID(),
|
|
"file_id": srcObj.GetID(),
|
|
})
|
|
}, nil)
|
|
return err
|
|
}
|
|
}
|
|
return errs.NotImplement
|
|
}
|
|
|
|
func (d *LanZou) Rename(ctx context.Context, srcObj model.Obj, newName string) error {
|
|
if d.IsCookie() {
|
|
if !srcObj.IsDir() {
|
|
_, err := d.post(d.BaseUrl+"/doupload.php", func(req *resty.Request) {
|
|
req.SetContext(ctx)
|
|
req.SetFormData(map[string]string{
|
|
"task": "46",
|
|
"file_id": srcObj.GetID(),
|
|
"file_name": newName,
|
|
"type": "2",
|
|
})
|
|
}, nil)
|
|
return err
|
|
}
|
|
}
|
|
return errs.NotImplement
|
|
}
|
|
|
|
func (d *LanZou) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
|
|
return errs.NotImplement
|
|
}
|
|
|
|
func (d *LanZou) Remove(ctx context.Context, obj model.Obj) error {
|
|
if d.IsCookie() {
|
|
_, err := d.post(d.BaseUrl+"/doupload.php", func(req *resty.Request) {
|
|
req.SetContext(ctx)
|
|
if obj.IsDir() {
|
|
req.SetFormData(map[string]string{
|
|
"task": "3",
|
|
"folder_id": obj.GetID(),
|
|
})
|
|
} else {
|
|
req.SetFormData(map[string]string{
|
|
"task": "6",
|
|
"file_id": obj.GetID(),
|
|
})
|
|
}
|
|
}, nil)
|
|
return err
|
|
}
|
|
return errs.NotImplement
|
|
}
|
|
|
|
func (d *LanZou) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {
|
|
if d.IsCookie() {
|
|
_, err := d._post(d.BaseUrl+"/fileup.php", func(req *resty.Request) {
|
|
req.SetFormData(map[string]string{
|
|
"task": "1",
|
|
"id": "WU_FILE_0",
|
|
"name": stream.GetName(),
|
|
"folder_id": dstDir.GetID(),
|
|
}).SetFileReader("upload_file", stream.GetName(), stream)
|
|
}, nil, true)
|
|
return err
|
|
}
|
|
return errs.NotImplement
|
|
}
|