directories method

  1. @override
Future<List<String>> directories([
  1. String? directory,
  2. bool recursive = false
])

Get all of the directories within a given directory.

Implementation

@override
Future<List<String>> directories([
  String? directory,
  bool recursive = false,
]) async {
  final listing = await _list(
    prefix: _directoryKey(directory ?? ''),
    delimiter: recursive ? null : '/',
  );
  if (!recursive) {
    final directories = listing.delimitedPrefixes
        .map(_relativeKey)
        .map(_trimTrailingSlash)
        .where((key) => key.isNotEmpty)
        .toList(growable: false);
    directories.sort();
    return directories;
  }

  final result = <String>{};
  final requestedDirectory = resolve(directory ?? '');
  for (final object in listing.objects) {
    final relative = _trimTrailingSlash(_relativeKey(object.key));
    if (relative.isEmpty) continue;
    final segments = relative.split('/');
    final directoryCount = object.key.endsWith('/')
        ? segments.length
        : segments.length - 1;
    for (var index = 1; index <= directoryCount; index++) {
      final candidate = segments.take(index).join('/');
      if (candidate != requestedDirectory) result.add(candidate);
    }
  }
  final sorted = result.toList()..sort();
  return sorted;
}