From 9e151a80fdb81025a87a62c6fc2d0850b4674d92 Mon Sep 17 00:00:00 2001 From: seven <2260006962@qq.com> Date: Mon, 15 Dec 2025 11:13:35 +0800 Subject: [PATCH 1/2] feat(115_open): implement Getter interface --- drivers/115_open/driver.go | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/drivers/115_open/driver.go b/drivers/115_open/driver.go index afccb2a7e..6bbaa6942 100644 --- a/drivers/115_open/driver.go +++ b/drivers/115_open/driver.go @@ -4,6 +4,8 @@ import ( "context" "fmt" "net/http" + stdpath "path" + "slices" "strconv" "strings" "time" @@ -131,6 +133,46 @@ func (d *Open115) Link(ctx context.Context, file model.Obj, args model.LinkArgs) }, nil } +func (d *Open115) Get(ctx context.Context, path string) (model.Obj, error) { + if err := d.WaitLimit(ctx); err != nil { + return nil, err + } + + // add parent path + if d.GetRootId() != d.Config().DefaultRoot { + folderInfo, err := d.client.GetFolderInfo(ctx, d.GetRootId()) + if err != nil { + return nil, err + } + + if folderInfo.FileID != d.Config().DefaultRoot { + path = stdpath.Join(folderInfo.FileName, path) + } + + parentPaths := folderInfo.Paths + slices.Reverse(parentPaths) + for _, parentPathInfo := range parentPaths { + if parentPathInfo.FileID == d.Config().DefaultRoot { + path = stdpath.Join("/", path) + } else { + path = stdpath.Join("/", parentPathInfo.FileName, path) + } + } + } + + resp, err := d.client.GetFolderInfoByPath(ctx, path) + if err != nil { + return nil, err + } + return &Obj{ + Fid: resp.FileID, + Fn: resp.FileName, + Fc: resp.FileCategory, + Sha1: resp.Sha1, + Pc: resp.PickCode, + }, nil +} + func (d *Open115) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error) { if err := d.WaitLimit(ctx); err != nil { return nil, err From 7635bc5c325e26d8a1a720bdbe472373d221057f Mon Sep 17 00:00:00 2001 From: seven <2260006962@qq.com> Date: Mon, 15 Dec 2025 20:16:53 +0800 Subject: [PATCH 2/2] chore(115_open): get parentPath move to init --- drivers/115_open/driver.go | 51 +++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/drivers/115_open/driver.go b/drivers/115_open/driver.go index 6bbaa6942..15389ed93 100644 --- a/drivers/115_open/driver.go +++ b/drivers/115_open/driver.go @@ -25,8 +25,9 @@ import ( type Open115 struct { model.Storage Addition - client *sdk.Client - limiter *rate.Limiter + client *sdk.Client + limiter *rate.Limiter + parentPath string } func (d *Open115) Config() driver.Config { @@ -55,6 +56,28 @@ func (d *Open115) Init(ctx context.Context) error { if d.Addition.LimitRate > 0 { d.limiter = rate.NewLimiter(rate.Limit(d.Addition.LimitRate), 1) } + // add parent path + d.parentPath = "/" + if d.GetRootId() != d.Config().DefaultRoot { + folderInfo, err := d.client.GetFolderInfo(ctx, d.GetRootId()) + if err != nil { + return err + } + + if folderInfo.FileID != d.Config().DefaultRoot { + d.parentPath = stdpath.Join(d.parentPath, folderInfo.FileName) + } + + parentPaths := folderInfo.Paths + slices.Reverse(parentPaths) + for _, parentPathInfo := range parentPaths { + if parentPathInfo.FileID == d.Config().DefaultRoot { + d.parentPath = stdpath.Join("/", d.parentPath) + } else { + d.parentPath = stdpath.Join("/", parentPathInfo.FileName, d.parentPath) + } + } + } return nil } @@ -137,29 +160,7 @@ func (d *Open115) Get(ctx context.Context, path string) (model.Obj, error) { if err := d.WaitLimit(ctx); err != nil { return nil, err } - - // add parent path - if d.GetRootId() != d.Config().DefaultRoot { - folderInfo, err := d.client.GetFolderInfo(ctx, d.GetRootId()) - if err != nil { - return nil, err - } - - if folderInfo.FileID != d.Config().DefaultRoot { - path = stdpath.Join(folderInfo.FileName, path) - } - - parentPaths := folderInfo.Paths - slices.Reverse(parentPaths) - for _, parentPathInfo := range parentPaths { - if parentPathInfo.FileID == d.Config().DefaultRoot { - path = stdpath.Join("/", path) - } else { - path = stdpath.Join("/", parentPathInfo.FileName, path) - } - } - } - + path = stdpath.Join(d.parentPath, path) resp, err := d.client.GetFolderInfoByPath(ctx, path) if err != nil { return nil, err