diff --git a/Dotnet/AssetBundleCacher.cs b/Dotnet/AssetBundleCacher.cs index 6cd36a60..a23b12e0 100644 --- a/Dotnet/AssetBundleCacher.cs +++ b/Dotnet/AssetBundleCacher.cs @@ -69,22 +69,28 @@ namespace VRCX { if (hexString.Length != 32) return 0; // it's cooked - - var versionHexString = hexString.Substring(16, 8); // 16..24 - var variantVersionHexString = hexString.Substring(24, 8); // 24..32 - var versionBytes = new byte[4]; - var variantVersionBytes = new byte[4]; - for (var i = 0; i < 4; i++) - { - var versionValue = Convert.ToInt32(versionHexString.Substring(i * 2, 2), 16); - versionBytes[i] = (byte)versionValue; - var variantVersionValue = Convert.ToInt32(variantVersionHexString.Substring(i * 2, 2), 16); - variantVersionBytes[i] = (byte)variantVersionValue; + + try { + var versionHexString = hexString.Substring(16, 8); // 16..24 + var variantVersionHexString = hexString.Substring(24, 8); // 24..32 + var versionBytes = new byte[4]; + var variantVersionBytes = new byte[4]; + for (var i = 0; i < 4; i++) + { + var versionValue = Convert.ToInt32(versionHexString.Substring(i * 2, 2), 16); + versionBytes[i] = (byte)versionValue; + var variantVersionValue = Convert.ToInt32(variantVersionHexString.Substring(i * 2, 2), 16); + variantVersionBytes[i] = (byte)variantVersionValue; + } + var version = BitConverter.ToInt32(versionBytes, 0); + var variantVersion = BitConverter.ToInt32(variantVersionBytes, 0); + return version + variantVersion; + } + catch (Exception ex) + { + logger.Error($"Failed to convert hex to decimal: {hexString} {ex}"); + return 0; // it's cooked } - var version = BitConverter.ToInt32(versionBytes, 0); - var variantVersion = BitConverter.ToInt32(variantVersionBytes, 0); - - return version + variantVersion; } public string GetVRChatCacheLocation() diff --git a/html/src/app.js b/html/src/app.js index f2a099d2..1759d98b 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -2906,10 +2906,13 @@ speechSynthesis.getVoices(); try { var args = await this.getFriends(params); friends = friends.concat(args.json); - params.offset += 50; break; } catch (err) { console.error(err); + if (err?.message?.includes('Not Found')) { + console.error('Awful workaround for awful VRC API bug'); + break; + } if (j === 9) { throw err; } @@ -2918,6 +2921,7 @@ speechSynthesis.getVoices(); }); } } + params.offset += 50; } return friends; }; @@ -2944,10 +2948,13 @@ speechSynthesis.getVoices(); try { var args = await this.getFriends(params); friends = friends.concat(args.json); - params.offset += 50; break; } catch (err) { console.error(err); + if (err?.message?.includes('Not Found')) { + console.error('Awful workaround for awful VRC API bug'); + break; + } if (j === 9) { throw err; } @@ -2955,6 +2962,7 @@ speechSynthesis.getVoices(); workerTimers.setTimeout(resolve, 5000); }); } + params.offset += 50; } } return friends; @@ -5444,9 +5452,11 @@ speechSynthesis.getVoices(); } try { const params = new URLSearchParams(new URL(url).search); - let version = params.get('v'); - if (version) return version; - return '0' + const version = params.get('v'); + if (version) { + return version; + } + return '0'; } catch { return '0'; } @@ -9174,7 +9184,9 @@ speechSynthesis.getVoices(); console.error(err); }); } - await API.refreshFriends(); + await API.refreshFriends().catch((err) => { + console.error(err); + }); API.reconnectWebSocket(); };