private void UpdateClick() { if (package.IsPackageManagerUI) { // Let's not allow updating of the UI if there are build errrors, as for now, that will prevent the UI from reloading properly. if (EditorUtility.scriptCompilationFailed) { EditorUtility.DisplayDialog("", "The Package Manager UI cannot be updated while there are script compilation errors in your project. Please fix the errors and try again.", "Ok"); return; } if (!EditorUtility.DisplayDialog("", "Updating this package will close the Package Manager window. You will have to re-open it after the update is done. Do you want to continue?", "Yes", "No")) { return; } if (package.AddSignal.Operation != null) { package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess; package.AddSignal.Operation.OnOperationError -= OnAddOperationError; package.AddSignal.ResetEvents(); package.AddSignal.Operation = null; } DetailError.ClearError(); EditorApplication.update += CloseAndUpdate; return; } DetailError.ClearError(); package.Add(SelectedPackage); RefreshAddButton(); RefreshRemoveButton(); }
private void RemoveClick() { DetailError.ClearError(); package.Remove(); RefreshRemoveButton(); RefreshAddButton(); }
private void RemoveClick() { var result = 1; // Cancel if (!PackageManagerPrefs.SkipRemoveConfirmation) { result = EditorUtility.DisplayDialogComplex("Removing Package", "Are you sure you wanted to remove this package?", "Remove", "Cancel", "Remove and do not ask again"); } else { result = 0; } // Cancel if (result == 1) { return; } // Do not ask again if (result == 2) { PackageManagerPrefs.SkipRemoveConfirmation = true; } // Remove DetailError.ClearError(); package.Remove(); RefreshRemoveButton(); RefreshAddButton(); }
private void UpdateClick() { if (package.IsPackageManagerUI) { if (!EditorUtility.DisplayDialog("", "Updating this package will temporarily close the Package Manager window. Do you want to continue?", "Yes", "No")) { return; } if (package.AddSignal.Operation != null) { package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess; package.AddSignal.Operation.OnOperationError -= OnAddOperationError; package.AddSignal.ResetEvents(); package.AddSignal.Operation = null; } DetailError.ClearError(); EditorApplication.update += CloseAndUpdate; return; } DetailError.ClearError(); package.Update(); RefreshAddButton(); RefreshRemoveButton(); }
private void RemoveClick() { if (DisplayPackage.IsBuiltIn) { var roots = Collection.GetDependents(DisplayPackage).ToList(); if (roots.Any()) { if (roots.Count > MaxDependentList) { Debug.Log(GetDependentMessage(roots, int.MaxValue)); } var message = GetDependentMessage(roots); EditorUtility.DisplayDialog("Cannot Disable Built-In Package", message, "Ok"); return; } } var result = 1; // Cancel if (!PackageManagerPrefs.SkipRemoveConfirmation) { result = EditorUtility.DisplayDialogComplex("Removing Package", "Are you sure you wanted to remove this package?", "Remove", "Cancel", "Remove and do not ask again"); } else { result = 0; } // Cancel if (result == 1) { return; } // Do not ask again if (result == 2) { PackageManagerPrefs.SkipRemoveConfirmation = true; } // Remove DetailError.ClearError(); package.Remove(); RefreshRemoveButton(); RefreshAddButton(); }
private void DevelopClick() { // Embed DetailError.ClearError(); package.Embed(info => { RefreshAddButton(); RefreshRemoveButton(); RefreshDevelopButton(); }); UIUtils.SetElementDisplay(UpdateBuiltIn, false); UIUtils.SetElementDisplay(UpdateButton, false); UIUtils.SetElementDisplay(RemoveButton, false); RefreshDevelopButton(); }
internal void SetDisplayPackage(PackageInfo packageInfo) { DisplayPackage = packageInfo; var detailVisible = true; Error error = null; if (package == null || DisplayPackage == null) { detailVisible = false; UIUtils.SetElementDisplay(DocumentationContainer, false); UIUtils.SetElementDisplay(CustomContainer, false); UIUtils.SetElementDisplay(UpdateBuiltIn, false); foreach (var extension in PackageManagerExtensions.Extensions) { extension.OnPackageSelectionChange(null); } } else { SetUpdateVisibility(true); UIUtils.SetElementDisplay(ViewDocButton, true); RemoveButton.visible = true; if (string.IsNullOrEmpty(DisplayPackage.Description)) { DetailDesc.text = "There is no description for this package."; DetailDesc.AddToClassList(emptyDescriptionClass); } else { DetailDesc.text = DisplayPackage.Description; DetailDesc.RemoveFromClassList(emptyDescriptionClass); } root.Q <Label>("detailTitle").text = DisplayPackage.DisplayName; DetailVersion.text = "Version " + DisplayPackage.VersionWithoutTag; if (DisplayPackage.IsInDevelopment || DisplayPackage.HasVersionTag(PackageTag.preview)) { UIUtils.SetElementDisplay(GetTag(PackageTag.verified), false); } else { var unityVersionParts = Application.unityVersion.Split('.'); var unityVersion = string.Format("{0}.{1}", unityVersionParts[0], unityVersionParts[1]); VerifyLabel.text = unityVersion + " verified"; UIUtils.SetElementDisplay(GetTag(PackageTag.verified), DisplayPackage.IsVerified); } UIUtils.SetElementDisplay(GetTag(PackageTag.inDevelopment), DisplayPackage.IsInDevelopment); UIUtils.SetElementDisplay(GetTag(PackageTag.local), DisplayPackage.IsLocal); UIUtils.SetElementDisplay(GetTag(PackageTag.preview), DisplayPackage.IsPreview); UIUtils.SetElementDisplay(DocumentationContainer, DisplayPackage.Origin != PackageSource.BuiltIn); UIUtils.SetElementDisplay(ChangelogContainer, DisplayPackage.HasChangelog(DisplayPackage)); root.Q <Label>("detailName").text = DisplayPackage.Name; root.Q <ScrollView>("detailView").scrollOffset = new Vector2(0, 0); DetailModuleReference.text = ""; var isBuiltIn = DisplayPackage.IsBuiltIn; if (isBuiltIn) { DetailModuleReference.text = DisplayPackage.BuiltInDescription; } DetailAuthor.text = ""; if (!string.IsNullOrEmpty(DisplayPackage.Author)) { DetailAuthor.text = string.Format("Author: {0}", DisplayPackage.Author); } UIUtils.SetElementDisplay(DetailDesc, !isBuiltIn); UIUtils.SetElementDisplay(DetailVersion, !isBuiltIn); UIUtils.SetElementDisplayNonEmpty(DetailModuleReference); UIUtils.SetElementDisplayNonEmpty(DetailAuthor); if (DisplayPackage.Errors.Count > 0) { error = DisplayPackage.Errors.First(); } RefreshAddButton(); RefreshRemoveButton(); UIUtils.SetElementDisplay(CustomContainer, true); package.AddSignal.OnOperation += OnAddOperation; package.RemoveSignal.OnOperation += OnRemoveOperation; foreach (var extension in PackageManagerExtensions.Extensions) { extension.OnPackageSelectionChange(DisplayPackage.Info); } } // Set visibility root.Q <VisualElement>("detail").visible = detailVisible; if (null == error) { error = PackageCollection.Instance.GetPackageError(package); } if (error != null) { SetError(error); } else { DetailError.ClearError(); } }
internal void SetDisplayPackage(PackageInfo packageInfo) { DisplayPackage = packageInfo; var detailVisible = true; Error error = null; if (package == null || DisplayPackage == null) { detailVisible = false; UIUtils.SetElementDisplay(DocumentationContainer, false); UIUtils.SetElementDisplay(CustomContainer, false); UIUtils.SetElementDisplay(UpdateBuiltIn, false); foreach (var extension in PackageManagerExtensions.Extensions) { extension.OnPackageSelectionChange(null); } } else { SetUpdateVisibility(true); RemoveButton.visible = true; if (string.IsNullOrEmpty(DisplayPackage.Description)) { DetailDesc.text = "There is no description for this package."; DetailDesc.AddToClassList(emptyDescriptionClass); } else { DetailDesc.text = DisplayPackage.Description; DetailDesc.RemoveFromClassList(emptyDescriptionClass); } root.Q <Label>("detailTitle").text = DisplayPackage.DisplayName; DetailVersion.text = "Version " + DisplayPackage.VersionWithoutTag; if (DisplayPackage.HasTag(PackageTag.preview)) { UIUtils.SetElementDisplay(GetTag(PackageTag.verified), false); } else { var unityVersionParts = Application.unityVersion.Split('.'); var unityVersion = string.Format("{0}.{1}", unityVersionParts[0], unityVersionParts[1]); VerifyLabel.text = unityVersion + " verified"; UIUtils.SetElementDisplay(GetTag(PackageTag.verified), DisplayPackage.IsVerified); } foreach (var tag in SupportedTags()) { UIUtils.SetElementDisplay(GetTag(tag), DisplayPackage.HasTag(tag)); } UIUtils.SetElementDisplay(DocumentationContainer, DisplayPackage.Origin != PackageSource.BuiltIn); UIUtils.SetElementDisplay(ChangelogContainer, HasChangelog(DisplayPackage)); root.Q <Label>("detailName").text = DisplayPackage.Name; root.Q <ScrollView>("detailView").scrollOffset = new Vector2(0, 0); DetailModuleReference.text = ""; var isModule = PackageInfo.IsModule(DisplayPackage.Name); if (PackageInfo.IsModule(DisplayPackage.Name)) { DetailModuleReference.text = DisplayPackage.Description; if (string.IsNullOrEmpty(DisplayPackage.Description)) { DetailModuleReference.text = string.Format("This built in package controls the presence of the {0} module.", DisplayPackage.ModuleName); } } // Show Status string on package if need be DetailPackageStatus.text = string.Empty; if (!isModule) { var displayPackageList = package.Current ?? package.Latest; if (displayPackageList.State == PackageState.Outdated) { DetailPackageStatus.text = "This package is installed for your project and has an available update."; } else if (displayPackageList.State == PackageState.InProgress) { DetailPackageStatus.text = "This package is being updated or installed."; } else if (displayPackageList.State == PackageState.Error) { DetailPackageStatus.text = "This package is in error, please check console logs for more details."; } else if (displayPackageList.IsCurrent) { DetailPackageStatus.text = "This package is installed for your project."; } else { DetailPackageStatus.text = "This package is not installed for your project."; } } DetailAuthor.text = string.Format("Author: {0}", DisplayPackage.Author ?? "Unity Technologies Inc."); UIUtils.SetElementDisplay(DetailDesc, !isModule); UIUtils.SetElementDisplay(DetailVersion, !isModule); UIUtils.SetElementDisplayNonEmpty(DetailModuleReference); UIUtils.SetElementDisplayNonEmpty(DetailPackageStatus); UIUtils.SetElementDisplayNonEmpty(DetailAuthor); if (DisplayPackage.Errors.Count > 0) { error = DisplayPackage.Errors.First(); } RefreshAddButton(); RefreshRemoveButton(); UIUtils.SetElementDisplay(CustomContainer, true); package.AddSignal.OnOperation += OnAddOperation; package.RemoveSignal.OnOperation += OnRemoveOperation; foreach (var extension in PackageManagerExtensions.Extensions) { extension.OnPackageSelectionChange(DisplayPackage.Info); } } // Set visibility root.Q <VisualElement>("detail").visible = detailVisible; root.Q <VisualElement>(emptyId).visible = !detailVisible; if (error != null) { Debug.LogError("Error with package details: " + error.message); SetError(error); } else { DetailError.ClearError(); } }
private void RemoveClick() { if (DisplayPackage.IsBuiltIn) { var roots = Collection.GetDependents(DisplayPackage).ToList(); if (roots.Any()) { if (roots.Count > MaxDependentList) { Debug.Log(GetDependentMessage(roots, int.MaxValue)); } var message = GetDependentMessage(roots); EditorUtility.DisplayDialog("Cannot Disable Built-In Package", message, "Ok"); return; } } if (DisplayPackage.IsInDevelopment) { if (!EditorUtility.DisplayDialog("Unity Package Manager", "You will loose all your changes (if any) if you delete a package in development. Are you sure?", "Yes", "No")) { return; } RefreshRemoveButton(); RefreshAddButton(); Directory.Delete(DisplayPackage.Info.resolvedPath, true); AssetDatabase.Refresh(); EditorApplication.delayCall += () => { if (Collection.Filter == PackageFilter.InDevelopment) { var otherInDev = Collection.listPackages.Any(info => info.IsInDevelopment && info.Name != package.Name); PackageManagerWindow.SelectPackageAndFilter(DisplayPackage.VersionId, otherInDev ? PackageFilter.InDevelopment : PackageFilter.Local, true); } else { PackageManagerWindow.SelectPackageAndFilter(DisplayPackage.VersionId, null, true); } }; return; } var result = 0; if (DisplayPackage.IsBuiltIn) { if (!PackageManagerPrefs.SkipDisableConfirmation) { result = EditorUtility.DisplayDialogComplex("Disable Built-In Package", "Are you sure you want to disable this built-in package?", "Disable", "Cancel", "Never ask"); } } else { if (!PackageManagerPrefs.SkipRemoveConfirmation) { result = EditorUtility.DisplayDialogComplex("Removing Package", "Are you sure you want to remove this package?", "Remove", "Cancel", "Never ask"); } } // Cancel if (result == 1) { return; } // Do not ask again if (result == 2) { if (DisplayPackage.IsBuiltIn) { PackageManagerPrefs.SkipDisableConfirmation = true; } else { PackageManagerPrefs.SkipRemoveConfirmation = true; } } // Remove DetailError.ClearError(); package.Remove(); RefreshRemoveButton(); RefreshAddButton(); }
private void SetDisplayPackage(PackageInfo packageInfo, Error packageError = null) { DisplayPackage = packageInfo; Error error = null; var detailVisible = package != null && DisplayPackage != null; if (!detailVisible) { RefreshExtensions(null); } else { SetUpdateVisibility(true); var isBuiltIn = DisplayPackage.IsBuiltIn; UIUtils.SetElementDisplay(ViewDocButton, true); UIUtils.SetElementDisplay(ViewLicensesContainer, !isBuiltIn); RemoveButton.visible = true; if (string.IsNullOrEmpty(DisplayPackage.Description)) { DetailDesc.text = "There is no description for this package."; DetailDesc.AddToClassList(emptyDescriptionClass); } else { DetailDesc.text = DisplayPackage.Description; DetailDesc.RemoveFromClassList(emptyDescriptionClass); } root.Q <Label>("detailTitle").text = DisplayPackage.DisplayName; DetailVersion.text = "Version " + DisplayPackage.VersionWithoutTag; if (DisplayPackage.IsInDevelopment || DisplayPackage.HasVersionTag(PackageTag.preview)) { UIUtils.SetElementDisplay(GetTag(PackageTag.verified), false); } else { var unityVersionParts = Application.unityVersion.Split('.'); var unityVersion = string.Format("{0}.{1}", unityVersionParts[0], unityVersionParts[1]); VerifyLabel.text = unityVersion + " verified"; UIUtils.SetElementDisplay(GetTag(PackageTag.verified), DisplayPackage.IsVerified); } UIUtils.SetElementDisplay(GetTag(PackageTag.inDevelopment), DisplayPackage.IsInDevelopment); UIUtils.SetElementDisplay(GetTag(PackageTag.local), DisplayPackage.IsLocal); UIUtils.SetElementDisplay(GetTag(PackageTag.git), DisplayPackage.IsGit); UIUtils.SetElementDisplay(GetTag(PackageTag.preview), DisplayPackage.IsPreview); UIUtils.SetElementDisplay(EditPackageManifestButton, DisplayPackage.IsInstalled && !package.IsBuiltIn); UIUtils.SetElementDisplay(DocumentationContainer, true); UIUtils.SetElementDisplay(ChangelogContainer, DisplayPackage.HasChangelog); SampleList.SetPackage(DisplayPackage); root.Q <Label>("detailName").text = DisplayPackage.Name; DetailScrollView.scrollOffset = new Vector2(0, 0); DetailModuleReference.text = ""; if (isBuiltIn) { DetailModuleReference.text = DisplayPackage.BuiltInDescription; } DetailAuthor.text = ""; if (!string.IsNullOrEmpty(DisplayPackage.Author)) { DetailAuthor.text = string.Format("Author: {0}", DisplayPackage.Author); } // If the package details is not enabled, don't update the date yet as we are fetching new information if (enabledSelf) { DetailDate.text = ""; // In Development packages are not published, so we do not show any published date if (DisplayPackage.Info != null && !DisplayPackage.IsInDevelopment) { if (DisplayPackage.Info.datePublished != null) { DetailDate.text = $"Published Date: {DisplayPackage.Info.datePublished.Value:MMMM dd, yyyy}"; } else if (DisplayPackage.IsCore || DisplayPackage.IsInstalled) { // For core packages, or installed packages that are bundled with Unity without being published, use Unity's build date var unityBuildDate = new DateTime(1970, 1, 1, 0, 0, 0, 0); unityBuildDate = unityBuildDate.AddSeconds(InternalEditorUtility.GetUnityVersionDate()); DetailDate.text = $"Published Date: {unityBuildDate:MMMM dd, yyyy}"; } } } UIUtils.SetElementDisplay(DetailDesc, !isBuiltIn); UIUtils.SetElementDisplay(DetailVersion, !isBuiltIn); UIUtils.SetElementDisplayNonEmpty(DetailModuleReference); UIUtils.SetElementDisplayNonEmpty(DetailAuthor); UIUtils.SetElementDisplayNonEmpty(DetailDate); if (DisplayPackage.Errors.Count > 0) { error = DisplayPackage.Errors.First(); } RefreshAddButton(); RefreshRemoveButton(); RefreshDevelopButton(); UIUtils.SetElementDisplay(CustomContainer, true); package.AddSignal.OnOperation += OnAddOperation; package.RemoveSignal.OnOperation += OnRemoveOperation; package.EmbedSignal.OnOperation += OnDevelopOperation; RefreshExtensions(DisplayPackage); ShowDependencies(); } OnEditorSelectionChanged(); // Set visibility SetContentVisibility(detailVisible); if (packageError == null && package != null && package.Error != null) { packageError = package.Error; } if (null == error) { error = packageError; } if (error != null) { SetError(error); } else { DetailError.ClearError(); } }
public void SetPackage(Package package, PackageFilter filter) { if (this.package != null) { if (this.package.AddSignal.Operation != null) { this.package.AddSignal.Operation.OnOperationError -= OnAddOperationError; this.package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess; } if (this.package.RemoveSignal.Operation != null) { this.package.RemoveSignal.Operation.OnOperationError -= OnRemoveOperationError; } } this.filter = filter; this.package = package; var detailVisible = true; Error error = null; if (package == null || Display(package) == null) { detailVisible = false; UIUtils.SetElementDisplay(ViewChangelogButton, false); UIUtils.SetElementDisplay(ViewDocButton, false); } else { SetUpdateVisibility(true); RemoveButton.visible = true; var displayPackage = Display(package); if (string.IsNullOrEmpty(displayPackage.Description)) { DetailDesc.text = "There is no description for this package."; DetailDesc.AddToClassList(emptyDescriptionClass); } else { DetailDesc.text = displayPackage.Description; DetailDesc.RemoveFromClassList(emptyDescriptionClass); } root.Q <Label>("detailTitle").text = displayPackage.DisplayName; DetailVersion.text = "Version " + displayPackage.VersionWithoutTag; if (displayPackage.HasTag(PackageTag.preview)) { UIUtils.SetElementDisplay(GetTag(PackageTag.verified), false); } else { var unityVersionParts = Application.unityVersion.Split('.'); var unityVersion = string.Format("{0}.{1}", unityVersionParts[0], unityVersionParts[1]); VerifyLabel.text = unityVersion + " Verified"; UIUtils.SetElementDisplay(GetTag(PackageTag.verified), displayPackage.IsVerified); } foreach (var tag in SupportedTags()) { UIUtils.SetElementDisplay(GetTag(tag), displayPackage.HasTag(tag)); } if (Display(package).Origin == PackageOrigin.Builtin) { UIUtils.SetElementDisplay(ViewChangelogButton, false); UIUtils.SetElementDisplay(ViewDocButton, false); } else { var currentVersion = package.Current; var hasUpdate = currentVersion != null && displayPackage.Version.CompareByPrecedence(currentVersion.Version) > 0; UIUtils.SetElementDisplay(ViewChangelogButton, displayPackage.IsCurrent || hasUpdate); UIUtils.SetElementDisplay(ViewDocButton, true); } root.Q <Label>("detailName").text = displayPackage.Name; root.Q <ScrollView>("detailView").scrollOffset = new Vector2(0, 0); DetailModuleReference.text = ""; var isModule = PackageInfo.IsModule(displayPackage.Name); if (PackageInfo.IsModule(displayPackage.Name)) { DetailModuleReference.text = displayPackage.Description; if (string.IsNullOrEmpty(displayPackage.Description)) { DetailModuleReference.text = string.Format("This built in package controls the presence of the {0} module.", displayPackage.ModuleName); } } // Show Status string on package if need be DetailPackageStatus.text = string.Empty; if (!isModule) { var displayPackageList = package.Current ?? package.Latest; if (displayPackageList.State == PackageState.Outdated) { DetailPackageStatus.text = "This package is installed for your project and has an available update."; } else if (displayPackageList.State == PackageState.InProgress) { DetailPackageStatus.text = "This package is being updated or installed."; } else if (displayPackageList.State == PackageState.Error) { DetailPackageStatus.text = "This package is in error, please check console logs for more details."; } else if (displayPackageList.IsCurrent) { DetailPackageStatus.text = "This package is installed for your project."; } else { DetailPackageStatus.text = "This package is not installed for your project."; } } DetailAuthor.text = string.Format("Author: {0}", displayPackage.Author ?? "Unity Technologies Inc."); UIUtils.SetElementDisplay(DetailDesc, !isModule); UIUtils.SetElementDisplay(DetailVersion, !isModule); UIUtils.SetElementDisplayNonEmpty(DetailModuleReference); UIUtils.SetElementDisplayNonEmpty(DetailPackageStatus); UIUtils.SetElementDisplayNonEmpty(DetailAuthor); if (displayPackage.Errors.Count > 0) { error = displayPackage.Errors.First(); } RefreshAddButton(); RefreshRemoveButton(); this.package.AddSignal.OnOperation += OnAddOperation; this.package.RemoveSignal.OnOperation += OnRemoveOperation; } // Set visibility root.Q <VisualElement>("detail").visible = detailVisible; root.Q <VisualElement>(emptyId).visible = !detailVisible; if (error != null) { Debug.LogError("Error with package details: " + error.message); SetError(error); } else { DetailError.ClearError(); } }