Skip to content

Commit 54ae7e6

Browse files
feat(115_open): Add GetObjInfo to accelerate getting link (#888)
* feat(115_open): Add GetObjInfo to accelerate getting link * feat(fs): use cache directly when cache exist
1 parent 991da7d commit 54ae7e6

File tree

5 files changed

+51
-4
lines changed

5 files changed

+51
-4
lines changed

drivers/115_open/driver.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,23 @@ func (d *Open115) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
131131
}, nil
132132
}
133133

134+
func (d *Open115) GetObjInfo(ctx context.Context, path string) (model.Obj, error) {
135+
if err := d.WaitLimit(ctx); err != nil {
136+
return nil, err
137+
}
138+
resp, err := d.client.GetFolderInfoByPath(ctx, path)
139+
if err != nil {
140+
return nil, err
141+
}
142+
return &Obj{
143+
Fid: resp.FileID,
144+
Fn: resp.FileName,
145+
Fc: resp.FileCategory,
146+
Sha1: resp.Sha1,
147+
Pc: resp.PickCode,
148+
}, nil
149+
}
150+
134151
func (d *Open115) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error) {
135152
if err := d.WaitLimit(ctx); err != nil {
136153
return nil, err

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ require (
9898
)
9999

100100
require (
101-
github.com/OpenListTeam/115-sdk-go v0.2.1
101+
github.com/OpenListTeam/115-sdk-go v0.2.2
102102
github.com/STARRY-S/zip v0.2.1 // indirect
103103
github.com/aymerick/douceur v0.2.0 // indirect
104104
github.com/blevesearch/go-faiss v1.0.25 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ github.com/OpenListTeam/115-sdk-go v0.2.0 h1:qNEYpGQg++INLFXYzVW94uGFzCKAIoJJx19
4646
github.com/OpenListTeam/115-sdk-go v0.2.0/go.mod h1:cfvitk2lwe6036iNi2h+iNxwxWDifKZsSvNtrur5BqU=
4747
github.com/OpenListTeam/115-sdk-go v0.2.1 h1:tzRUqdktS3h4o69+CXRDVwL0jYN7ccuX8TZWmLxkBGo=
4848
github.com/OpenListTeam/115-sdk-go v0.2.1/go.mod h1:cfvitk2lwe6036iNi2h+iNxwxWDifKZsSvNtrur5BqU=
49+
github.com/OpenListTeam/115-sdk-go v0.2.2 h1:JCrGHqQjBX3laOA6Hw4CuBovSg7g+FC5s0LEAYsRciU=
50+
github.com/OpenListTeam/115-sdk-go v0.2.2/go.mod h1:cfvitk2lwe6036iNi2h+iNxwxWDifKZsSvNtrur5BqU=
4951
github.com/OpenListTeam/go-cache v0.1.0 h1:eV2+FCP+rt+E4OCJqLUW7wGccWZNJMV0NNkh+uChbAI=
5052
github.com/OpenListTeam/go-cache v0.1.0/go.mod h1:AHWjKhNK3LE4rorVdKyEALDHoeMnP8SjiNyfVlB+Pz4=
5153
github.com/OpenListTeam/gsync v0.1.0 h1:ywzGybOvA3lW8K1BUjKZ2IUlT2FSlzPO4DOazfYXjcs=

internal/driver/driver.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ type Getter interface {
4747
Get(ctx context.Context, path string) (model.Obj, error)
4848
}
4949

50+
type GetObjInfo interface {
51+
// GetObjInfo get file info by path
52+
GetObjInfo(ctx context.Context, path string) (model.Obj, error)
53+
}
54+
5055
//type Writer interface {
5156
// Mkdir
5257
// Move

internal/op/fs.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
stdpath "path"
66
"slices"
7+
"strings"
78
"time"
89

910
"github.com/OpenListTeam/OpenList/v4/internal/driver"
@@ -255,9 +256,31 @@ func Link(ctx context.Context, storage driver.Driver, path string, args model.Li
255256
if storage.Config().CheckStatus && storage.GetStorage().Status != WORK {
256257
return nil, nil, errors.Errorf("storage not init: %s", storage.GetStorage().Status)
257258
}
258-
file, err := GetUnwrap(ctx, storage, path)
259-
if err != nil {
260-
return nil, nil, errors.WithMessage(err, "failed to get file")
259+
var (
260+
file model.Obj
261+
err error
262+
)
263+
// use cache directly
264+
dir, name := stdpath.Split(stdpath.Join(storage.GetStorage().MountPath, path))
265+
if cacheFiles, ok := listCache.Get(strings.TrimSuffix(dir, "/")); ok {
266+
for _, f := range cacheFiles {
267+
if f.GetName() == name {
268+
file = model.UnwrapObj(f)
269+
break
270+
}
271+
}
272+
} else {
273+
if g, ok := storage.(driver.GetObjInfo); ok {
274+
file, err = g.GetObjInfo(ctx, path)
275+
} else {
276+
file, err = GetUnwrap(ctx, storage, path)
277+
}
278+
}
279+
if file == nil {
280+
if err != nil {
281+
return nil, nil, errors.WithMessage(err, "failed to get file")
282+
}
283+
return nil, nil, errors.WithStack(errs.ObjectNotFound)
261284
}
262285
if file.IsDir() {
263286
return nil, nil, errors.WithStack(errs.NotFile)

0 commit comments

Comments
 (0)