list method
Implementation
@override
Future<List<EagleSourceEntry>> list(EaglePath directory) async {
try {
final candidate = _lexical(directory);
final type = await FileSystemEntity.type(candidate, followLinks: false);
if (type == FileSystemEntityType.notFound) {
throw EagleSourceException('Directory does not exist: $directory');
}
final resolved = await _resolvedContained(candidate, type);
final entries = <EagleSourceEntry>[];
await for (final entity in Directory(resolved).list(followLinks: false)) {
final entityType = await FileSystemEntity.type(
entity.path,
followLinks: false,
);
final targetType = entityType == FileSystemEntityType.link
? await FileSystemEntity.type(entity.path)
: entityType;
await _resolvedContained(entity.path, entityType);
if (targetType != FileSystemEntityType.file &&
targetType != FileSystemEntityType.directory) {
continue;
}
final name = p.basename(entity.path);
final path = directory.isRoot
? EaglePath.parse(name)
: directory.child(name);
entries.add(
EagleSourceEntry(
name: name,
path: path,
kind: targetType == FileSystemEntityType.directory
? EagleSourceEntryKind.directory
: EagleSourceEntryKind.file,
),
);
}
entries.sort((left, right) => left.name.compareTo(right.name));
return List<EagleSourceEntry>.unmodifiable(entries);
} on EagleSourceException {
rethrow;
} catch (error) {
throw EagleSourceException('Directory cannot be listed.', cause: error);
}
}