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 configRoot = '$root/AppData/RimWorld by Ludeon Studios/Config';
|
||||||
const configPath = '$configRoot/ModsConfig.xml';
|
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 {
|
class Mod {
|
||||||
final String name; // ModMetaData.name
|
final String name; // ModMetaData.name
|
||||||
final String id; // ModMetaData.packageId
|
final String id; // ModMetaData.packageId
|
||||||
@@ -35,18 +48,59 @@ class Mod {
|
|||||||
|
|
||||||
static Mod fromDirectory(String path) {
|
static Mod fromDirectory(String path) {
|
||||||
final aboutFile = File('$path/About/About.xml');
|
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 aboutXml = XmlDocument.parse(aboutFile.readAsStringSync());
|
||||||
final metadata = aboutXml.findElements('ModMetaData').first;
|
|
||||||
final name = metadata.findElements('name').first.innerText;
|
late final XmlElement metadata;
|
||||||
final id = metadata.findElements('packageId').first.innerText.toLowerCase();
|
try {
|
||||||
final versions =
|
metadata = findCaseInsensitiveDoc(aboutXml, 'ModMetaData');
|
||||||
metadata
|
} catch (e) {
|
||||||
.findElements('supportedVersions')
|
throw Exception(
|
||||||
.first
|
'Error: ModMetaData element is missing in About.xml ($aboutFile). Original error: $e',
|
||||||
.findElements('li')
|
);
|
||||||
.map((e) => e.innerText)
|
}
|
||||||
.toList();
|
|
||||||
final description = metadata.findElements('description').first.innerText;
|
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 = [];
|
List<String> hardDependencies = [];
|
||||||
try {
|
try {
|
||||||
|
Reference in New Issue
Block a user