fix(mega): use newest file for same filename

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
This commit is contained in:
gdm257 2025-04-21 18:40:40 +09:00
parent 41bdab49aa
commit d345fc2c32
No known key found for this signature in database

View File

@ -56,12 +56,21 @@ func (d *Mega) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]
if err != nil {
return nil, err
}
res := make([]model.Obj, 0)
fn := make(map[string]model.Obj)
for i := range nodes {
n := nodes[i]
if n.GetType() == mega.FILE || n.GetType() == mega.FOLDER {
res = append(res, &MegaNode{n})
if n.GetType() != mega.FILE && n.GetType() != mega.FOLDER {
continue
}
if _, ok := fn[n.GetName()]; !ok {
fn[n.GetName()] = &MegaNode{n}
} else if sameNameObj := fn[n.GetName()]; (&MegaNode{n}).ModTime().After(sameNameObj.ModTime()) {
fn[n.GetName()] = &MegaNode{n}
}
}
res := make([]model.Obj, 0)
for _, v := range fn {
res = append(res, v)
}
return res, nil
}