Fix up case insensitive modders
This commit is contained in:
@@ -6,6 +6,19 @@ const modsRoot = '$root/294100';
|
||||
const configRoot = '$root/AppData/RimWorld by Ludeon Studios/Config';
|
||||
const configPath = '$configRoot/ModsConfig.xml';
|
||||
|
||||
XmlElement findCaseInsensitive(XmlElement element, String name) {
|
||||
return element.childElements.firstWhere(
|
||||
(e) => e.name.local.toLowerCase() == name,
|
||||
);
|
||||
}
|
||||
|
||||
XmlElement findCaseInsensitiveDoc(XmlDocument document, String name) {
|
||||
name = name.toLowerCase();
|
||||
return document.childElements.firstWhere(
|
||||
(e) => e.name.local.toLowerCase() == name,
|
||||
);
|
||||
}
|
||||
|
||||
class Mod {
|
||||
final String name; // ModMetaData.name
|
||||
final String id; // ModMetaData.packageId
|
||||
@@ -35,18 +48,59 @@ class Mod {
|
||||
|
||||
static Mod fromDirectory(String path) {
|
||||
final aboutFile = File('$path/About/About.xml');
|
||||
if (!aboutFile.existsSync()) {
|
||||
throw Exception('About.xml file does not exist in $aboutFile');
|
||||
}
|
||||
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;
|
||||
|
||||
late final XmlElement metadata;
|
||||
try {
|
||||
metadata = findCaseInsensitiveDoc(aboutXml, 'ModMetaData');
|
||||
} catch (e) {
|
||||
throw Exception(
|
||||
'Error: ModMetaData element is missing in About.xml ($aboutFile). Original error: $e',
|
||||
);
|
||||
}
|
||||
|
||||
late final String name;
|
||||
try {
|
||||
name = metadata.findElements('name').first.innerText;
|
||||
} catch (e) {
|
||||
throw Exception(
|
||||
'Error: name element is missing in ModMetaData ($aboutFile). Original error: $e',
|
||||
);
|
||||
}
|
||||
|
||||
late final String id;
|
||||
try {
|
||||
id = metadata.findElements('packageId').first.innerText.toLowerCase();
|
||||
} catch (e) {
|
||||
throw Exception(
|
||||
'Error: packageId element is missing in ModMetaData ($aboutFile). Original error: $e',
|
||||
);
|
||||
}
|
||||
|
||||
late final List<String> versions;
|
||||
try {
|
||||
versions =
|
||||
metadata
|
||||
.findElements('supportedVersions')
|
||||
.first
|
||||
.findElements('li')
|
||||
.map((e) => e.innerText)
|
||||
.toList();
|
||||
} catch (e) {
|
||||
throw Exception(
|
||||
'Error: supportedVersions or li elements are missing in ModMetaData ($aboutFile). Original error: $e',
|
||||
);
|
||||
}
|
||||
|
||||
String description = '';
|
||||
try {
|
||||
description = metadata.findElements('description').first.innerText;
|
||||
} catch (e) {
|
||||
print('$name has no description');
|
||||
}
|
||||
|
||||
List<String> hardDependencies = [];
|
||||
try {
|
||||
|
Reference in New Issue
Block a user