From 28d0fe7d8c3a38d7c2ded86c30b549ed6be48f3c Mon Sep 17 00:00:00 2001 From: Orangerot Date: Tue, 14 Jan 2025 16:26:57 +0100 Subject: feat: show duration in level selection + more robust simfile loader --- lib/screens/level_selection.dart | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'lib/screens/level_selection.dart') 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 { try { // List all files and folders in the directory List 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 successfullLoads = + await Future.wait(simfiles.map((simfile) => simfile.load())); + List 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 []; -- cgit v1.2.3