list method
List remote entries beneath a prefix.
Implementation
@override
Stream<CloudStorageItem> list(
String prefix, {
bool recursive = false,
}) async* {
final keyPrefix = _fullKey(prefix);
final relativePrefix = keyPrefix.isEmpty ? '' : _relativePath(keyPrefix);
final stream = keyPrefix.isEmpty
? client.listObjects(bucket, recursive: recursive)
: client.listObjects(bucket, prefix: keyPrefix, recursive: recursive);
await for (final result in stream) {
for (final obj in result.objects) {
final key = obj.key;
if (key == null) {
continue;
}
final relative = _relativePath(key);
if (relative.isEmpty) {
continue;
}
final trimmed = relativePrefix.isEmpty
? relative
: relative.replaceFirst(RegExp('^$relativePrefix'), '');
final normalized = trimmed.replaceFirst(RegExp('^/+'), '');
if (normalized.isEmpty) {
continue;
}
final isDirectory = key.endsWith('/');
yield CloudStorageItem(
path: normalized,
isDirectory: isDirectory,
size: obj.size,
modified: obj.lastModified,
);
}
}
}