diff --git a/drivers/189pc/driver.go b/drivers/189pc/driver.go index 6aa06c068..af719401d 100644 --- a/drivers/189pc/driver.go +++ b/drivers/189pc/driver.go @@ -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 { diff --git a/drivers/189pc/types.go b/drivers/189pc/types.go index 32996debd..eed447e25 100644 --- a/drivers/189pc/types.go +++ b/drivers/189pc/types.go @@ -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, + } +} diff --git a/internal/op/fs.go b/internal/op/fs.go index 5116bbef5..5c5e63988 100644 --- a/internal/op/fs.go +++ b/internal/op/fs.go @@ -470,7 +470,7 @@ func Rename(ctx context.Context, storage driver.Driver, srcPath, dstName string) return errs.NotImplement } if err != nil { - return errors.WithStack(err) + return err } dirKey := Key(storage, stdpath.Dir(srcPath)) @@ -632,7 +632,7 @@ func Put(ctx context.Context, storage driver.Driver, dstDirPath string, file mod } else if storage.Config().NoOverwriteUpload { // try to rename old obj err = Rename(ctx, storage, dstPath, tempName) - if err != nil { + if err != nil && err != errs.ObjectAlreadyExists { return err } } else {