mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-11-26 03:45:06 +08:00
132 lines
3.0 KiB
Go
132 lines
3.0 KiB
Go
|
|
package halalcloudopen
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"strconv"
|
||
|
|
|
||
|
|
"github.com/OpenListTeam/OpenList/v4/internal/model"
|
||
|
|
sdkModel "github.com/halalcloud/golang-sdk-lite/halalcloud/model"
|
||
|
|
sdkUserFile "github.com/halalcloud/golang-sdk-lite/halalcloud/services/userfile"
|
||
|
|
)
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) getFiles(ctx context.Context, dir model.Obj) ([]model.Obj, error) {
|
||
|
|
|
||
|
|
files := make([]model.Obj, 0)
|
||
|
|
limit := int64(100)
|
||
|
|
token := ""
|
||
|
|
|
||
|
|
for {
|
||
|
|
result, err := d.sdkUserFileService.List(ctx, &sdkUserFile.FileListRequest{
|
||
|
|
Parent: &sdkUserFile.File{Path: dir.GetPath()},
|
||
|
|
ListInfo: &sdkModel.ScanListRequest{
|
||
|
|
Limit: strconv.FormatInt(limit, 10),
|
||
|
|
Token: token,
|
||
|
|
},
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
for i := 0; len(result.Files) > i; i++ {
|
||
|
|
files = append(files, NewObjFile(result.Files[i]))
|
||
|
|
}
|
||
|
|
|
||
|
|
if result.ListInfo == nil || result.ListInfo.Token == "" {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
token = result.ListInfo.Token
|
||
|
|
|
||
|
|
}
|
||
|
|
return files, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) makeDir(ctx context.Context, dir model.Obj, name string) (model.Obj, error) {
|
||
|
|
_, err := d.sdkUserFileService.Create(ctx, &sdkUserFile.File{
|
||
|
|
Path: dir.GetPath(),
|
||
|
|
Name: name,
|
||
|
|
})
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) move(ctx context.Context, obj model.Obj, dir model.Obj) (model.Obj, error) {
|
||
|
|
oldDir := obj.GetPath()
|
||
|
|
newDir := dir.GetPath()
|
||
|
|
_, err := d.sdkUserFileService.Move(ctx, &sdkUserFile.BatchOperationRequest{
|
||
|
|
Source: []*sdkUserFile.File{
|
||
|
|
{
|
||
|
|
Path: oldDir,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
Dest: &sdkUserFile.File{
|
||
|
|
Path: newDir,
|
||
|
|
},
|
||
|
|
})
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) rename(ctx context.Context, obj model.Obj, name string) (model.Obj, error) {
|
||
|
|
|
||
|
|
_, err := d.sdkUserFileService.Rename(ctx, &sdkUserFile.File{
|
||
|
|
Path: obj.GetPath(),
|
||
|
|
Name: name,
|
||
|
|
})
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) copy(ctx context.Context, obj model.Obj, dir model.Obj) (model.Obj, error) {
|
||
|
|
id := obj.GetID()
|
||
|
|
sourcePath := obj.GetPath()
|
||
|
|
if len(id) > 0 {
|
||
|
|
sourcePath = ""
|
||
|
|
}
|
||
|
|
|
||
|
|
destID := dir.GetID()
|
||
|
|
destPath := dir.GetPath()
|
||
|
|
if len(destID) > 0 {
|
||
|
|
destPath = ""
|
||
|
|
}
|
||
|
|
dest := &sdkUserFile.File{
|
||
|
|
Path: destPath,
|
||
|
|
Identity: destID,
|
||
|
|
}
|
||
|
|
_, err := d.sdkUserFileService.Copy(ctx, &sdkUserFile.BatchOperationRequest{
|
||
|
|
Source: []*sdkUserFile.File{
|
||
|
|
{
|
||
|
|
Path: sourcePath,
|
||
|
|
Identity: id,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
Dest: dest,
|
||
|
|
})
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) remove(ctx context.Context, obj model.Obj) error {
|
||
|
|
id := obj.GetID()
|
||
|
|
_, err := d.sdkUserFileService.Delete(ctx, &sdkUserFile.BatchOperationRequest{
|
||
|
|
Source: []*sdkUserFile.File{
|
||
|
|
{
|
||
|
|
Identity: id,
|
||
|
|
Path: obj.GetPath(),
|
||
|
|
},
|
||
|
|
},
|
||
|
|
})
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *HalalCloudOpen) details(ctx context.Context) (*model.StorageDetails, error) {
|
||
|
|
ret, err := d.sdkUserService.GetStatisticsAndQuota(ctx)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
total := uint64(ret.DiskStatisticsQuota.BytesQuota)
|
||
|
|
|
||
|
|
free := uint64(ret.DiskStatisticsQuota.BytesFree)
|
||
|
|
return &model.StorageDetails{
|
||
|
|
DiskUsage: model.DiskUsage{
|
||
|
|
TotalSpace: total,
|
||
|
|
FreeSpace: free,
|
||
|
|
},
|
||
|
|
}, nil
|
||
|
|
}
|