directories method
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;
}