Skip to content

Commit 07506b0

Browse files
authored
feat(115_open): implement Getter interface (#1811)
* feat(115_open): implement Getter interface * chore(115_open): get parentPath move to init
1 parent 201a206 commit 07506b0

1 file changed

Lines changed: 45 additions & 2 deletions

File tree

drivers/115_open/driver.go

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"fmt"
66
"net/http"
7+
stdpath "path"
8+
"slices"
79
"strconv"
810
"strings"
911
"time"
@@ -23,8 +25,9 @@ import (
2325
type Open115 struct {
2426
model.Storage
2527
Addition
26-
client *sdk.Client
27-
limiter *rate.Limiter
28+
client *sdk.Client
29+
limiter *rate.Limiter
30+
parentPath string
2831
}
2932

3033
func (d *Open115) Config() driver.Config {
@@ -59,6 +62,28 @@ func (d *Open115) Init(ctx context.Context) error {
5962
d.PageSize = 1150
6063
}
6164

65+
// add parent path
66+
d.parentPath = "/"
67+
if d.GetRootId() != d.Config().DefaultRoot {
68+
folderInfo, err := d.client.GetFolderInfo(ctx, d.GetRootId())
69+
if err != nil {
70+
return err
71+
}
72+
73+
if folderInfo.FileID != d.Config().DefaultRoot {
74+
d.parentPath = stdpath.Join(d.parentPath, folderInfo.FileName)
75+
}
76+
77+
parentPaths := folderInfo.Paths
78+
slices.Reverse(parentPaths)
79+
for _, parentPathInfo := range parentPaths {
80+
if parentPathInfo.FileID == d.Config().DefaultRoot {
81+
d.parentPath = stdpath.Join("/", d.parentPath)
82+
} else {
83+
d.parentPath = stdpath.Join("/", parentPathInfo.FileName, d.parentPath)
84+
}
85+
}
86+
}
6287
return nil
6388
}
6489

@@ -137,6 +162,24 @@ func (d *Open115) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
137162
}, nil
138163
}
139164

165+
func (d *Open115) Get(ctx context.Context, path string) (model.Obj, error) {
166+
if err := d.WaitLimit(ctx); err != nil {
167+
return nil, err
168+
}
169+
path = stdpath.Join(d.parentPath, path)
170+
resp, err := d.client.GetFolderInfoByPath(ctx, path)
171+
if err != nil {
172+
return nil, err
173+
}
174+
return &Obj{
175+
Fid: resp.FileID,
176+
Fn: resp.FileName,
177+
Fc: resp.FileCategory,
178+
Sha1: resp.Sha1,
179+
Pc: resp.PickCode,
180+
}, nil
181+
}
182+
140183
func (d *Open115) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error) {
141184
if err := d.WaitLimit(ctx); err != nil {
142185
return nil, err

0 commit comments

Comments
 (0)