Also figure out the size of mods
This commit is contained in:
@@ -18,6 +18,7 @@ class Mod {
|
||||
final List<String> 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<String> 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<String> softDependencies = [];
|
||||
try {
|
||||
softDependencies =
|
||||
metadata
|
||||
.findElements('loadAfter')
|
||||
.first
|
||||
.findElements('li')
|
||||
.map((e) => e.innerText.toLowerCase())
|
||||
.toList();
|
||||
} catch (e) {
|
||||
print('$name has no soft dependencies');
|
||||
}
|
||||
|
||||
List<String> 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<Mod> mods = [];
|
||||
Map<String, Mod> 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}');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user