Skip to content

Commit 4ba7696

Browse files
authored
feat(pikpak): support disk usage (#1426)
* feat(pikpak): support disk usage * fix(alias): cannot list with details * refactor: rename `NewDiskUsageFromUsedAndTotal` * fix(disk-usage): get details of storages that is not initialized
1 parent 6664551 commit 4ba7696

File tree

18 files changed

+98
-57
lines changed

18 files changed

+98
-57
lines changed

drivers/123/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ func (d *Pan123) GetDetails(ctx context.Context) (*model.StorageDetails, error)
260260
}
261261
total := userInfo.Data.SpacePermanent + userInfo.Data.SpaceTemp
262262
return &model.StorageDetails{
263-
DiskUsage: *model.NewDiskUsageFromUsedAndTotal(userInfo.Data.SpaceUsed, total),
263+
DiskUsage: driver.DiskUsageFromUsedAndTotal(userInfo.Data.SpaceUsed, total),
264264
}, nil
265265
}
266266

drivers/alias/driver.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,22 +146,27 @@ func (d *Alias) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([
146146
})
147147
if err == nil {
148148
tmp, err = utils.SliceConvert(tmp, func(obj model.Obj) (model.Obj, error) {
149-
thumb, ok := model.GetThumb(obj)
150149
objRes := model.Object{
151150
Name: obj.GetName(),
152151
Size: obj.GetSize(),
153152
Modified: obj.ModTime(),
154153
IsFolder: obj.IsDir(),
155154
}
156-
if !ok {
157-
return &objRes, nil
155+
if thumb, ok := model.GetThumb(obj); ok {
156+
return &model.ObjThumb{
157+
Object: objRes,
158+
Thumbnail: model.Thumbnail{
159+
Thumbnail: thumb,
160+
},
161+
}, nil
158162
}
159-
return &model.ObjThumb{
160-
Object: objRes,
161-
Thumbnail: model.Thumbnail{
162-
Thumbnail: thumb,
163-
},
164-
}, nil
163+
if details, ok := model.GetStorageDetails(obj); ok {
164+
return &model.ObjStorageDetails{
165+
Obj: &objRes,
166+
StorageDetailsWithName: *details,
167+
}, nil
168+
}
169+
return &objRes, nil
165170
})
166171
}
167172
if err == nil {

drivers/alias/util.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
stdpath "path"
77
"strings"
88
"sync"
9+
"time"
910

1011
"github.com/OpenListTeam/OpenList/v4/internal/driver"
1112
"github.com/OpenListTeam/OpenList/v4/internal/errs"
@@ -49,9 +50,11 @@ func (d *Alias) listRoot(ctx context.Context, withDetails bool) []model.Obj {
4950
wg.Add(1)
5051
go func() {
5152
defer wg.Done()
52-
details, e := op.GetStorageDetails(ctx, remoteDriver)
53+
c, cancel := context.WithTimeout(ctx, time.Second)
54+
defer cancel()
55+
details, e := op.GetStorageDetails(c, remoteDriver)
5356
if e != nil {
54-
if !errors.Is(e, errs.NotImplement) {
57+
if !errors.Is(e, errs.NotImplement) && !errors.Is(e, errs.StorageNotInit) {
5558
log.Errorf("failed get %s storage details: %+v", remoteDriver.GetStorage().MountPath, e)
5659
}
5760
return

drivers/aliyundrive/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ func (d *AliDrive) GetDetails(ctx context.Context) (*model.StorageDetails, error
337337
used := utils.Json.Get(res, "drive_used_size").ToUint64()
338338
total := utils.Json.Get(res, "drive_total_size").ToUint64()
339339
return &model.StorageDetails{
340-
DiskUsage: *model.NewDiskUsageFromUsedAndTotal(used, total),
340+
DiskUsage: driver.DiskUsageFromUsedAndTotal(used, total),
341341
}, nil
342342
}
343343

drivers/baidu_netdisk/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ func (d *BaiduNetdisk) GetDetails(ctx context.Context) (*model.StorageDetails, e
369369
if err != nil {
370370
return nil, err
371371
}
372-
return &model.StorageDetails{DiskUsage: *du}, nil
372+
return &model.StorageDetails{DiskUsage: du}, nil
373373
}
374374

375375
var _ driver.Driver = (*BaiduNetdisk)(nil)

drivers/baidu_netdisk/util.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"unicode"
1313

1414
"github.com/OpenListTeam/OpenList/v4/drivers/base"
15+
"github.com/OpenListTeam/OpenList/v4/internal/driver"
1516
"github.com/OpenListTeam/OpenList/v4/internal/errs"
1617
"github.com/OpenListTeam/OpenList/v4/internal/model"
1718
"github.com/OpenListTeam/OpenList/v4/internal/op"
@@ -382,15 +383,15 @@ func (d *BaiduNetdisk) getSliceSize(filesize int64) int64 {
382383
return maxSliceSize
383384
}
384385

385-
func (d *BaiduNetdisk) quota(ctx context.Context) (*model.DiskUsage, error) {
386+
func (d *BaiduNetdisk) quota(ctx context.Context) (model.DiskUsage, error) {
386387
var resp QuotaResp
387388
_, err := d.request("https://pan.baidu.com/api/quota", http.MethodGet, func(req *resty.Request) {
388389
req.SetContext(ctx)
389390
}, &resp)
390391
if err != nil {
391-
return nil, err
392+
return model.DiskUsage{}, err
392393
}
393-
return model.NewDiskUsageFromUsedAndTotal(resp.Used, resp.Total), nil
394+
return driver.DiskUsageFromUsedAndTotal(resp.Used, resp.Total), nil
394395
}
395396

396397
// func encodeURIComponent(str string) string {

drivers/cloudreve_v4/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ func (d *CloudreveV4) GetDetails(ctx context.Context) (*model.StorageDetails, er
349349
return nil, err
350350
}
351351
return &model.StorageDetails{
352-
DiskUsage: *model.NewDiskUsageFromUsedAndTotal(r.Used, r.Total),
352+
DiskUsage: driver.DiskUsageFromUsedAndTotal(r.Used, r.Total),
353353
}, nil
354354
}
355355

drivers/google_drive/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ func (d *GoogleDrive) GetDetails(ctx context.Context) (*model.StorageDetails, er
189189
return nil, err
190190
}
191191
return &model.StorageDetails{
192-
DiskUsage: *model.NewDiskUsageFromUsedAndTotal(used, total),
192+
DiskUsage: driver.DiskUsageFromUsedAndTotal(used, total),
193193
}, nil
194194
}
195195

drivers/ilanzou/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ func (d *ILanZou) GetDetails(ctx context.Context) (*model.StorageDetails, error)
414414
total := totalSize + rewardSize
415415
used := utils.Json.Get(res, "map", "usedSize").ToUint64() * 1024
416416
return &model.StorageDetails{
417-
DiskUsage: *model.NewDiskUsageFromUsedAndTotal(used, total),
417+
DiskUsage: driver.DiskUsageFromUsedAndTotal(used, total),
418418
}, nil
419419
}
420420

drivers/pikpak/driver.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ func (d *PikPak) GetAddition() driver.Additional {
3636
}
3737

3838
func (d *PikPak) Init(ctx context.Context) (err error) {
39-
4039
if d.Common == nil {
4140
d.Common = &Common{
4241
client: base.NewRestyClient(),
@@ -247,7 +246,7 @@ func (d *PikPak) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
247246
}
248247

249248
params := resp.Resumable.Params
250-
//endpoint := strings.Join(strings.Split(params.Endpoint, ".")[1:], ".")
249+
// endpoint := strings.Join(strings.Split(params.Endpoint, ".")[1:], ".")
251250
// web 端上传 返回的endpoint 为 `mypikpak.net` | android 端上传 返回的endpoint 为 `vip-lixian-07.mypikpak.net`·
252251
if d.Addition.Platform == "android" {
253252
params.Endpoint = "mypikpak.net"
@@ -260,6 +259,27 @@ func (d *PikPak) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
260259
return d.UploadByMultipart(ctx, &params, stream.GetSize(), stream, up)
261260
}
262261

262+
func (d *PikPak) GetDetails(ctx context.Context) (*model.StorageDetails, error) {
263+
var about AboutResponse
264+
_, err := d.request("https://api-drive.mypikpak.com/drive/v1/about", http.MethodGet, func(req *resty.Request) {
265+
req.SetContext(ctx)
266+
}, &about)
267+
if err != nil {
268+
return nil, err
269+
}
270+
total, err := strconv.ParseUint(about.Quota.Limit, 10, 64)
271+
if err != nil {
272+
return nil, err
273+
}
274+
used, err := strconv.ParseUint(about.Quota.Usage, 10, 64)
275+
if err != nil {
276+
return nil, err
277+
}
278+
return &model.StorageDetails{
279+
DiskUsage: driver.DiskUsageFromUsedAndTotal(used, total),
280+
}, nil
281+
}
282+
263283
// 离线下载文件
264284
func (d *PikPak) OfflineDownload(ctx context.Context, fileUrl string, parentDir model.Obj, fileName string) (*OfflineTask, error) {
265285
requestBody := base.Json{
@@ -278,7 +298,6 @@ func (d *PikPak) OfflineDownload(ctx context.Context, fileUrl string, parentDir
278298
req.SetContext(ctx).
279299
SetBody(requestBody)
280300
}, &resp)
281-
282301
if err != nil {
283302
return nil, err
284303
}
@@ -325,7 +344,6 @@ func (d *PikPak) OfflineList(ctx context.Context, nextPageToken string, phase []
325344
req.SetContext(ctx).
326345
SetQueryParams(params)
327346
}, &resp)
328-
329347
if err != nil {
330348
return nil, fmt.Errorf("failed to get offline list: %w", err)
331349
}

0 commit comments

Comments
 (0)