Skip to content

Commit

Permalink
[Sideloader] Trim all GUIDs (fixes regression from 18.2)
Browse files Browse the repository at this point in the history
This will fix failing to resolve mods with GUIDs that start or end with spaces
  • Loading branch information
ManlyMarco committed Nov 17, 2023
1 parent bbc10ff commit d951f23
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 27 deletions.
2 changes: 1 addition & 1 deletion src/Core_Sideloader/Core.Sideloader.ListLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down
2 changes: 1 addition & 1 deletion src/Core_Sideloader/Core.Sideloader.Manifest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion src/Core_Sideloader/Core.Sideloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,9 @@ public static bool IsPngFolderOnly(string assetBundleName)
/// <returns>Manifest of the loaded mod or null if mod is not loaded.</returns>
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,17 @@ 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;
}

public MigrationInfo(MigrationType migrationType, string guidOld, string guidNew)
{
MigrationType = migrationType;
GUIDOld = guidOld;
GUIDNew = guidNew;
GUIDOld = guidOld?.Trim();
GUIDNew = guidNew?.Trim();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,19 @@ namespace Sideloader.AutoResolver
[MessagePackObject]
public class ResolveInfo
{
[IgnoreMember]
private string _guid;

/// <summary>
/// GUID of the mod as defined in the manifest.xml
/// </summary>
[Key("ModID")]
public string GUID { get; set; }
public string GUID
{
get => _guid;
set => _guid = value?.Trim();
}

/// <summary>
/// ID of the item as defined in the mod's list files
/// </summary>
Expand Down
42 changes: 31 additions & 11 deletions src/Core_Sideloader/UniversalAutoResolver/Core.UAR.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,25 @@ public static ResolveInfo TryGetResolutionInfo(int slot, string property, ChaLis
/// <param name="categoryNo">Category number of the item</param>
/// <param name="guid"></param>
/// <returns>ResolveInfo</returns>
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);
}

/// <summary>
/// Get the ResolveInfo for an item
/// </summary>
/// <param name="slot">Original ID as defined in the list file</param>
/// <param name="property"></param>
/// <param name="guid"></param>
/// <returns>ResolveInfo</returns>
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);
}

/// <summary>
/// Get the ResolveInfo for an item
/// </summary>
Expand All @@ -117,14 +125,18 @@ public static ResolveInfo TryGetResolutionInfo(int slot, string property, string
/// <param name="categoryNo"></param>
/// <param name="guid"></param>
/// <returns>ResolveInfo</returns>
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);
}

/// <summary>
/// Get all MigrationInfo for the GUID
/// </summary>
/// <param name="guidOld">GUID that will be migrated</param>
/// <returns>A list of MigrationInfo</returns>
public static List<MigrationInfo> GetMigrationInfo(string guidOld) => _migrationInfoLookupGUID?[guidOld].ToList();
public static List<MigrationInfo> GetMigrationInfo(string guidOld) => _migrationInfoLookupGUID?[guidOld?.Trim()].ToList();
/// <summary>
/// Get all MigrationInfo for the ID
/// </summary>
Expand All @@ -133,12 +145,20 @@ public static ResolveInfo TryGetResolutionInfo(int slot, string property, ChaLis
public static List<MigrationInfo> 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<HeadPresetInfo> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,18 @@ namespace Sideloader.AutoResolver
[MessagePackObject]
public class StudioResolveInfo
{
private string _guid;

/// <summary>
/// GUID of the mod as defined in the manifest.xml
/// </summary>
[Key("ModID")]
public string GUID { get; set; }
public string GUID
{
get => _guid;
set => _guid = value?.Trim();
}

/// <summary>
/// ID of the item as defined in the mod's list files
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public static IEnumerable<StudioResolveInfo> 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;
Expand Down Expand Up @@ -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;
}
}
Expand All @@ -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;
}
}
Expand Down

0 comments on commit d951f23

Please sign in to comment.