Esempio n. 1
0
        public async Task <List <InstalledPackage> > GetModificationPackages(string packageFullName, PackageFindMode mode = PackageFindMode.Auto, CancellationToken cancellationToken = default, IProgress <ProgressData> progress = default)
        {
            if (mode == PackageFindMode.Auto)
            {
                mode = (await UserHelper.IsAdministratorAsync(cancellationToken).ConfigureAwait(false)) ? PackageFindMode.AllUsers : PackageFindMode.CurrentUser;
            }

            var find = await Task.Run(() => mode == PackageFindMode.CurrentUser?PackageManager.Value.FindPackageForUser(string.Empty, packageFullName) : PackageManager.Value.FindPackage(packageFullName), cancellationToken).ConfigureAwait(false);

            if (find == null)
            {
                var packageIdentity = PackageIdentity.FromFullName(packageFullName);
                find = await Task.Run(() => mode == PackageFindMode.CurrentUser?PackageManager.Value.FindPackageForUser(string.Empty, packageIdentity.AppName) : PackageManager.Value.FindPackage(packageIdentity.AppName), cancellationToken).ConfigureAwait(false);

                if (find == null)
                {
                    return(new List <InstalledPackage>());
                }
            }

            var dependencies = find.Dependencies;

            var list = new List <InstalledPackage>();

            foreach (var dep in dependencies.Where(p => p.IsOptional))
            {
                var converted = await ConvertFrom(dep, cancellationToken).ConfigureAwait(false);

                list.Add(converted);
            }

            return(list);
        }