diff --git a/unity-renderer/Assets/DCLServices/WearablesCatalogService/ExtendedUrnParser.cs b/unity-renderer/Assets/DCLServices/WearablesCatalogService/ExtendedUrnParser.cs index 53262e9d8d..94d6f820cc 100644 --- a/unity-renderer/Assets/DCLServices/WearablesCatalogService/ExtendedUrnParser.cs +++ b/unity-renderer/Assets/DCLServices/WearablesCatalogService/ExtendedUrnParser.cs @@ -2,20 +2,54 @@ { public static class ExtendedUrnParser { - private const int QUANTITY_OF_PARTS_ON_SHORTENED_ITEMS_URN = 6; - private const string COLLECTIONS_THIRDPARTY = "collections-thirdparty"; + private const int REGULAR_NFTS_SHORT_PARTS = 6; + private const int THIRD_PARTY_V2_SHORTEN_URN_PARTS = 7; + private const string COLLECTIONS_THIRD_PARTY = "collections-thirdparty"; public static string GetShortenedUrn(string urnReceived) { - int lastIndex = urnReceived.LastIndexOf(':'); + if (string.IsNullOrEmpty(urnReceived)) return urnReceived; + if (CountParts(urnReceived) <= REGULAR_NFTS_SHORT_PARTS) return urnReceived; - return lastIndex != -1 && IsExtendedUrn(urnReceived) - ? urnReceived.Substring(0, lastIndex) - : urnReceived; + int index; + + if (IsThirdPartyCollection(urnReceived)) + { + index = -1; + + // Third party v2 contains 10 parts, on which 3 are reserved for the tokenId + // "id": urn:decentraland:amoy:collections-thirdparty:back-to-the-future:amoy-eb54:tuxedo-6751:amoy:0x1d9fb685c257e74f869ba302e260c0b68f5ebb37:12 + // "tokenId": amoy:0x1d9fb685c257e74f869ba302e260c0b68f5ebb37:12 + for (var i = 0; i < THIRD_PARTY_V2_SHORTEN_URN_PARTS; i++) + { + index = urnReceived.IndexOf(':', index + 1); + if (index == -1) break; + } + + return index != -1 ? urnReceived[..index] : urnReceived; + } + + // TokenId is always placed in the last part for regular nfts + index = urnReceived.LastIndexOf(':'); + + return index != -1 ? urnReceived[..index] : urnReceived; } - public static bool IsExtendedUrn(string urn) => - urn.Split(':').Length > QUANTITY_OF_PARTS_ON_SHORTENED_ITEMS_URN && !urn.Contains(COLLECTIONS_THIRDPARTY); - } + private static int CountParts(string urn) + { + int count = 1; + int index = urn.IndexOf(':'); + + while (index != -1) + { + count++; + index = urn.IndexOf(':', index + 1); + } + return count; + } + + private static bool IsThirdPartyCollection(string urn) => + !string.IsNullOrEmpty(urn) && urn.Contains(COLLECTIONS_THIRD_PARTY); + } } diff --git a/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDownloadProvider.cs b/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDownloadProvider.cs index a776f1d426..4d1759e82a 100644 --- a/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDownloadProvider.cs +++ b/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDownloadProvider.cs @@ -32,7 +32,7 @@ public GltFastDownloadProvider(string baseUrl, IWebRequestController webRequestC this.texturePromiseKeeper = texturePromiseKeeper; } - public async Task Request(Uri uri) + public async Task RequestAsync(Uri uri) { if (isDisposed) return null; @@ -75,7 +75,7 @@ private string GetFinalUrl(Uri uri, bool isTexture) return uri.OriginalString; } - public async Task RequestTexture(Uri uri, bool nonReadable, bool forceLinear) + public async Task RequestTextureAsync(Uri uri, bool nonReadable, bool forceLinear) { if (isDisposed) return null; diff --git a/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackEditorHUDController.cs b/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackEditorHUDController.cs index 10ad64ec7f..6390b6868a 100644 --- a/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackEditorHUDController.cs +++ b/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/BackpackEditorHUDV2/BackpackEditorHUDController.cs @@ -651,9 +651,7 @@ private void EquipWearable( bool resetOverride = true) { string shortenWearableId = ExtendedUrnParser.GetShortenedUrn(wearable.id); - - if (ExtendedUrnParser.IsExtendedUrn(extendedWearableId)) - extendedWearableUrns[shortenWearableId] = extendedWearableId; + extendedWearableUrns[shortenWearableId] = extendedWearableId; if (wearable.data.category == WearableLiterals.Categories.BODY_SHAPE) { diff --git a/unity-renderer/Packages/manifest.json b/unity-renderer/Packages/manifest.json index b661c3de4d..c3b7d82615 100644 --- a/unity-renderer/Packages/manifest.json +++ b/unity-renderer/Packages/manifest.json @@ -16,7 +16,7 @@ "com.unity.ai.navigation": "1.1.4", "com.unity.build-report-inspector": "https://github.com/needle-mirror/com.unity.build-report-inspector.git", "com.unity.cinemachine": "2.9.5", - "com.unity.ide.rider": "3.0.27", + "com.unity.ide.rider": "3.0.31", "com.unity.ide.visualstudio": "2.0.18", "com.unity.ide.vscode": "1.2.5", "com.unity.memoryprofiler": "1.0.0", diff --git a/unity-renderer/Packages/packages-lock.json b/unity-renderer/Packages/packages-lock.json index 248f9d2169..e621da2ad6 100644 --- a/unity-renderer/Packages/packages-lock.json +++ b/unity-renderer/Packages/packages-lock.json @@ -19,7 +19,7 @@ "com.unity.mathematics": "1.2.6", "com.unity.burst": "1.6.6" }, - "hash": "af15ee7336fa1759dc24953a21e253944180dfc7" + "hash": "3d0abc3b482b0b6c2ab7a0ccbf57647dc05f9811" }, "com.brunomikoski.animationsequencer": { "version": "0.3.8", @@ -155,7 +155,7 @@ "url": "https://packages.unity.com" }, "com.unity.ide.rider": { - "version": "3.0.27", + "version": "3.0.31", "depth": 0, "source": "registry", "dependencies": {