diff --git a/api_directory.go b/api_directory.go index 61d5cb4..f801758 100644 --- a/api_directory.go +++ b/api_directory.go @@ -62,7 +62,7 @@ func (s *Service) HandleListDirectory( limit := req.QueryInt("limit") newPath := utils.NormalizePath(path) - rawEntries, moreAvailable, err := s.FileSystemManager.ListDirectoryEntries( + rawEntries, moreAvailable, lastFileName, err := s.FileSystemManager.ListDirectoryEntries( context.Background(), utils.FullPath(newPath), startFileName, @@ -92,7 +92,7 @@ func (s *Service) HandleListDirectory( } } result.Entries = entries - result.LastFileName = entries[len(entries)-1].Name + result.LastFileName = lastFileName } return resp.OK(result).JSON() diff --git a/engine/filesystem_manager.go b/engine/filesystem_manager.go index c1ff914..a286f86 100644 --- a/engine/filesystem_manager.go +++ b/engine/filesystem_manager.go @@ -88,11 +88,11 @@ func (f *FileSystemManager) MakeDirectory(ctx context.Context, path utils.FullPa return f.meta.InsertEntry(ctx, entry) } -func (f *FileSystemManager) ListDirectoryEntries(ctx context.Context, p utils.FullPath, startFileName string, inclusive bool, limit int64) (entries []*utils.Entry, hasMore bool, err error) { +func (f *FileSystemManager) ListDirectoryEntries(ctx context.Context, p utils.FullPath, startFileName string, inclusive bool, limit int64) (entries []*utils.Entry, hasMore bool, lastFileName string, err error) { f.RLock() defer f.RUnlock() - _, err = f.StreamListDirectoryEntries(ctx, p, startFileName, inclusive, limit+1, func(entry *utils.Entry) bool { + lastFileName, err = f.StreamListDirectoryEntries(ctx, p, startFileName, inclusive, limit+1, func(entry *utils.Entry) bool { entries = append(entries, entry) return true }) @@ -102,7 +102,7 @@ func (f *FileSystemManager) ListDirectoryEntries(ctx context.Context, p utils.Fu entries = entries[:limit] } - return entries, hasMore, err + return entries, hasMore, lastFileName, err } func (f *FileSystemManager) StreamListDirectoryEntries(ctx context.Context, p utils.FullPath, startFileName string, inclusive bool, limit int64, eachEntryFunc meta.ListEachEntryFunc) (lastFileName string, err error) {