@@ -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
3133func (d * Pan123Share ) Config () driver.Config {
@@ -43,12 +45,14 @@ func (d *Pan123Share) Init(ctx context.Context) error {
4345}
4446
4547func (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
5458func (d * Pan123Share ) Drop (ctx context.Context ) error {
@@ -70,6 +74,23 @@ func (d *Pan123Share) List(ctx context.Context, dir model.Obj, args model.ListAr
7074func (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 ,
0 commit comments