Skip to content

Commit c0d8448

Browse files
committed
feat(123_share): support 123_open as ref
Signed-off-by: MadDogOwner <[email protected]>
1 parent 15f2765 commit c0d8448

File tree

5 files changed

+30
-8
lines changed

5 files changed

+30
-8
lines changed

drivers/123_open/driver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (d *Open123) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
103103
}, nil
104104
}
105105

106-
res, err := d.getDownloadInfo(fileId)
106+
res, err := d.GetDownloadInfo(fileId)
107107
if err != nil {
108108
return nil, err
109109
}
@@ -138,7 +138,7 @@ func (d *Open123) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
138138
return fmt.Errorf("parse parentFileID error: %v", err)
139139
}
140140
etag := srcObj.(File).Etag
141-
createResp, err := d.create(parentFileId, srcObj.GetName(), etag, srcObj.GetSize(), 2, false)
141+
createResp, err := d.Create(parentFileId, srcObj.GetName(), etag, srcObj.GetSize(), 2, false)
142142
if err != nil {
143143
return err
144144
}
@@ -170,7 +170,7 @@ func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
170170
return nil, err
171171
}
172172
}
173-
createResp, err := d.create(parentFileId, file.GetName(), etag, file.GetSize(), 2, false)
173+
createResp, err := d.Create(parentFileId, file.GetName(), etag, file.GetSize(), 2, false)
174174
if err != nil {
175175
return nil, err
176176
}

drivers/123_open/upload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
)
2424

2525
// 创建文件 V2
26-
func (d *Open123) create(parentFileID int64, filename string, etag string, size int64, duplicate int, containDir bool) (*UploadCreateResp, error) {
26+
func (d *Open123) Create(parentFileID int64, filename string, etag string, size int64, duplicate int, containDir bool) (*UploadCreateResp, error) {
2727
var resp UploadCreateResp
2828
_, err := d.Request(UploadCreate, http.MethodPost, func(req *resty.Request) {
2929
req.SetBody(base.Json{

drivers/123_open/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func (d *Open123) getFiles(parentFileId int64, limit int, lastFileId int64) (*Fi
196196
return &resp, nil
197197
}
198198

199-
func (d *Open123) getDownloadInfo(fileId int64) (*DownloadInfoResp, error) {
199+
func (d *Open123) GetDownloadInfo(fileId int64) (*DownloadInfoResp, error) {
200200
var resp DownloadInfoResp
201201

202202
_, err := d.Request(DownloadInfo, http.MethodGet, func(req *resty.Request) {

drivers/123_share/driver.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"golang.org/x/time/rate"
1313

1414
_123 "github.com/OpenListTeam/OpenList/v4/drivers/123"
15+
_123_open "github.com/OpenListTeam/OpenList/v4/drivers/123_open"
1516
"github.com/OpenListTeam/OpenList/v4/drivers/base"
1617
"github.com/OpenListTeam/OpenList/v4/internal/driver"
1718
"github.com/OpenListTeam/OpenList/v4/internal/errs"
@@ -26,6 +27,7 @@ type Pan123Share struct {
2627
Addition
2728
apiRateLimit sync.Map
2829
ref *_123.Pan123
30+
refOpen *_123_open.Open123
2931
}
3032

3133
func (d *Pan123Share) Config() driver.Config {
@@ -43,12 +45,14 @@ func (d *Pan123Share) Init(ctx context.Context) error {
4345
}
4446

4547
func (d *Pan123Share) InitReference(storage driver.Driver) error {
46-
refStorage, ok := storage.(*_123.Pan123)
47-
if ok {
48+
if refStorage, ok := storage.(*_123.Pan123); ok {
4849
d.ref = refStorage
4950
return nil
51+
} else if refStorage, ok := storage.(*_123_open.Open123); ok {
52+
d.refOpen = refStorage
53+
return nil
5054
}
51-
return fmt.Errorf("ref: storage is not 123Pan")
55+
return fmt.Errorf("ref: storage is not 123Pan or 123Open")
5256
}
5357

5458
func (d *Pan123Share) Drop(ctx context.Context) error {
@@ -70,6 +74,23 @@ func (d *Pan123Share) List(ctx context.Context, dir model.Obj, args model.ListAr
7074
func (d *Pan123Share) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
7175
// TODO return link of file, required
7276
if f, ok := file.(File); ok {
77+
if d.refOpen != nil {
78+
// 1. 转存到缓存文件夹
79+
s, err := d.refOpen.Create(d.Addition.TempDirID, f.FileName, f.Etag, f.Size, 2, false)
80+
if err != nil {
81+
return nil, err
82+
}
83+
if !s.Data.Reuse {
84+
return nil, fmt.Errorf("failed to transfer share file")
85+
}
86+
// 2. 获取直链
87+
res, err := d.refOpen.GetDownloadInfo(s.Data.FileID)
88+
if err != nil {
89+
return nil, err
90+
}
91+
exp := 5 * time.Minute
92+
return &model.Link{URL: res.Data.DownloadUrl, Expiration: &exp}, nil
93+
}
7394
data := base.Json{
7495
"shareKey": d.ShareKey,
7596
"SharePwd": d.SharePwd,

drivers/123_share/meta.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ type Addition struct {
1212
//OrderBy string `json:"order_by" type:"select" options:"file_name,size,update_at" default:"file_name"`
1313
//OrderDirection string `json:"order_direction" type:"select" options:"asc,desc" default:"asc"`
1414
AccessToken string `json:"accesstoken" type:"text"`
15+
TempDirID int64 `json:"temp_dir_id" type:"number" default:"0" help:"Directory ID for transfer share files. (123Open Only)"`
1516
}
1617

1718
var config = driver.Config{

0 commit comments

Comments
 (0)