summaryrefslogtreecommitdiff
path: root/lib/screens/level_selection.dart
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2025-01-14 16:26:57 +0100
committerOrangerot <purple@orangerot.dev>2025-01-14 16:26:57 +0100
commit28d0fe7d8c3a38d7c2ded86c30b549ed6be48f3c (patch)
tree1eef2ccbf39dda7f5981b8a763c8de5b4461d4ec /lib/screens/level_selection.dart
parent94463a490c039d79a7a5fcd642c0ed2411a509cd (diff)
feat: show duration in level selection + more robust simfile loader
Diffstat (limited to 'lib/screens/level_selection.dart')
-rw-r--r--lib/screens/level_selection.dart28
1 files changed, 18 insertions, 10 deletions
diff --git a/lib/screens/level_selection.dart b/lib/screens/level_selection.dart
index 41eb4f7..7241ad7 100644
--- a/lib/screens/level_selection.dart
+++ b/lib/screens/level_selection.dart
@@ -62,16 +62,24 @@ class _LevelSelectionState extends State<LevelSelection> {
try {
// List all files and folders in the directory
List<Simfile> simfiles = directory
- .listSync()
- .where((entity) => FileSystemEntity.isDirectorySync(entity.path))
- .map((entity) {
- Simfile simfile = Simfile(entity.path);
- simfile.load();
- return simfile;
- }).toList();
- simfiles.sort((a, b) => a.tags['TITLE']!.compareTo(b.tags['TITLE']!));
-
- return simfiles;
+ .listSync(recursive: true)
+ .where((entity) => entity.path.endsWith('.sm'))
+ .map((entity) => Simfile(entity.path))
+ .toList();
+
+ List<bool> successfullLoads =
+ await Future.wait(simfiles.map((simfile) => simfile.load()));
+ List<Simfile> simfilesFiltered = [];
+ for (int i = 0; i < simfiles.length; i++) {
+ if (successfullLoads[i]) {
+ simfilesFiltered.add(simfiles[i]);
+ }
+ }
+
+ simfilesFiltered
+ .sort((a, b) => a.tags['TITLE']!.compareTo(b.tags['TITLE']!));
+
+ return simfilesFiltered;
} catch (e) {
print("Error reading directory: $e");
return [];