From 9576a99a4e14de804cdae66afbb4168af531c6fd Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Mon, 14 Nov 2022 12:56:52 -0500 Subject: [PATCH] More efficient loading (addresses #110) --- lib/providers/apps_provider.dart | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 382a04f..87b49d6 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -424,22 +424,28 @@ class AppsProvider with ChangeNotifier { } loadingApps = true; notifyListeners(); - List appFiles = (await getAppsDir()) + List newApps = (await getAppsDir()) .listSync() .where((item) => item.path.toLowerCase().endsWith('.json')) + .map((e) => App.fromJson(jsonDecode(File(e.path).readAsStringSync()))) .toList(); - apps.clear(); + var idsToDelete = apps.values + .map((e) => e.app.id) + .toSet() + .difference(newApps.map((e) => e.id).toSet()); + for (var id in idsToDelete) { + apps.remove(id); + } var sp = SourceProvider(); List> errors = []; - for (int i = 0; i < appFiles.length; i++) { - App app = - App.fromJson(jsonDecode(File(appFiles[i].path).readAsStringSync())); - var info = await getInstalledInfo(app.id); + for (int i = 0; i < newApps.length; i++) { + var info = await getInstalledInfo(newApps[i].id); try { - sp.getSource(app.url); - apps.putIfAbsent(app.id, () => AppInMemory(app, null, info)); + sp.getSource(newApps[i].url); + apps.putIfAbsent( + newApps[i].id, () => AppInMemory(newApps[i], null, info)); } catch (e) { - errors.add([app.id, app.name, e.toString()]); + errors.add([newApps[i].id, newApps[i].name, e.toString()]); } } if (errors.isNotEmpty) {