From 2fa32d371315e6e376413d344801476cb0302bde Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sat, 15 Mar 2025 22:36:31 +0100 Subject: [PATCH] Also figure out the size of mods --- lib/modloader.dart | 87 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 26 deletions(-) diff --git a/lib/modloader.dart b/lib/modloader.dart index 71afa24..2f89812 100644 --- a/lib/modloader.dart +++ b/lib/modloader.dart @@ -18,6 +18,7 @@ class Mod { final List incompatabilities; // ModMetaData.incompatibleWith final bool enabled; // ConfigFile.mods.firstWhere((mod) => mod.id == id).enabled + final int size; // Count of files in the mod directory Mod({ required this.name, @@ -29,10 +30,10 @@ class Mod { required this.softDependencies, required this.incompatabilities, required this.enabled, + required this.size, }); static Mod fromDirectory(String path) { - final directory = Directory(path); final aboutFile = File('$path/About/About.xml'); final aboutXml = XmlDocument.parse(aboutFile.readAsStringSync()); final metadata = aboutXml.findElements('ModMetaData').first; @@ -46,27 +47,60 @@ class Mod { .map((e) => e.innerText) .toList(); final description = metadata.findElements('description').first.innerText; - final hardDependencies = - metadata - .findElements('modDependenciesByVersion') - .last - .findElements('li') - .map((e) => e.findElements('packageId').first.innerText.toLowerCase()) - .toList(); - final softDependencies = - metadata - .findElements('loadAfter') - .first - .findElements('li') - .map((e) => e.innerText.toLowerCase()) - .toList(); - final incompatabilities = - metadata - .findElements('incompatibleWith') - .first - .findElements('li') - .map((e) => e.innerText.toLowerCase()) - .toList(); + + List hardDependencies = []; + try { + hardDependencies = + metadata + .findElements('modDependenciesByVersion') + .last + .findElements('li') + .map( + (e) => + e.findElements('packageId').first.innerText.toLowerCase(), + ) + .toList(); + } catch (e) { + print('$name has no hard dependencies'); + } + + List softDependencies = []; + try { + softDependencies = + metadata + .findElements('loadAfter') + .first + .findElements('li') + .map((e) => e.innerText.toLowerCase()) + .toList(); + } catch (e) { + print('$name has no soft dependencies'); + } + + List incompatabilities = []; + try { + incompatabilities = + metadata + .findElements('incompatibleWith') + .first + .findElements('li') + .map((e) => e.innerText.toLowerCase()) + .toList(); + } catch (e) { + print('$name has no incompatabilities'); + } + + final size = + Directory(path) + .listSync(recursive: true) + .where( + (entity) => + !entity.path + .split(Platform.pathSeparator) + .last + .startsWith('.'), + ) + .length; return Mod( name: name, @@ -78,13 +112,14 @@ class Mod { softDependencies: softDependencies, incompatabilities: incompatabilities, enabled: false, + size: size, ); } } class ModList { final String path; - List mods = []; + Map mods = {}; ModList({required this.path}); @@ -101,10 +136,10 @@ class ModList { for (final modDir in modDirectories) { try { final mod = Mod.fromDirectory(modDir); - mods.add(mod); + mods[mod.id] = mod; print( 'Loaded mod: ${mod.name} (ID: ${mod.id}) from directory: $modDir. ' - 'Description: ${mod.description}, ' + 'Size: ${mod.size}, ' 'Hard Dependencies: ${mod.hardDependencies.join(', ')}, ' 'Soft Dependencies: ${mod.softDependencies.join(', ')}, ' 'Incompatibilities: ${mod.incompatabilities.join(', ')}', @@ -147,7 +182,7 @@ class ConfigFile { print('Found ${mods.length} active mods.'); for (final mod in mods) { - print('Mod found: ${mod.innerText}'); + // print('Mod found: ${mod.innerText}'); } } }