Also figure out the size of mods

This commit is contained in:
2025-03-15 22:36:31 +01:00
parent 566175958f
commit 2fa32d3713

View File

@@ -18,6 +18,7 @@ class Mod {
final List<String> incompatabilities; // ModMetaData.incompatibleWith final List<String> incompatabilities; // ModMetaData.incompatibleWith
final bool final bool
enabled; // ConfigFile.mods.firstWhere((mod) => mod.id == id).enabled enabled; // ConfigFile.mods.firstWhere((mod) => mod.id == id).enabled
final int size; // Count of files in the mod directory
Mod({ Mod({
required this.name, required this.name,
@@ -29,10 +30,10 @@ class Mod {
required this.softDependencies, required this.softDependencies,
required this.incompatabilities, required this.incompatabilities,
required this.enabled, required this.enabled,
required this.size,
}); });
static Mod fromDirectory(String path) { static Mod fromDirectory(String path) {
final directory = Directory(path);
final aboutFile = File('$path/About/About.xml'); final aboutFile = File('$path/About/About.xml');
final aboutXml = XmlDocument.parse(aboutFile.readAsStringSync()); final aboutXml = XmlDocument.parse(aboutFile.readAsStringSync());
final metadata = aboutXml.findElements('ModMetaData').first; final metadata = aboutXml.findElements('ModMetaData').first;
@@ -46,27 +47,60 @@ class Mod {
.map((e) => e.innerText) .map((e) => e.innerText)
.toList(); .toList();
final description = metadata.findElements('description').first.innerText; final description = metadata.findElements('description').first.innerText;
final hardDependencies =
List<String> hardDependencies = [];
try {
hardDependencies =
metadata metadata
.findElements('modDependenciesByVersion') .findElements('modDependenciesByVersion')
.last .last
.findElements('li') .findElements('li')
.map((e) => e.findElements('packageId').first.innerText.toLowerCase()) .map(
(e) =>
e.findElements('packageId').first.innerText.toLowerCase(),
)
.toList(); .toList();
final softDependencies = } catch (e) {
print('$name has no hard dependencies');
}
List<String> softDependencies = [];
try {
softDependencies =
metadata metadata
.findElements('loadAfter') .findElements('loadAfter')
.first .first
.findElements('li') .findElements('li')
.map((e) => e.innerText.toLowerCase()) .map((e) => e.innerText.toLowerCase())
.toList(); .toList();
final incompatabilities = } catch (e) {
print('$name has no soft dependencies');
}
List<String> incompatabilities = [];
try {
incompatabilities =
metadata metadata
.findElements('incompatibleWith') .findElements('incompatibleWith')
.first .first
.findElements('li') .findElements('li')
.map((e) => e.innerText.toLowerCase()) .map((e) => e.innerText.toLowerCase())
.toList(); .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( return Mod(
name: name, name: name,
@@ -78,13 +112,14 @@ class Mod {
softDependencies: softDependencies, softDependencies: softDependencies,
incompatabilities: incompatabilities, incompatabilities: incompatabilities,
enabled: false, enabled: false,
size: size,
); );
} }
} }
class ModList { class ModList {
final String path; final String path;
List<Mod> mods = []; Map<String, Mod> mods = {};
ModList({required this.path}); ModList({required this.path});
@@ -101,10 +136,10 @@ class ModList {
for (final modDir in modDirectories) { for (final modDir in modDirectories) {
try { try {
final mod = Mod.fromDirectory(modDir); final mod = Mod.fromDirectory(modDir);
mods.add(mod); mods[mod.id] = mod;
print( print(
'Loaded mod: ${mod.name} (ID: ${mod.id}) from directory: $modDir. ' 'Loaded mod: ${mod.name} (ID: ${mod.id}) from directory: $modDir. '
'Description: ${mod.description}, ' 'Size: ${mod.size}, '
'Hard Dependencies: ${mod.hardDependencies.join(', ')}, ' 'Hard Dependencies: ${mod.hardDependencies.join(', ')}, '
'Soft Dependencies: ${mod.softDependencies.join(', ')}, ' 'Soft Dependencies: ${mod.softDependencies.join(', ')}, '
'Incompatibilities: ${mod.incompatabilities.join(', ')}', 'Incompatibilities: ${mod.incompatabilities.join(', ')}',
@@ -147,7 +182,7 @@ class ConfigFile {
print('Found ${mods.length} active mods.'); print('Found ${mods.length} active mods.');
for (final mod in mods) { for (final mod in mods) {
print('Mod found: ${mod.innerText}'); // print('Mod found: ${mod.innerText}');
} }
} }
} }