Exemple #1
0
        /// <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());
        }