Example #1
0
        /// <summary>
        /// Downloads mods in an asynchronous fashion.
        /// </summary>
        public static async Task DownloadPackagesAsync(IEnumerable <string> modIds, bool includePrerelease, bool includeUnlisted, CancellationToken token = default)
        {
            var nugetUtility    = IoC.Get <NugetHelper>();
            var packages        = new List <IPackageSearchMetadata>();
            var missingPackages = new List <string>();

            /* Get details of every mod. */
            foreach (var modId in modIds)
            {
                var packageDetails = await nugetUtility.GetPackageDetails(modId, includePrerelease, includeUnlisted, token);

                if (packageDetails.Any())
                {
                    packages.Add(packageDetails.Last());
                }
                else
                {
                    missingPackages.Add(modId);
                }
            }

            /* Get dependencies of every mod. */
            foreach (var package in packages.ToArray())
            {
                var dependencies = await nugetUtility.FindDependencies(package, includePrerelease, includeUnlisted, token);

                packages.AddRange(dependencies.Dependencies);
                missingPackages.AddRange(dependencies.PackagesNotFound);
            }

            /* Remove already existing packages. */
            var allMods = IoC.Get <ManageModsViewModel>().Mods.ToArray();
            HashSet <string> allModIds = new HashSet <string>(allMods.Length);

            foreach (var mod in allMods)
            {
                allModIds.Add(mod.ModConfig.ModId);
            }

            // Remove mods we already have.
            packages        = packages.Where(x => !allModIds.Contains(x.Identity.Id)).ToList();
            missingPackages = missingPackages.Where(x => !allModIds.Contains(x)).ToList();

            ActionWrappers.ExecuteWithApplicationDispatcher(() =>
            {
                var dialog = new NugetFetchPackageDialog(packages, missingPackages);
                dialog.ShowDialog();
            });
        }
Example #2
0
        /// <summary>
        /// Downloads mods in an asynchronous fashion provided a list of known and missing packages.
        /// </summary>
        /// <param name="packages">List of existing known packages.</param>
        /// <param name="missingPackages">List of packages known to be missing.</param>
        /// <param name="includePrerelease">Include pre-release packages.</param>
        /// <param name="includeUnlisted">Include unlisted packages.</param>
        /// <param name="token">Used to cancel the operation.</param>
        public static async Task DownloadNuGetPackagesAsync(List <NugetTuple <IPackageSearchMetadata> > packages, List <string> missingPackages, bool includePrerelease, bool includeUnlisted, CancellationToken token = default)
        {
            if (!_hasInternetConnection)
            {
                return;
            }

            /* Get dependencies of every mod. */
            foreach (var package in packages.ToArray())
            {
                var repository   = package.Repository;
                var searchResult = await repository.FindDependencies(package.Generic, includePrerelease, includeUnlisted, token);

                packages.AddRange(
                    searchResult.Dependencies.Select(x => new NugetTuple <IPackageSearchMetadata>(package.Repository, x)));
                missingPackages.AddRange(searchResult.PackagesNotFound);
            }

            /* Remove already existing packages. */
            var allMods = IoC.Get <ModConfigService>().Mods.ToArray();
            HashSet <string> allModIds = new HashSet <string>(allMods.Length);

            foreach (var mod in allMods)
            {
                allModIds.Add(mod.Config.ModId);
            }

            // Remove mods we already have.
            packages        = packages.Where(x => !allModIds.Contains(x.Generic.Identity.Id)).ToList();
            missingPackages = missingPackages.Where(x => !allModIds.Contains(x)).ToList();

            ActionWrappers.ExecuteWithApplicationDispatcher(() =>
            {
                var dialog = new NugetFetchPackageDialog(packages, missingPackages);
                dialog.ShowDialog();
            });
        }