Skip to content

Commit e1ded83

Browse files
Suyunmengclaude
andauthored
fix(drivers/115_open): recover transient path metadata (#2816)
Recover temporarily missing or incomplete 115 Open path metadata from parent and ancestor directory listings. Use 115-sdk-go v0.2.6 to normalize missing object errors, while preserving valid zero-byte files and ensuring recursive parent resolution progresses correctly. Co-authored-by: Claude <[email protected]>
1 parent ff3cb8b commit e1ded83

4 files changed

Lines changed: 55 additions & 5 deletions

File tree

drivers/115_open/driver.go

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,18 +172,58 @@ func (d *Open115) Get(ctx context.Context, path string) (model.Obj, error) {
172172
resp, err := d.client.GetFolderInfoByPath(ctx, path)
173173
if err != nil {
174174
if errors.Is(err, sdk.ErrObjectNotFound) {
175-
return nil, errs.ObjectNotFound
175+
return d.getFromParent(ctx, path, "")
176176
}
177177
return nil, err
178178
}
179-
return &Obj{
179+
obj := &Obj{
180180
Fid: resp.FileID,
181181
Fn: resp.FileName,
182182
Fc: resp.FileCategory,
183183
Sha1: resp.Sha1,
184184
Pc: resp.PickCode,
185185
FS: resp.SizeByte,
186-
}, nil
186+
Upt: parseTime(resp.UTime),
187+
UpPt: parseTime(resp.PTime),
188+
}
189+
if !obj.IsDir() && obj.ModTime().Unix() <= 0 {
190+
return d.getFromParent(ctx, path, obj.GetID())
191+
}
192+
return obj, nil
193+
}
194+
195+
func (d *Open115) getFromParent(ctx context.Context, path, id string) (model.Obj, error) {
196+
path = stdpath.Clean(path)
197+
parent, name := stdpath.Split(path)
198+
parentID := d.GetRootId()
199+
if stdpath.Clean(parent) != stdpath.Clean(d.parentPath) {
200+
if err := d.WaitLimit(ctx); err != nil {
201+
return nil, err
202+
}
203+
parentInfo, err := d.client.GetFolderInfoByPath(ctx, parent)
204+
if err != nil {
205+
if !errors.Is(err, sdk.ErrObjectNotFound) {
206+
return nil, err
207+
}
208+
parentObj, err := d.getFromParent(ctx, parent, "")
209+
if err != nil {
210+
return nil, err
211+
}
212+
parentID = parentObj.GetID()
213+
} else {
214+
parentID = parentInfo.FileID
215+
}
216+
}
217+
files, err := d.List(ctx, &Obj{Fid: parentID, Fc: "0"}, model.ListArgs{})
218+
if err != nil {
219+
return nil, err
220+
}
221+
for _, file := range files {
222+
if (id != "" && file.GetID() == id) || (id == "" && file.GetName() == name) {
223+
return file, nil
224+
}
225+
}
226+
return nil, errs.ObjectNotFound
187227
}
188228

189229
func (d *Open115) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error) {

drivers/115_open/util.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package _115_open
22

3-
import "encoding/json"
3+
import (
4+
"encoding/json"
5+
"strconv"
6+
)
47

58
func ParseInt64(v json.Number) (int64, error) {
69
i, err := v.Int64()
@@ -13,3 +16,8 @@ func ParseInt64(v json.Number) (int64, error) {
1316
}
1417
return int64(0), err
1518
}
19+
20+
func parseTime(value string) int64 {
21+
timestamp, _ := strconv.ParseInt(value, 10, 64)
22+
return timestamp
23+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ require (
149149
)
150150

151151
require (
152-
github.com/OpenListTeam/115-sdk-go v0.2.5
152+
github.com/OpenListTeam/115-sdk-go v0.2.6
153153
github.com/STARRY-S/zip v0.2.3 // indirect
154154
github.com/aymerick/douceur v0.2.0 // indirect
155155
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
@@ -37,6 +37,8 @@ github.com/OpenListTeam/115-sdk-go v0.2.4 h1:dVoEz3Pm996n/ZCuRckQvz36w938uNHjPrS
3737
github.com/OpenListTeam/115-sdk-go v0.2.4/go.mod h1:cfvitk2lwe6036iNi2h+iNxwxWDifKZsSvNtrur5BqU=
3838
github.com/OpenListTeam/115-sdk-go v0.2.5 h1:E4O7GZmEXlGnouZ/e9//xU7NepT9JJkWtnF3O/VSb08=
3939
github.com/OpenListTeam/115-sdk-go v0.2.5/go.mod h1:cfvitk2lwe6036iNi2h+iNxwxWDifKZsSvNtrur5BqU=
40+
github.com/OpenListTeam/115-sdk-go v0.2.6 h1:ehXyStvncvn4qRBuknor3kyGZtUmHc0+stjF2ByVdFo=
41+
github.com/OpenListTeam/115-sdk-go v0.2.6/go.mod h1:cfvitk2lwe6036iNi2h+iNxwxWDifKZsSvNtrur5BqU=
4042
github.com/OpenListTeam/go-cache v0.1.0 h1:eV2+FCP+rt+E4OCJqLUW7wGccWZNJMV0NNkh+uChbAI=
4143
github.com/OpenListTeam/go-cache v0.1.0/go.mod h1:AHWjKhNK3LE4rorVdKyEALDHoeMnP8SjiNyfVlB+Pz4=
4244
github.com/OpenListTeam/gsync v0.1.0 h1:ywzGybOvA3lW8K1BUjKZ2IUlT2FSlzPO4DOazfYXjcs=

0 commit comments

Comments
 (0)