Exemple #1
0
        public override void OnEnable()
        {
            base.OnEnable();

            if (targets == null)
            {
                return;
            }

            errorMessages   = new List <string>();
            warningMessages = new List <string>();

            if (packageSerializedObject == null)
            {
                packageState = CreateInstance <PackageManifestState>();
                ReadPackageManifest(target, packageState);
                packageSerializedObject = new SerializedObject(packageState);
            }
            else
            {
                packageState = packageSerializedObject.targetObject as PackageManifestState;
            }

            m_IsValidFile         = packageSerializedObject.FindProperty("isValidFile");
            m_IsModified          = packageSerializedObject.FindProperty("isModified");
            m_Name                = packageSerializedObject.FindProperty("info.packageName");
            m_DisplayName         = packageSerializedObject.FindProperty("info.displayName");
            m_Version             = packageSerializedObject.FindProperty("info.version");
            m_UnityVersionEnabled = packageSerializedObject.FindProperty("info.unity.isEnable");
            m_UnityMajor          = packageSerializedObject.FindProperty("info.unity.major");
            m_UnityMinor          = packageSerializedObject.FindProperty("info.unity.minor");
            m_UnityRelease        = packageSerializedObject.FindProperty("info.unity.release");
            m_Description         = packageSerializedObject.FindProperty("info.description");
            m_Type                = packageSerializedObject.FindProperty("info.type");
            m_Visibility          = packageSerializedObject.FindProperty("info.visibility");

            m_DependenciesList = new ReorderableList(packageSerializedObject,
                                                     packageSerializedObject.FindProperty("dependencies"), false, false, true, true)
            {
                drawElementCallback = DrawDependencyListElement,
                drawHeaderCallback  = DrawDependencyHeaderElement,
                elementHeight       = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing
            };
        }
        private void WritePackageManifest(Object target, PackageManifestState packageState)
        {
            var importer = target as PackageManifestImporter;

            if (importer == null)
            {
                return;
            }

            var ioProxy   = ServicesContainer.instance.Resolve <IOProxy>();
            var assetPath = importer.assetPath;
            Dictionary <string, object> json = null;

            try
            {
                var jsonString = ioProxy.FileReadAllText(assetPath);
                json = Json.Deserialize(jsonString) as Dictionary <string, object>;
            }
            catch (System.IO.IOException)
            {
                Debug.Log($"Couldn't open package manifest file {assetPath}.");
            }

            if (json == null)
            {
                return;
            }

            var completePackageName = BuildCompletePackageName(packageState.info.packageName);

            if (!string.IsNullOrWhiteSpace(completePackageName))
            {
                json["name"] = completePackageName;
            }

            if (!string.IsNullOrWhiteSpace(packageState.info.displayName))
            {
                json["displayName"] = packageState.info.displayName.Trim();
            }
            else
            {
                json.Remove("displayName");
            }

            json["version"] = packageState.info.version;

            if (!string.IsNullOrWhiteSpace(packageState.info.description))
            {
                json["description"] = packageState.info.description.Trim();
            }
            else
            {
                json.Remove("description");
            }

            if (!string.IsNullOrWhiteSpace(packageState.info.type))
            {
                json["type"] = packageState.info.type.Trim();
            }
            else
            {
                json.Remove("type");
            }

            if (packageState.info.settings.visibility == PackageVisibility.DefaultVisibility)
            {
                json.Remove("hideInEditor");
            }
            else
            {
                json["hideInEditor"] = packageState.info.settings.visibility == PackageVisibility.AlwaysHidden;
            }

            if (packageState.info.unity.isEnable)
            {
                if (!string.IsNullOrWhiteSpace(packageState.info.unity.major) &&
                    !string.IsNullOrWhiteSpace(packageState.info.unity.minor))
                {
                    json["unity"] = string.Join(".",
                                                new[] { packageState.info.unity.major.Trim(), packageState.info.unity.minor.Trim() });

                    if (!string.IsNullOrWhiteSpace(packageState.info.unity.release))
                    {
                        json["unityRelease"] = packageState.info.unity.release.Trim();
                    }
                    else
                    {
                        json.Remove("unityRelease");
                    }
                }
            }
            else
            {
                json.Remove("unity");
                json.Remove("unityRelease");
            }

            if (packageState.dependencies.Count > 0)
            {
                var dependencies = new Dictionary <string, string>();
                foreach (var dependency in packageState.dependencies)
                {
                    if (!string.IsNullOrWhiteSpace(dependency.packageName))
                    {
                        dependencies.Add(dependency.packageName.Trim(), isFeatureSet ? "default" : dependency.version);
                    }
                }

                json["dependencies"] = dependencies;
            }
            else
            {
                json.Remove("dependencies");
            }

            try
            {
                ioProxy.FileWriteAllText(assetPath, Json.Serialize(json, true));
                Client.Resolve();
            }
            catch (System.IO.IOException)
            {
                Debug.Log($"Couldn't write package manifest file {assetPath}.");
            }
        }
        private static void ReadPackageManifest(Object target, PackageManifestState packageState)
        {
            var importer = target as PackageManifestImporter;

            if (importer == null)
            {
                return;
            }

            var assetPath = importer.assetPath;

            try
            {
                var ioProxy    = ServicesContainer.instance.Resolve <IOProxy>();
                var jsonString = ioProxy.FileReadAllText(assetPath);
                var info       = Json.Deserialize(jsonString) as Dictionary <string, object>;

                packageState.dependencies = new List <PackageDependency>();
                packageState.info         = new PackageInformation();
                packageState.isValidFile  = info != null &&
                                            info.ContainsKey("name") && info["name"] is string &&
                                            info.ContainsKey("version") && info["version"] is string;


                if (packageState.isValidFile)
                {
                    if (info.ContainsKey("displayName") && info["displayName"] is string)
                    {
                        packageState.info.displayName = (string)info["displayName"];
                    }

                    packageState.info.packageName.completeName = info["name"] as string;

                    var packageNameSplit      = packageState.info.packageName.completeName.Split('.');
                    var packageNameSplitCount = packageNameSplit.Count();

                    if (packageNameSplitCount > 2)
                    {
                        packageState.info.packageName.domain           = packageNameSplit[0];
                        packageState.info.packageName.organizationName = packageNameSplit[1];
                        string domainAndOrganizationName = packageState.info.packageName.domain + "." + packageState.info.packageName.organizationName + ".";
                        packageState.name = packageState.info.packageName.completeName.Replace(domainAndOrganizationName, "");
                        packageState.info.packageName.name = packageState.name;
                    }
                    else if (packageNameSplitCount == 2)
                    {
                        packageState.info.packageName.organizationName = packageNameSplit[0];
                        packageState.info.packageName.name             = packageNameSplit[1];
                    }
                    else
                    {
                        packageState.info.packageName.name = packageState.info.packageName.completeName;
                    }


                    packageState.info.version = info["version"] as string;

                    if (info.ContainsKey("description") && info["description"] is string)
                    {
                        packageState.info.description = (string)info["description"];
                    }

                    if (info.ContainsKey("type") && info["type"] is string)
                    {
                        packageState.info.type = (string)info["type"];
                    }

                    if (info.ContainsKey("hideInEditor") && info["hideInEditor"] is bool)
                    {
                        packageState.info.settings.visibility = (bool)info["hideInEditor"] ? PackageVisibility.AlwaysHidden : PackageVisibility.AlwaysVisible;
                    }
                    else
                    {
                        packageState.info.settings.visibility = PackageVisibility.DefaultVisibility;
                    }

                    if (info.ContainsKey("unity") && info["unity"] is string)
                    {
                        var splitVersions = ((string)info["unity"]).Split('.');
                        packageState.info.unity = new PackageUnityVersion
                        {
                            isEnable = true, major = splitVersions[0], minor = splitVersions.Length > 1 ? splitVersions[1] : "", release = ""
                        };

                        if (info.ContainsKey("unityRelease") && info["unityRelease"] is string)
                        {
                            packageState.info.unity.release = (string)info["unityRelease"];
                        }
                    }
                    else
                    {
                        var unityVersion = InternalEditorUtility.GetUnityVersion();
                        packageState.info.unity = new PackageUnityVersion
                        {
                            isEnable = false, major = unityVersion.Major.ToString(), minor = unityVersion.Minor.ToString(), release = ""
                        };
                    }

                    if (info.ContainsKey("dependencies"))
                    {
                        if (!(info["dependencies"] is IDictionary))
                        {
                            packageState.isValidFile = false;
                            return;
                        }
                        var dependenciesDictionary = (IDictionary)info["dependencies"];
                        foreach (var packageName in dependenciesDictionary.Keys)
                        {
                            var dependency = new PackageDependency
                            {
                                packageName = packageName as string,
                                version     = dependenciesDictionary[packageName] as string
                            };
                            packageState.dependencies.Add(dependency);
                        }
                    }
                }
            }
            catch (System.IO.IOException)
            {
                Debug.Log($"Couldn't open package manifest file {assetPath}.");
                packageState.isValidFile = false;
            }
        }
