From d951f235459dc4ec403ef4e465c495e9b0b406eb Mon Sep 17 00:00:00 2001
From: ManlyMarco <39247311+ManlyMarco@users.noreply.github.com>
Date: Fri, 17 Nov 2023 21:24:33 +0100
Subject: [PATCH] [Sideloader] Trim all GUIDs (fixes regression from 18.2) This
will fix failing to resolve mods with GUIDs that start or end with spaces
---
.../Core.Sideloader.ListLoader.cs | 2 +-
.../Core.Sideloader.Manifest.cs | 2 +-
src/Core_Sideloader/Core.Sideloader.cs | 4 +-
.../Core.UAR.MigrationInfo.cs | 8 ++--
.../Core.UAR.ResolveInfo.cs | 10 ++++-
.../UniversalAutoResolver/Core.UAR.cs | 42 ++++++++++++++-----
.../Core.UAR.Studio.StudioResolveInfo.cs | 9 +++-
.../UniversalAutoResolver/Core.UAR.Studio.cs | 16 +++----
8 files changed, 66 insertions(+), 27 deletions(-)
diff --git a/src/Core_Sideloader/Core.Sideloader.ListLoader.cs b/src/Core_Sideloader/Core.Sideloader.ListLoader.cs
index 113af389..93f420c9 100644
--- a/src/Core_Sideloader/Core.Sideloader.ListLoader.cs
+++ b/src/Core_Sideloader/Core.Sideloader.ListLoader.cs
@@ -181,7 +181,7 @@ internal static void LoadCheckItemList()
var checkItemList = checkItemListXML.Element("checkitem");
foreach (var modElement in checkItemList.Elements("mod"))
{
- string guid = modElement.Attribute("guid")?.Value;
+ string guid = modElement.Attribute("guid")?.Value?.Trim();
if (!string.IsNullOrEmpty(guid))
{
foreach (var categoryElement in modElement.Elements("category"))
diff --git a/src/Core_Sideloader/Core.Sideloader.Manifest.cs b/src/Core_Sideloader/Core.Sideloader.Manifest.cs
index a41aa4fd..d1708130 100644
--- a/src/Core_Sideloader/Core.Sideloader.Manifest.cs
+++ b/src/Core_Sideloader/Core.Sideloader.Manifest.cs
@@ -125,7 +125,7 @@ public Manifest(int schemaVer, string guid, string name, string version, string
)
{
SchemaVer = schemaVer;
- GUID = guid;
+ GUID = guid?.Trim();
Name = name;
Version = version;
Author = author;
diff --git a/src/Core_Sideloader/Core.Sideloader.cs b/src/Core_Sideloader/Core.Sideloader.cs
index ec73feb1..deb7cadb 100644
--- a/src/Core_Sideloader/Core.Sideloader.cs
+++ b/src/Core_Sideloader/Core.Sideloader.cs
@@ -486,7 +486,9 @@ public static bool IsPngFolderOnly(string assetBundleName)
/// Manifest of the loaded mod or null if mod is not loaded.
public static Manifest GetManifest(string guid)
{
- if (string.IsNullOrEmpty(guid)) return null;
+ if (guid == null) return null;
+ guid = guid.Trim();
+ if (guid.Length == 0) return null;
Manifests.TryGetValue(guid, out Manifest manifest);
return manifest;
diff --git a/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.MigrationInfo.cs b/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.MigrationInfo.cs
index ce178e30..4680a608 100644
--- a/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.MigrationInfo.cs
+++ b/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.MigrationInfo.cs
@@ -47,8 +47,8 @@ public MigrationInfo(MigrationType migrationType, ChaListDefine.CategoryNo categ
{
MigrationType = migrationType;
Category = category;
- GUIDOld = guidOld;
- GUIDNew = guidNew;
+ GUIDOld = guidOld?.Trim();
+ GUIDNew = guidNew?.Trim();
IDOld = idOld;
IDNew = idNew;
}
@@ -56,8 +56,8 @@ public MigrationInfo(MigrationType migrationType, ChaListDefine.CategoryNo categ
public MigrationInfo(MigrationType migrationType, string guidOld, string guidNew)
{
MigrationType = migrationType;
- GUIDOld = guidOld;
- GUIDNew = guidNew;
+ GUIDOld = guidOld?.Trim();
+ GUIDNew = guidNew?.Trim();
}
}
}
diff --git a/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.ResolveInfo.cs b/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.ResolveInfo.cs
index c2e10e1b..99c1c2f4 100644
--- a/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.ResolveInfo.cs
+++ b/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.ResolveInfo.cs
@@ -13,11 +13,19 @@ namespace Sideloader.AutoResolver
[MessagePackObject]
public class ResolveInfo
{
+ [IgnoreMember]
+ private string _guid;
+
///
/// GUID of the mod as defined in the manifest.xml
///
[Key("ModID")]
- public string GUID { get; set; }
+ public string GUID
+ {
+ get => _guid;
+ set => _guid = value?.Trim();
+ }
+
///
/// ID of the item as defined in the mod's list files
///
diff --git a/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.cs b/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.cs
index 44704da7..bf457327 100644
--- a/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.cs
+++ b/src/Core_Sideloader/UniversalAutoResolver/Core.UAR.cs
@@ -98,8 +98,12 @@ public static ResolveInfo TryGetResolutionInfo(int slot, string property, ChaLis
/// Category number of the item
///
/// ResolveInfo
- public static ResolveInfo TryGetResolutionInfo(int slot, ChaListDefine.CategoryNo categoryNo, string guid) =>
- _resolveInfoLookupSlot?[slot].FirstOrDefault(x => x.CategoryNo == categoryNo && x.GUID == guid);
+ public static ResolveInfo TryGetResolutionInfo(int slot, ChaListDefine.CategoryNo categoryNo, string guid)
+ {
+ guid = guid?.Trim();
+ return _resolveInfoLookupSlot?[slot].FirstOrDefault(x => x.CategoryNo == categoryNo && x.GUID == guid);
+ }
+
///
/// Get the ResolveInfo for an item
///
@@ -107,8 +111,12 @@ public static ResolveInfo TryGetResolutionInfo(int slot, ChaListDefine.CategoryN
///
///
/// ResolveInfo
- public static ResolveInfo TryGetResolutionInfo(int slot, string property, string guid) =>
- _resolveInfoLookupSlot?[slot].FirstOrDefault(x => x.Property == property && x.GUID == guid);
+ public static ResolveInfo TryGetResolutionInfo(int slot, string property, string guid)
+ {
+ guid = guid?.Trim();
+ return _resolveInfoLookupSlot?[slot].FirstOrDefault(x => x.Property == property && x.GUID == guid);
+ }
+
///
/// Get the ResolveInfo for an item
///
@@ -117,14 +125,18 @@ public static ResolveInfo TryGetResolutionInfo(int slot, string property, string
///
///
/// ResolveInfo
- public static ResolveInfo TryGetResolutionInfo(int slot, string property, ChaListDefine.CategoryNo categoryNo, string guid) =>
- _resolveInfoLookupSlot?[slot].FirstOrDefault(x => x.Property == property && x.CategoryNo == categoryNo && x.GUID == guid);
+ public static ResolveInfo TryGetResolutionInfo(int slot, string property, ChaListDefine.CategoryNo categoryNo, string guid)
+ {
+ guid = guid?.Trim();
+ return _resolveInfoLookupSlot?[slot].FirstOrDefault(x => x.Property == property && x.CategoryNo == categoryNo && x.GUID == guid);
+ }
+
///
/// Get all MigrationInfo for the GUID
///
/// GUID that will be migrated
/// A list of MigrationInfo
- public static List GetMigrationInfo(string guidOld) => _migrationInfoLookupGUID?[guidOld].ToList();
+ public static List GetMigrationInfo(string guidOld) => _migrationInfoLookupGUID?[guidOld?.Trim()].ToList();
///
/// Get all MigrationInfo for the ID
///
@@ -133,12 +145,20 @@ public static ResolveInfo TryGetResolutionInfo(int slot, string property, ChaLis
public static List GetMigrationInfo(int idOld) => _migrationInfoLookupSlot?[idOld].ToList();
#if AI || HS2
- internal static HeadPresetInfo TryGetHeadPresetInfo(int slot, string guid, string preset) =>
- _headPresetInfoLookupSlot?[slot].FirstOrDefault(x => x.HeadGUID == guid && x.Preset == preset);
+ internal static HeadPresetInfo TryGetHeadPresetInfo(int slot, string guid, string preset)
+ {
+ guid = guid?.Trim();
+ return _headPresetInfoLookupSlot?[slot].FirstOrDefault(x => x.HeadGUID == guid && x.Preset == preset);
+ }
+
internal static void SetHeadPresetInfos(ICollection results) => _headPresetInfoLookupSlot = results.ToLookup(info => info.HeadID);
- internal static FaceSkinInfo TryGetFaceSkinInfo(int slot, string guid) =>
- _faceSkinInfoLookupSlot?[slot].FirstOrDefault(x => x.SkinSlot == slot && x.SkinGUID == guid);
+ internal static FaceSkinInfo TryGetFaceSkinInfo(int slot, string guid)
+ {
+ guid = guid?.Trim();
+ return _faceSkinInfoLookupSlot?[slot].FirstOrDefault(x => x.SkinSlot == slot && x.SkinGUID == guid);
+ }
+
internal static FaceSkinInfo TryGetFaceSkinInfo(int localSlot) =>
_faceSkinInfoLookupLocalSlot?[localSlot].FirstOrDefault();
#endif
diff --git a/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.StudioResolveInfo.cs b/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.StudioResolveInfo.cs
index ebf13a89..91d23e93 100644
--- a/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.StudioResolveInfo.cs
+++ b/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.StudioResolveInfo.cs
@@ -10,11 +10,18 @@ namespace Sideloader.AutoResolver
[MessagePackObject]
public class StudioResolveInfo
{
+ private string _guid;
+
///
/// GUID of the mod as defined in the manifest.xml
///
[Key("ModID")]
- public string GUID { get; set; }
+ public string GUID
+ {
+ get => _guid;
+ set => _guid = value?.Trim();
+ }
+
///
/// ID of the item as defined in the mod's list files
///
diff --git a/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.cs b/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.cs
index dc055862..a8d13f02 100644
--- a/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.cs
+++ b/src/Core_Sideloader_Studio/UniversalAutoResolver/Core.UAR.Studio.cs
@@ -107,7 +107,7 @@ public static IEnumerable GetStudioResolveInfos(string guid,
{
UpdateLookupsIfNeeded();
- if (StudioResolutionInfoGuidLookup.TryGetValue(guid, out var slotLookup))
+ if (StudioResolutionInfoGuidLookup.TryGetValue(guid.Trim(), out var slotLookup))
{
if (slotLookup.TryGetValue(slot, out var result))
return onlyResolveItems ? result.Where(IsResolveItem) : result;
@@ -381,16 +381,17 @@ internal static void ResolveStudioObjectPattern(StudioPatternResolveInfo extReso
{
if (!extResolve.ObjectPatternInfo.TryGetValue(i, out var patternInfo)) continue;
- var intResolve = TryGetResolutionInfo(Item.pattern[i].key, ChaListDefine.CategoryNo.mt_pattern, patternInfo.GUID);
+ var patternGUID = patternInfo.GUID?.Trim();
+ var intResolve = TryGetResolutionInfo(Item.pattern[i].key, ChaListDefine.CategoryNo.mt_pattern, patternGUID);
if (intResolve != null)
{
if (resolveType == ResolveType.Load && Sideloader.DebugLogging.Value)
- Sideloader.Logger.LogDebug($"Resolving (Studio Item Pattern) [{patternInfo.GUID}] {Item.pattern[i].key}->{intResolve.LocalSlot}");
+ Sideloader.Logger.LogDebug($"Resolving (Studio Item Pattern) [{patternGUID}] {Item.pattern[i].key}->{intResolve.LocalSlot}");
Item.pattern[i].key = intResolve.LocalSlot;
}
else if (resolveType == ResolveType.Load)
{
- ShowGUIDError(patternInfo.GUID, patternInfo.Author, patternInfo.Website, patternInfo.Name);
+ ShowGUIDError(patternGUID, patternInfo.Author, patternInfo.Website, patternInfo.Name);
Item.pattern[i].key = BaseSlotID - 1;
}
}
@@ -399,16 +400,17 @@ internal static void ResolveStudioObjectPattern(StudioPatternResolveInfo extReso
{
if (!extResolve.ObjectPatternInfo.TryGetValue(i, out var patternInfo)) continue;
- var intResolve = TryGetResolutionInfo(Item.colors[i].pattern.key, AIChara.ChaListDefine.CategoryNo.st_pattern, patternInfo.GUID);
+ var patternGUID = patternInfo.GUID?.Trim();
+ var intResolve = TryGetResolutionInfo(Item.colors[i].pattern.key, AIChara.ChaListDefine.CategoryNo.st_pattern, patternGUID);
if (intResolve != null)
{
if (resolveType == ResolveType.Load && Sideloader.DebugLogging.Value)
- Sideloader.Logger.LogDebug($"Resolving (Studio Item Pattern) [{patternInfo.GUID}] {Item.colors[i].pattern.key}->{intResolve.LocalSlot}");
+ Sideloader.Logger.LogDebug($"Resolving (Studio Item Pattern) [{patternGUID}] {Item.colors[i].pattern.key}->{intResolve.LocalSlot}");
Item.colors[i].pattern.key = intResolve.LocalSlot;
}
else if (resolveType == ResolveType.Load)
{
- ShowGUIDError(patternInfo.GUID, patternInfo.Author, patternInfo.Website, patternInfo.Name);
+ ShowGUIDError(patternGUID, patternInfo.Author, patternInfo.Website, patternInfo.Name);
Item.colors[i].pattern.key = BaseSlotID - 1;
}
}