list method

  1. @override
Future<Result<List<VfsEntry>>> list(
  1. String path, {
  2. bool recursive = false,
})
override

Lists the entries directly (or, when recursive, transitively) under path.

Implementation

@override
Future<Result<List<VfsEntry>>> list(
  String path, {
  bool recursive = false,
}) async {
  if (_listResults.isNotEmpty) {
    return _listResults.removeFirst();
  }
  final String normalized = normalizePath(path);
  if (!_directories.contains(normalized)) {
    return _notFound<List<VfsEntry>>('list', normalized);
  }
  final String prefix = normalized == '/' ? '/' : '$normalized/';
  final List<VfsEntry> entries = <VfsEntry>[
    for (final String directory in _directories)
      if (directory != normalized &&
          directory.startsWith(prefix) &&
          (recursive || !_relative(directory, prefix).contains('/')))
        VfsEntry(
          path: directory,
          type: VfsEntryType.directory,
          size: 0,
          modifiedAt: modifiedAt,
        ),
    for (final MapEntry<String, List<int>> file in _files.entries)
      if (file.key.startsWith(prefix) &&
          (recursive || !_relative(file.key, prefix).contains('/')))
        VfsEntry(
          path: file.key,
          type: VfsEntryType.file,
          size: file.value.length,
          modifiedAt: modifiedAt,
        ),
  ]..sort((VfsEntry left, VfsEntry right) => left.path.compareTo(right.path));
  return Ok<List<VfsEntry>>(List<VfsEntry>.unmodifiable(entries));
}