コード例 #1
0
        private static List<LocalPackageInformation> BuildPackageInformation(IEnumerable<IPackage> packages, IInstalledPackageArchive installCache, InstallationTask[] runningTasks, CompletedInstallationTaskList completedInstallations)
        {
            List<LocalPackageInformation> packageInformations = new List<LocalPackageInformation>();
            var packagesById = packages.GroupBy(p=>p.Id);
            foreach (var packageVersions in packagesById)
            {
                var installedPackage = installCache.GetCurrentInstalledVersion(packageVersions.Key);
                var latestAvailablePackage = packageVersions.OrderByDescending(p => p.Version).FirstOrDefault();
                var availablePackageVersions = packageVersions.OrderByDescending(p=>p.Version).Select(p => p.Version.ToString());
                IEnumerable<InstallationTask> currentTasks = null;
                if (runningTasks != null)
                {
                    currentTasks = runningTasks.Where(t => t.PackageId == packageVersions.Key);
                }

                var packageInfo = new LocalPackageInformation();
                packageInfo.PackageId = packageVersions.Key;

                if (installedPackage != null)
                    packageInfo.InstalledVersion = installedPackage.Version.ToString();

                if (latestAvailablePackage != null)
                    packageInfo.LatestAvailableVersion = latestAvailablePackage.Version.ToString();

                if (availablePackageVersions != null)
                    packageInfo.AvailableVersions = availablePackageVersions.ToList();

                if (currentTasks != null)
                    packageInfo.CurrentTask = currentTasks.Select(delegate(InstallationTask t)
                                    {
                                        var installation = new InstallTaskViewModel();
                                        installation.Messages = t.ProgressReports.Select(pr => pr.Message).ToArray();
                                        if (t.Task != null)
                                        {
                                            installation.Status = Enum.GetName(typeof (TaskStatus), t.Task.Status);
                                        }
                                        installation.PackageId = t.PackageId;
                                        installation.Version = t.Version;
                                        installation.LastMessage = t.ProgressReports.Count > 0
                                                               ? t.ProgressReports.LastOrDefault().Message
                                                               : "";
                            return installation;
                        }).FirstOrDefault();

                packageInfo.OutOfDate = false;
                if (installedPackage != null)
                {
                    if (latestAvailablePackage != null)
                    {
                        packageInfo.OutOfDate = installedPackage.Version < latestAvailablePackage.Version;
                    }
                } else
                {
                    if (latestAvailablePackage != null)
                    {
                        packageInfo.OutOfDate = true;
                    }
                }

                if (completedInstallations != null)
                {
                    var installationTask =
                        completedInstallations.OrderByDescending(i => i.DateStarted).FirstOrDefault(
                            i => i.PackageId == packageInfo.PackageId);
                    if (installationTask != null)
                    {
                        packageInfo.InstallationResult = installationTask.Result;
                    }
                }

                packageInformations.Add(packageInfo);
            }

            return packageInformations;
        }