/// <summary> /// <para>Displays an overview of the package information as a GUI.</para> /// <para>パッケージの概要をGUIとして表示する。</para> /// </summary> /// <param name="summary"> /// <para>An overview of the package information.</para> /// <para>パッケージの概要。</para> /// </param> /// <param name="bold"> /// <para>Bold GUIStyle.</para> /// <para>太字のGUIStyle。</para> /// </param> /// <param name="window"> /// <para>Main window of NuGet importer.</para> /// <para>NuGet importerのメインウィンドウ。</para> /// </param> /// <param name="onlyStable"> /// <para>Whether only stable.</para> /// <para>安定版のみか。</para> /// </param> /// <param name="method"> /// <para>Method to select a version.</para> /// <para>バージョンを選択する方法。</para> /// <returns> /// <para>Task</para> /// </returns> internal static async Task ToGUI(this PackageSummary summary, GUIStyle bold, NuGetImporterWindow window, bool onlyStable, VersionSelectMethod method) { var tasks = new List <Task>(); var sizeScale = window.position.width / 1920; using (new EditorGUILayout.HorizontalScope(GUILayout.Height(150))) { using (new EditorGUILayout.VerticalScope(GUILayout.Width(150 * sizeScale))) { GUILayout.FlexibleSpace(); using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); EditorGUILayout.LabelField(new GUIContent(summary.Image), GUILayout.Width(128 * sizeScale), GUILayout.Height(128 * sizeScale)); GUILayout.FlexibleSpace(); } GUILayout.FlexibleSpace(); } using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true))) { using (new EditorGUILayout.HorizontalScope()) { GUILayoutExtention.WrapedLabel(summary.PackageId, 24); } using (new EditorGUILayout.HorizontalScope()) { GUILayout.Label("version", bold); List <string> versions = onlyStable ? summary.StableVersion : summary.AllVersion; var index = versions.Contains(summary.SelectedVersion) ? versions.IndexOf(summary.SelectedVersion) : 0; summary.SelectedVersion = versions[EditorGUILayout.Popup(index, versions.ToArray(), GUILayout.ExpandWidth(true))]; var isSameVersion = summary.SelectedVersion == summary.InstalledVersion; var installText = summary.InstalledVersion == null ? "Install" : isSameVersion ? "Repair" : "Change Version"; if (GUILayout.Button(installText, GUILayout.ExpandWidth(true))) { if (summary.InstalledVersion == null) { tasks.Add(PackageOperation(PackageManager.InstallPackage(summary.PackageId, summary.SelectedVersion, onlyStable, method), window, summary.PackageId, "Installation finished.")); } else if (isSameVersion) { tasks.Add(PackageOperation(PackageManager.FixPackage(summary.PackageId), window, summary.PackageId, "The repair finished.")); } else { tasks.Add(PackageOperation(PackageManager.ChangePackageVersion(summary.PackageId, summary.SelectedVersion, onlyStable, method), window, summary.PackageId, "Version change finished.")); } } using (new EditorGUI.DisabledScope(!isSameVersion)) { if (GUILayout.Button("Uninstall", GUILayout.ExpandWidth(true))) { tasks.Add(PackageOperation(PackageManager.UninstallPackages(summary.PackageId, onlyStable), window, summary.PackageId, "Uninstallation finished.")); } } } } } await Task.WhenAll(tasks); }
/// <summary> /// <para>Find removable packages when the specified package is removed.</para> /// <para>定のパッケージを除去した際取り除けるパッケージを探す。</para> /// </summary> /// <param name="removePackageId"> /// <para>Remove package.</para> /// <para>除去するパッケージ。</para> /// </param> /// <param name="onlyStable"> /// <para>Whether use only stable version.</para> /// <para>安定版のみつかうか。</para> /// </param> /// <param name="method"> /// <para>Method to select a version.</para> /// <para>バージョンを選択する方法。</para> /// </param> /// <returns> /// <para>Removable packages.</para> /// <para>除去可能なパッケージ。</para> /// </returns> /// <exception cref="System.InvalidOperationException"> /// <para>Thrown when dependency conflict occered.</para> /// <para>依存関係に衝突があるときthrowされる。</para> /// </exception> /// <exception cref="System.ArgumentException"> /// <para>Thrown when there is a circular reference or there is no version of package.</para> /// <para>循環参照があるときまたはパッケージのバージョンがないときthrowされる。</para> /// </exception> public static async Task <List <Package> > FindRemovablePackages(string removePackageId, bool onlyStable = true, VersionSelectMethod method = VersionSelectMethod.Suit) { if (PackageManager.RootPackage == null || PackageManager.Installed == null) { await PackageManager.Initialize(); } IEnumerable <(string packageId, string version)> installed = new List <(string packageId, string version)>(); if (PackageManager.RootPackage.package != null && PackageManager.RootPackage.package.Any()) { installed = PackageManager.RootPackage.package.Where(package => removePackageId != package.id).Select(package => { return(package.id, package.version); }).ToArray(); } IEnumerable <DependencyNode> allPackages = await GetInputedDependencyList(installed, onlyStable, method); IEnumerable <string> allPackagesName = allPackages.Select(package => package.PackageName); return(PackageManager.Installed.package.Where(pkg => !allPackagesName.Contains(pkg.id)).ToList()); }
/// <summary> /// <para>Find the required packages in the installed and specified packages.</para> /// <para>インストールされたパッケージと指定したパッケージを元に必要なパッケージを探す。</para> /// </summary> /// <param name="packageId"> /// <para>Package id</para> /// <para>パッケージのid</para> /// </param> /// <param name="version"> /// <para>Package version</para> /// <para>パッケージのバージョン</para> /// </param> /// <param name="onlyStable"> /// <para>Whether use only stable version.</para> /// <para>安定版のみつかうか。</para> /// </param> /// <param name="method"> /// <para>Method to select a version.</para> /// <para>バージョンを選択する方法。</para> /// <returns> /// <para>Required packages include installed and specified ones.</para> /// <para>インストール済みや、指定したものを含んだ必要なパッケージ。</para> /// </returns> /// <exception cref="System.InvalidOperationException"> /// <para>Thrown when dependency conflict occered.</para> /// <para>依存関係に衝突があるときthrowされる。</para> /// </exception> /// <exception cref="System.ArgumentException"> /// <para>Thrown when there is a circular reference or there is no version of package.</para> /// <para>循環参照があるときまたはパッケージのバージョンがないときthrowされる。</para> /// </exception> public static async Task <List <Package> > FindRequiredPackages(string packageId, string version, bool onlyStable = true, VersionSelectMethod method = VersionSelectMethod.Suit) { if (PackageManager.RootPackage == null) { await PackageManager.Initialize(); } IEnumerable <(string packageId, string version)> packageList = new List <(string packageId, string version)>() { (packageId, version) }; if (PackageManager.RootPackage.package != null && PackageManager.RootPackage.package.Any()) { packageList = packageList.Concat(PackageManager.RootPackage.package.Select(package => (package.id, package.version))); } IEnumerable <Package> requiredPackages = await GetInputedRequiredPackageList(packageList, onlyStable, method); return(requiredPackages.ToList()); }
/// <summary> /// <para>Find the required packages in the installed package.</para> /// <para>インストール済みのものから必要なパッケージを探す。</para> /// </summary> /// <param name="onlyStable"> /// <para>Whether use only stable version.</para> /// <para>安定版のみつかうか。</para> /// </param> /// <param name="method"> /// <para>Method to select a version.</para> /// <para>バージョンを選択する方法。</para> /// <returns> /// <para>Required packages include installed and specified ones.</para> /// <para>インストール済みや、指定したものを含んだ必要なパッケージ。</para> /// </returns> /// <exception cref="System.InvalidOperationException"> /// <para>Thrown when dependency conflict occered.</para> /// <para>依存関係に衝突があるときthrowされる。</para> /// </exception> /// <exception cref="System.ArgumentException"> /// <para>Thrown when there is a circular reference or there is no version of package.</para> /// <para>循環参照があるときまたはパッケージのバージョンがないときthrowされる。</para> /// </exception> public static async Task <List <Package> > CheckAllPackage(bool onlyStable = true, VersionSelectMethod method = VersionSelectMethod.Suit) { if (PackageManager.RootPackage == null || PackageManager.Installed == null) { await PackageManager.Initialize(); } IEnumerable <(string packageId, string version)> packageList = new List <(string packageId, string version)>(); if (PackageManager.RootPackage.package != null && PackageManager.RootPackage.package.Any()) { packageList = PackageManager.RootPackage.package.Select(package => (package.id, package.version)).ToArray(); } IEnumerable <Package> requiredPackages = await GetInputedRequiredPackageList(packageList, onlyStable, method); return(requiredPackages.ToList()); }