From 7410fd4edaf021c21b4523e0891c0ddefcb4ed4c Mon Sep 17 00:00:00 2001 From: mkitsdts Date: Mon, 12 Jan 2026 10:05:36 +0800 Subject: [PATCH 1/3] fix(webdav/drivers):add errors check --- drivers/189pc/driver.go | 20 +++++++++++++------- drivers/189pc/types.go | 38 ++++++++++++++++++++++++++++++++++++++ internal/op/fs.go | 4 ++-- 3 files changed, 53 insertions(+), 9 deletions(-) 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 { From d0cdc6426e421e502974a3aae0c7f60414336132 Mon Sep 17 00:00:00 2001 From: mkitsdts Date: Thu, 22 Jan 2026 20:30:31 +0800 Subject: [PATCH 2/3] chore(pkg/error):add errs.IsObjectAlreadyExists function --- internal/errs/object.go | 4 ++++ internal/op/fs.go | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/errs/object.go b/internal/errs/object.go index ab78f314a..6f4befb2e 100644 --- a/internal/errs/object.go +++ b/internal/errs/object.go @@ -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) +} diff --git a/internal/op/fs.go b/internal/op/fs.go index 5c5e63988..46a8637b8 100644 --- a/internal/op/fs.go +++ b/internal/op/fs.go @@ -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 && err != errs.ObjectAlreadyExists { + if err != nil && errs.IsObjectAlreadyExists(err) { return err } } else { From 2b70975419f143995ab04474cbf8ad04edd7dd7b Mon Sep 17 00:00:00 2001 From: mkitsdts Date: Sat, 24 Jan 2026 13:10:24 +0800 Subject: [PATCH 3/3] chore(pkg/error):rollback error change --- internal/op/fs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/op/fs.go b/internal/op/fs.go index 46a8637b8..f112aba87 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 err + return errors.WithStack(err) } dirKey := Key(storage, stdpath.Dir(srcPath))