diff options
author | Orangerot <purple@orangerot.dev> | 2025-01-14 16:26:57 +0100 |
---|---|---|
committer | Orangerot <purple@orangerot.dev> | 2025-01-14 16:26:57 +0100 |
commit | 28d0fe7d8c3a38d7c2ded86c30b549ed6be48f3c (patch) | |
tree | 1eef2ccbf39dda7f5981b8a763c8de5b4461d4ec /lib/screens/level_selection.dart | |
parent | 94463a490c039d79a7a5fcd642c0ed2411a509cd (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.dart | 28 |
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 []; |