Exemple #4
0
        private static void WritePackageManifest(Object target, PackageManifestState packageState)
        {
            var importer = target as PackageManifestImporter;

            if (importer == null)
            {
                return;
            }

            var assetPath = importer.assetPath;
            Dictionary <string, object> json = null;

            try
            {
                var jsonString = File.ReadAllText(assetPath);
                json = Json.Deserialize(jsonString) as Dictionary <string, object>;
            }
            catch (IOException)
            {
                Debug.Log($"Couldn't open package manifest file {assetPath}.");
            }

            if (json == null)
            {
                return;
            }

            json["name"] = packageState.info.packageName;

            if (!IsNullOrEmptyTrim(packageState.info.displayName))
            {
                json["displayName"] = packageState.info.displayName.Trim();
            }
            else
            {
                json.Remove("displayName");
            }

            json["version"] = packageState.info.version;

            if (!IsNullOrEmptyTrim(packageState.info.description))
            {
                json["description"] = packageState.info.description.Trim();
            }
            else
            {
                json.Remove("description");
            }

            if (!IsNullOrEmptyTrim(packageState.info.type))
            {
                json["type"] = packageState.info.type.Trim();
            }
            else
            {
                json.Remove("type");
            }

            if (packageState.info.settings.visibility == PackageVisibility.DependsOnType)
            {
                json.Remove("hideInEditor");
            }
            else
            {
                json["hideInEditor"] = packageState.info.settings.visibility == PackageVisibility.AlwaysHidden;
            }

            if (packageState.info.unity.isEnable)
            {
                if (!IsNullOrEmptyTrim(packageState.info.unity.major) &&
                    !IsNullOrEmptyTrim(packageState.info.unity.minor))
                {
                    json["unity"] = string.Join(".",
                                                new[] { packageState.info.unity.major.Trim(), packageState.info.unity.minor.Trim() });

                    if (!IsNullOrEmptyTrim(packageState.info.unity.release))
                    {
                        json["unityRelease"] = packageState.info.unity.release.Trim();
                    }
                    else
                    {
                        json.Remove("unityRelease");
                    }
                }
            }
            else
            {
                json.Remove("unity");
                json.Remove("unityRelease");
            }

            if (packageState.dependencies.Count > 0)
            {
                var dependencies = new Dictionary <string, string>();
                foreach (var dependency in packageState.dependencies)
                {
                    if (!IsNullOrEmptyTrim(dependency.packageName))
                    {
                        dependencies.Add(dependency.packageName.Trim(), dependency.version);
                    }
                }

                json["dependencies"] = dependencies;
            }
            else
            {
                json.Remove("dependencies");
            }

            try
            {
                File.WriteAllText(assetPath, Json.Serialize(json, true));
            }
            catch (IOException)
            {
                Debug.Log($"Couldn't write package manifest file {assetPath}.");
            }
        }
