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; } }
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}."); } }
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; } }