Fix avatars not being found in cache (#1027)

This commit is contained in:
Nekromateion
2024-12-16 08:29:38 +01:00
committed by GitHub
parent ba7464d9c2
commit 8f95bb5139
2 changed files with 16 additions and 8 deletions

View File

@@ -66,13 +66,13 @@ namespace VRCX
return versionHex.PadLeft(32, '0');
}
public int ReverseHexToDecimal(string hexString)
public (int, int) ReverseHexToDecimal(string hexString)
{
if (hexString.Length != 32)
return 0; // it's cooked
return (0, 0); // it's cooked
try {
var variantVersionHexString = hexString.Substring(16, 8); // 16..24
var variantVersionHexString = hexString.Substring(0, 8); // 0..8
var versionHexString = hexString.Substring(24, 8); // 24..32
var versionBytes = new byte[4];
var variantVersionBytes = new byte[4];
@@ -85,12 +85,12 @@ namespace VRCX
}
var version = BitConverter.ToInt32(versionBytes, 0);
var variantVersion = BitConverter.ToInt32(variantVersionBytes, 0);
return version + variantVersion;
return (version, variantVersion);
}
catch (Exception ex)
{
logger.Error($"Failed to convert hex to decimal: {hexString} {ex}");
return 0; // it's cooked
return (0, 0); // it's cooked
}
}
@@ -110,9 +110,18 @@ namespace VRCX
public string GetVRChatCacheFullLocation(string id, int version, string variant = "", int variantVersion = 0)
{
var cachePath = GetVRChatCacheLocation();
var idHash = GetAssetId(id, variant);
var idHash = GetAssetId(id, variant);
var topDir = Path.Combine(cachePath, idHash);
var versionLocation = GetAssetVersion(version, variantVersion);
return Path.Combine(cachePath, idHash, versionLocation);
if (!Directory.Exists(topDir))
return Path.Combine(topDir, versionLocation);
var versionSearchPattern = string.Concat("*", versionLocation.AsSpan(8));
var dirs = Directory.GetDirectories(topDir, versionSearchPattern);
if (dirs.Length > 0)
return dirs.OrderByDescending(dir => ReverseHexToDecimal(Path.GetFileName(dir)).Item2).First();
return Path.Combine(topDir, versionLocation);
}
/// <summary>