list method

  1. @override
Stream<CloudStorageItem> list(
  1. String prefix, {
  2. bool recursive = false,
})
override

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,
      );
    }
  }
}