Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions drivers/189pc/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,29 +271,35 @@ func (y *Cloud189PC) Rename(ctx context.Context, srcObj model.Obj, newName strin
queryParam["familyId"] = y.FamilyID
}

var newObj model.Obj
switch f := srcObj.(type) {
switch srcObj.(type) {
case *Cloud189File:
fullUrl += "/renameFile.action"
queryParam["fileId"] = srcObj.GetID()
queryParam["destFileName"] = newName
newObj = &Cloud189File{Icon: f.Icon} // 复用预览
case *Cloud189Folder:
fullUrl += "/renameFolder.action"
queryParam["folderId"] = srcObj.GetID()
queryParam["destFolderName"] = newName
newObj = &Cloud189Folder{}
default:
return nil, errs.NotSupport
}

var resp RenameResp
_, err := y.request(fullUrl, method, func(req *resty.Request) {
req.SetContext(ctx).SetQueryParams(queryParam)
}, nil, newObj, isFamily)
}, nil, resp, isFamily)
if err != nil {
if resp.ResCode == "FileAlreadyExists" {
return nil, errs.ObjectAlreadyExists
}
return nil, err
}
return newObj, nil
switch f := srcObj.(type) {
case *Cloud189File:
return resp.toFile(f), nil
case *Cloud189Folder:
return resp.toFolder(), nil
}
return nil, errs.NotSupport
}

func (y *Cloud189PC) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
Expand Down
38 changes: 38 additions & 0 deletions drivers/189pc/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -427,3 +427,41 @@ type CapacityResp struct {
} `json:"familyCapacityInfo"`
TotalSize uint64 `json:"totalSize"`
}

type RenameResp struct {
ResMsg string `json:"res_message"`
CreateDate Time `json:"createDate"`
FileCate int `json:"fileCata"`
ID string `json:"id"`
LastOpTime Time `json:"lastOpTime"`
MD5 string `json:"md5"`
MediaType int `json:"mediaType"`
Name string `json:"name"`
Oeientation int `json:"orientation"`
ParentID int64 `json:"parentId"`
Rev string `json:"rev"`
Size int64 `json:"size"`
ResCode string `json:"res_code"`
}

func (r *RenameResp) toFile(f *Cloud189File) *Cloud189File {
return &Cloud189File{
ID: String(r.ID),
Name: r.Name,
Size: r.Size,
Md5: r.MD5,
LastOpTime: r.LastOpTime,
CreateDate: r.CreateDate,
Icon: f.Icon,
}
}

func (r *RenameResp) toFolder() *Cloud189Folder {
return &Cloud189Folder{
ID: String(r.ID),
Name: r.Name,
ParentID: r.ParentID,
LastOpTime: r.LastOpTime,
CreateDate: r.CreateDate,
}
}
8 changes: 6 additions & 2 deletions drivers/quark_uc/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,16 @@ func (d *QuarkOrUC) MakeDir(ctx context.Context, parentDir model.Obj, dirName st
"file_name": dirName,
"pdir_fid": parentDir.GetID(),
}
resp := Resp{}
_, err := d.request("/file", http.MethodPost, func(req *resty.Request) {
req.SetBody(data)
}, nil)
if err == nil {
}, &resp)
if err == nil || resp.Message == "file is doloading[存在同名文件]" || resp.Code == 23008 {
time.Sleep(time.Second)
}
if resp.Message == "file is doloading[存在同名文件]" || resp.Code == 23008 {
return errs.ObjectAlreadyExists
}
return err
}

Expand Down
4 changes: 4 additions & 0 deletions internal/errs/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ var (
func IsObjectNotFound(err error) bool {
return errors.Is(pkgerr.Cause(err), ObjectNotFound)
}

func IsObjectAlreadyExists(err error) bool {
return errors.Is(pkgerr.Cause(err), ObjectAlreadyExists)
}
6 changes: 3 additions & 3 deletions internal/op/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ func MakeDir(ctx context.Context, storage driver.Driver, path string) error {
return nil, errors.WithMessage(err, "failed to check if dir exists")
}
parentPath, dirName := stdpath.Split(path)
if err = MakeDir(ctx, storage, parentPath); err != nil {
if err = MakeDir(ctx, storage, parentPath); err != nil && !errs.IsObjectAlreadyExists(err) {
return nil, errors.WithMessagef(err, "failed to make parent dir [%s]", parentPath)
}
parentDir, err := GetUnwrap(ctx, storage, parentPath)
Comment thread
mkitsdts marked this conversation as resolved.
Expand All @@ -343,7 +343,7 @@ func MakeDir(ctx context.Context, storage driver.Driver, path string) error {
default:
return nil, errs.NotImplement
}
if err != nil {
if err != nil && !errs.IsObjectAlreadyExists(err) {
return nil, errors.WithStack(err)
}
if storage.Config().NoCache {
Expand Down Expand Up @@ -640,7 +640,7 @@ func Put(ctx context.Context, storage driver.Driver, dstDirPath string, file mod
}
}
err = MakeDir(ctx, storage, dstDirPath)
if err != nil {
if err != nil && !errs.IsObjectAlreadyExists(err) {
return errors.WithMessagef(err, "failed to make dir [%s]", dstDirPath)
}
parentDir, err := GetUnwrap(ctx, storage, dstDirPath)
Expand Down