Skip to content

Commit 17b42b9

Browse files
authored
fix(mega): use newest file for same filename (#8422 close #8344)
Mega supports duplicate names but alist does not support. In `List()` method, driver will return multiple files with same name. That makes alist to use oldest version file for listing/downloading. So it is necessary to filter old same name files in a folder. After fixes, all CRUD work normally. Refs #8344
1 parent 41bdab4 commit 17b42b9

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

drivers/mega/driver.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,22 @@ func (d *Mega) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]
5656
if err != nil {
5757
return nil, err
5858
}
59-
res := make([]model.Obj, 0)
59+
fn := make(map[string]model.Obj)
6060
for i := range nodes {
6161
n := nodes[i]
62-
if n.GetType() == mega.FILE || n.GetType() == mega.FOLDER {
63-
res = append(res, &MegaNode{n})
62+
if n.GetType() != mega.FILE && n.GetType() != mega.FOLDER {
63+
continue
64+
}
65+
if _, ok := fn[n.GetName()]; !ok {
66+
fn[n.GetName()] = &MegaNode{n}
67+
} else if sameNameObj := fn[n.GetName()]; (&MegaNode{n}).ModTime().After(sameNameObj.ModTime()) {
68+
fn[n.GetName()] = &MegaNode{n}
6469
}
6570
}
71+
res := make([]model.Obj, 0)
72+
for _, v := range fn {
73+
res = append(res, v)
74+
}
6675
return res, nil
6776
}
6877
log.Errorf("can't convert: %+v", dir)

0 commit comments

Comments
 (0)