public static ItemState GetState(this IContent This, SpecificVersionInfo constraint) => This.GetState(constraint?.ToString());
public AssetStorePackageVersion(string productId, IDictionary <string, object> productDetail, SpecificVersionInfo localInfo = null) { if (productDetail == null) { throw new ArgumentNullException(nameof(productDetail)); } m_Errors = new List <Error>(); m_Type = "assetstore"; m_Tag = PackageTag.AssetStore; m_PackageUniqueId = productId; try { var description = productDetail.ContainsKey("description") ? productDetail["description"] as string : string.Empty; m_Description = CleanUpHtml(description); var publisher = new Dictionary <string, object>(); if (productDetail.ContainsKey("productPublisher")) { publisher = productDetail["productPublisher"] as Dictionary <string, object>; if (publisher.ContainsKey("url") && publisher["url"] is string && (string)publisher["url"] == "http://unity3d.com") { m_Author = "Unity Technologies Inc."; } else { m_Author = publisher.ContainsKey("name") ? publisher["name"] as string : L10n.Tr("Unknown publisher"); } m_PublisherId = publisher.ContainsKey("externalRef") ? publisher["externalRef"] as string : string.Empty; } else { m_Author = string.Empty; m_PublisherId = string.Empty; } m_Category = string.Empty; if (productDetail.ContainsKey("category")) { var categoryInfo = productDetail["category"] as IDictionary <string, object>; m_Category = categoryInfo["name"] as string; } if (localInfo != null) { m_VersionString = localInfo.versionString; m_VersionId = localInfo.versionId; SemVersion semVer; if (!SemVersion.TryParse(m_VersionString.Trim(), out semVer)) { semVer = new SemVersion(0); } m_Version = semVer; m_PublishedDate = DateTime.Parse(localInfo.publishedDate); } else if (productDetail.ContainsKey("version")) { var versionInfo = productDetail["version"] as IDictionary <string, object>; m_VersionString = versionInfo["name"] as string; m_VersionId = versionInfo["id"] as string; SemVersion semVer; if (!SemVersion.TryParse(m_VersionString.Trim(), out semVer)) { semVer = new SemVersion(0); } m_Version = semVer; if (versionInfo.ContainsKey("publishedDate")) { var date = versionInfo["publishedDate"] as string; m_PublishedDate = DateTime.Parse(date); } else { m_PublishedDate = new DateTime(); } } else { m_VersionString = string.Empty; m_VersionId = string.Empty; m_Version = new SemVersion(0); } m_DisplayName = productDetail.ContainsKey("displayName") ? productDetail["displayName"] as string : $"Package {m_PackageUniqueId}@{m_VersionId}"; m_SupportedUnityVersions = new List <SemVersion>(); if (productDetail.ContainsKey("supportedUnityVersions")) { var supportedVersions = productDetail["supportedUnityVersions"] as IList <object>; foreach (var supportedVersion in supportedVersions.Where(v => v is string)) { SemVersion version; if (SemVersion.TryParse(supportedVersion as string, out version)) { m_SupportedUnityVersions.Add(version); } } m_SupportedUnityVersions.Sort((left, right) => left.CompareByPrecedence(right)); } if (localInfo != null) { var simpleVersion = Regex.Replace(localInfo.supportedVersion, @"(?<major>\d+)\.(?<minor>\d+).(?<patch>\d+)[abfp].+", "${major}.${minor}.${patch}"); SemVersion.TryParse(simpleVersion.Trim(), out m_SupportedUnityVersion); } else { m_SupportedUnityVersion = m_SupportedUnityVersions.LastOrDefault(); } m_Images = new List <PackageImage>(); if (productDetail.ContainsKey("mainImage")) { var mainImage = productDetail["mainImage"] as IDictionary <string, object>; var thumbnailUrl = mainImage["url"] as string; thumbnailUrl = thumbnailUrl.Replace("//d2ujflorbtfzji.cloudfront.net/", "//assetstorev1-prd-cdn.unity3d.com/"); m_Images.Add(new PackageImage { type = PackageImage.ImageType.Main, thumbnailUrl = "http:" + thumbnailUrl, url = string.Empty }); } if (productDetail.ContainsKey("images")) { var images = productDetail["images"] as IList <object>; foreach (var image in images) { var imageInfo = image as IDictionary <string, object>; var type = imageInfo["type"] as string; if (string.IsNullOrEmpty(type)) { continue; } var imageType = PackageImage.ImageType.Screenshot; var thumbnailUrl = imageInfo["thumbnailUrl"] as string; thumbnailUrl = thumbnailUrl.Replace("//d2ujflorbtfzji.cloudfront.net/", "//assetstorev1-prd-cdn.unity3d.com/"); if (type == "sketchfab") { imageType = PackageImage.ImageType.Sketchfab; } else if (type == "youtube") { imageType = PackageImage.ImageType.Youtube; } var imageUrl = imageInfo["imageUrl"] as string; if (imageType == PackageImage.ImageType.Screenshot) { imageUrl = "http:" + imageUrl; } m_Images.Add(new PackageImage { type = imageType, thumbnailUrl = "http:" + thumbnailUrl, url = imageUrl }); } } m_SizeInfos = new List <PackageSizeInfo>(); if (productDetail.ContainsKey("uploads")) { var uploads = productDetail["uploads"] as IDictionary <string, object>; foreach (var key in uploads.Keys) { var simpleVersion = Regex.Replace(key, @"(?<major>\d+)\.(?<minor>\d+).(?<patch>\d+)[abfp].+", "${major}.${minor}.${patch}"); SemVersion version; if (SemVersion.TryParse(simpleVersion.Trim(), out version)) { var info = uploads[key] as IDictionary <string, object>; var assetCount = info["assetCount"] as string; var downloadSize = info["downloadSize"] as string; m_SizeInfos.Add(new PackageSizeInfo { supportedUnityVersion = version, assetCount = string.IsNullOrEmpty(assetCount) ? 0 : ulong.Parse(assetCount), downloadSize = string.IsNullOrEmpty(downloadSize) ? 0 : ulong.Parse(downloadSize) }); } } m_SizeInfos.Sort((left, right) => left.supportedUnityVersion.CompareByPrecedence(right.supportedUnityVersion)); } m_Links = new List <PackageLink>(); var slug = productDetail.ContainsKey("slug") ? productDetail["slug"] as string : m_PackageUniqueId; m_Links.Add(new PackageLink { name = "View in the Asset Store", url = $"/packages/p/{slug}" }); if (publisher.ContainsKey("url")) { var url = publisher["url"] as string; if (!string.IsNullOrEmpty(url) && Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) { m_Links.Add(new PackageLink { name = "Publisher Web Site", url = url }); } } if (publisher.ContainsKey("supportUrl")) { var url = publisher["supportUrl"] as string; if (!string.IsNullOrEmpty(url) && Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) { m_Links.Add(new PackageLink { name = "Publisher Support", url = url }); } } if (productDetail.ContainsKey("state")) { var state = productDetail["state"] as string; if (state.Equals("published", StringComparison.InvariantCultureIgnoreCase)) { m_Tag |= PackageTag.Published; } else if (state.Equals("deprecated", StringComparison.InvariantCultureIgnoreCase)) { m_Tag |= PackageTag.Deprecated; } } m_LocalPath = productDetail.ContainsKey("localPath") ? productDetail["localPath"] as string : string.Empty; m_IsAvailableOnDisk = !string.IsNullOrEmpty(m_LocalPath) && File.Exists(m_LocalPath); } catch (Exception e) { m_Errors.Add(new Error(NativeErrorCode.Unknown, e.Message)); } }