diff --git a/backend/onedrive/onedrive.go b/backend/onedrive/onedrive.go index ffca73dbe..290c59220 100644 --- a/backend/onedrive/onedrive.go +++ b/backend/onedrive/onedrive.go @@ -1377,9 +1377,27 @@ func (f *Fs) itemToDirEntry(ctx context.Context, dir string, info *api.Item) (en // This should return ErrDirNotFound if the directory isn't // found. func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err error) { + return list.WithListP(ctx, dir, f) +} + +// ListP lists the objects and directories of the Fs starting +// from dir non recursively into out. +// +// dir should be "" to start from the root, and should not +// have trailing slashes. +// +// This should return ErrDirNotFound if the directory isn't +// found. +// +// It should call callback for each tranche of entries read. +// These need not be returned in any particular order. If +// callback returns an error then the listing will stop +// immediately. +func (f *Fs) ListP(ctx context.Context, dir string, callback fs.ListRCallback) error { + list := list.NewHelper(callback) directoryID, err := f.dirCache.FindDir(ctx, dir, false) if err != nil { - return nil, err + return err } err = f.listAll(ctx, directoryID, false, false, func(info *api.Item) error { entry, err := f.itemToDirEntry(ctx, dir, info) @@ -1389,13 +1407,16 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e if entry == nil { return nil } - entries = append(entries, entry) + err = list.Add(entry) + if err != nil { + return err + } return nil }) if err != nil { - return nil, err + return err } - return entries, nil + return list.Flush() } // ListR lists the objects and directories of the Fs starting @@ -3023,6 +3044,7 @@ var ( _ fs.PublicLinker = (*Fs)(nil) _ fs.CleanUpper = (*Fs)(nil) _ fs.ListRer = (*Fs)(nil) + _ fs.ListPer = (*Fs)(nil) _ fs.Shutdowner = (*Fs)(nil) _ fs.Object = (*Object)(nil) _ fs.MimeTyper = &Object{}