Beispiel #1
0
 public static ItemState GetState(this IContent This, SpecificVersionInfo constraint)
 => This.GetState(constraint?.ToString());
Beispiel #2
0
        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));
            }
        }