Exemple #5
0
        private static void ReadPackageManifest(Object target, PackageManifestState packageState)
        {
            var importer = target as PackageManifestImporter;

            if (importer == null)
            {
                return;
            }

            var assetPath = importer.assetPath;

            try
            {
                var jsonString = File.ReadAllText(assetPath);
                var info       = Json.Deserialize(jsonString) as Dictionary <string, object>;

                packageState.dependencies = new List <PackageDependency>();
                packageState.info         = new PackageInformation();
                packageState.isValidFile  = info != null &&
                                            info.ContainsKey("name") && info["name"] is string &&
                                            info.ContainsKey("version") && info["version"] is string;


                if (packageState.isValidFile)
                {
                    packageState.info.packageName = info["name"] as string;
                    packageState.name             = packageState.info.packageName;

                    if (info.ContainsKey("displayName") && info["displayName"] is string)
                    {
                        packageState.info.displayName = (string)info["displayName"];
                    }

                    packageState.info.version = info["version"] as string;

                    if (info.ContainsKey("description") && info["description"] is string)
                    {
                        packageState.info.description = (string)info["description"];
                    }

                    if (info.ContainsKey("type") && info["type"] is string)
                    {
                        packageState.info.type = (string)info["type"];
                    }

                    if (info.ContainsKey("hideInEditor") && info["hideInEditor"] is bool)
                    {
                        packageState.info.visibility = (bool)info["hideInEditor"] ? PackageVisibility.AlwaysHidden : PackageVisibility.AlwaysVisible;
                    }
                    else
                    {
                        packageState.info.visibility = PackageVisibility.DependsOnType;
                    }

                    if (info.ContainsKey("unity") && info["unity"] is string)
                    {
                        var splitVersions = ((string)info["unity"]).Split('.');
                        packageState.info.unity = new PackageUnityVersion
                        {
                            isEnable = true, major = splitVersions[0], minor = splitVersions.Length > 1 ? splitVersions[1] : "", release = ""
                        };

                        if (info.ContainsKey("unityRelease") && info["unityRelease"] is string)
                        {
                            packageState.info.unity.release = (string)info["unityRelease"];
                        }
                    }
                    else
                    {
                        var unityVersion = InternalEditorUtility.GetUnityVersion();
                        packageState.info.unity = new PackageUnityVersion
                        {
                            isEnable = false, major = unityVersion.Major.ToString(), minor = unityVersion.Minor.ToString(), release = ""
                        };
                    }

                    if (info.ContainsKey("dependencies"))
                    {
                        if (!(info["dependencies"] is IDictionary))
                        {
                            packageState.isValidFile = false;
                            return;
                        }
                        var dependenciesDictionary = (IDictionary)info["dependencies"];
                        foreach (var packageName in dependenciesDictionary.Keys)
                        {
                            var dependency = new PackageDependency
                            {
                                packageName = packageName as string,
                                version     = dependenciesDictionary[packageName] as string
                            };
                            packageState.dependencies.Add(dependency);
                        }
                    }
                }

                packageState.isModified = false;
            }
            catch (IOException)
            {
                Debug.Log($"Couldn't open package manifest file {assetPath}.");
                packageState.isValidFile = false;
            }
        }