diff --git a/internal/webdav/pan_client_proxy.go b/internal/webdav/pan_client_proxy.go index d1f1e20..0d1244f 100644 --- a/internal/webdav/pan_client_proxy.go +++ b/internal/webdav/pan_client_proxy.go @@ -146,4 +146,25 @@ func (p *PanClientProxy) Mkdir(pathStr string, perm os.FileMode) error { return nil } return fmt.Errorf("unknown error") +} + +func (p *PanClientProxy) Rename(oldpath, newpath string) error { + oldFile, er := p.cacheFilePath(oldpath) + if er != nil { + return os.ErrNotExist + } + _,e := p.PanUser.PanClient().FileRename(p.PanDriveId, oldFile.FileId, path.Base(newpath)) + if e != nil { + return os.ErrInvalid + } + + // invalidate parent folder cache + p.deleteOneFilesDirectoriesListCache(path.Dir(oldpath)) + + // add new name cache + oldFile.Path = newpath + oldFile.FileName = path.Base(newpath) + p.cacheFilePathEntity(oldFile) + + return nil } \ No newline at end of file diff --git a/internal/webdav/webdav_file.go b/internal/webdav/webdav_file.go index 584e5c9..9645ec6 100644 --- a/internal/webdav/webdav_file.go +++ b/internal/webdav/webdav_file.go @@ -126,7 +126,7 @@ func (d WebDavDir) Rename(ctx context.Context, oldName, newName string) error { // Prohibit renaming from or to the virtual root directory. return os.ErrInvalid } - return os.Rename(oldName, newName) + return d.panClientProxy.Rename(oldName, newName) } func (d WebDavDir) Stat(ctx context.Context, name string) (os.FileInfo, error) { @@ -135,7 +135,7 @@ func (d WebDavDir) Stat(ctx context.Context, name string) (os.FileInfo, error) { fileItem,e := d.panClientProxy.FileInfoByPath(d.formatAbsoluteName(name)) if e != nil { logger.Verboseln("file path not existed: " + d.formatAbsoluteName(name)) - return nil, e + return nil, os.ErrNotExist } *f = NewWebDavFileInfo(fileItem) }