Implement sussing out metadata about individual mods
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:rimworld_modman/modloader.dart';
|
||||
|
||||
void main() {
|
||||
ModList(path: modsRoot).load();
|
||||
ConfigFile(path: configPath).load();
|
||||
// runApp(const RimWorldModManager());
|
||||
}
|
||||
|
@@ -30,17 +30,94 @@ class Mod {
|
||||
required this.incompatabilities,
|
||||
required this.enabled,
|
||||
});
|
||||
|
||||
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;
|
||||
final name = metadata.findElements('name').first.innerText;
|
||||
final id = metadata.findElements('packageId').first.innerText.toLowerCase();
|
||||
final versions =
|
||||
metadata
|
||||
.findElements('supportedVersions')
|
||||
.first
|
||||
.findElements('li')
|
||||
.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();
|
||||
|
||||
return Mod(
|
||||
name: name,
|
||||
id: id,
|
||||
path: path,
|
||||
versions: versions,
|
||||
description: description,
|
||||
hardDependencies: hardDependencies,
|
||||
softDependencies: softDependencies,
|
||||
incompatabilities: incompatabilities,
|
||||
enabled: false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ModList {
|
||||
final String path;
|
||||
final List<Mod> mods;
|
||||
List<Mod> mods = [];
|
||||
|
||||
ModList({required this.path, this.mods = const []});
|
||||
ModList({required this.path});
|
||||
|
||||
void load() {
|
||||
final file = File(path);
|
||||
final directory = Directory(path);
|
||||
print('Loading configuration from: $path');
|
||||
|
||||
if (directory.existsSync()) {
|
||||
final List<FileSystemEntity> entities = directory.listSync();
|
||||
final List<String> modDirectories =
|
||||
entities.whereType<Directory>().map((dir) => dir.path).toList();
|
||||
|
||||
print('Found ${modDirectories.length} mod directories:');
|
||||
for (final modDir in modDirectories) {
|
||||
try {
|
||||
final mod = Mod.fromDirectory(modDir);
|
||||
mods.add(mod);
|
||||
print(
|
||||
'Loaded mod: ${mod.name} (ID: ${mod.id}) from directory: $modDir. '
|
||||
'Description: ${mod.description}, '
|
||||
'Hard Dependencies: ${mod.hardDependencies.join(', ')}, '
|
||||
'Soft Dependencies: ${mod.softDependencies.join(', ')}, '
|
||||
'Incompatibilities: ${mod.incompatabilities.join(', ')}',
|
||||
);
|
||||
print('Current total mods loaded: ${mods.length}');
|
||||
} catch (e) {
|
||||
print('Error loading mod from directory: $modDir');
|
||||
print('Error: $e');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print('Mods root directory does not exist: $modsRoot');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user