コード例 #1
0
        public static PackageListViewModel Convert(ILocalPackageCache cache, RunningInstallationTaskList runningTasks, IInstalledPackageArchive installPackageArchive, CompletedInstallationTaskList completedTasks)
        {
            var model = new PackageListViewModel();

            foreach(var packageId in cache.AvailablePackages)
            {
                var package = new LocalPackageInformation
                                  {
                                      PackageId = packageId,
                                      LatestAvailableVersion = cache.GetLatestVersion(packageId).Version.ToString()
                                  };

                var installedPackage = installPackageArchive.GetCurrentInstalledVersion(packageId);
                package.InstalledVersion = installedPackage == null ? "0.0.0.0" : installedPackage.Version.ToString();

                package.LastInstallationTask =
                    completedTasks
                        .Where(t => t.PackageId == packageId).OrderByDescending(t => t.LogFileName).
                        FirstOrDefault();

                package.CurrentTask = runningTasks.Count > 0 ? runningTasks
                           .Where(t => t.PackageId == packageId)
                           .Select(t =>
                                       {
                                           var lastOrDefault = t.ProgressReports.LastOrDefault();
                                           return lastOrDefault != null ? new InstallTaskViewModel
                                                                               {
                                                                                   Messages = t.ProgressReports.Select(pr => pr.Message).ToArray(),
                                                                                   Status = Enum.GetName(typeof(TaskStatus), t.Task.Status),
                                                                                   PackageId = t.PackageId,
                                                                                   Version = t.Version,
                                                                                   LastMessage = t.ProgressReports.Count > 0 ? lastOrDefault.Message : ""
                                                                               } : null;
                                       }).FirstOrDefault()
                           : null;

                package.AvailableVersions = cache.AvailablePackageVersions(packageId).ToList();
                model.Packages.Add(package);
            }

            model.CurrentTasks = runningTasks
                .Select(t =>
                            {
                                var progressReport = t.ProgressReports.LastOrDefault();
                                return progressReport != null
                                           ? new InstallTaskViewModel
                                                 {
                                                     Messages = t.ProgressReports.Select(pr => pr.Message).ToArray(),
                                                     Status = Enum.GetName(typeof (TaskStatus), t.Task.Status),
                                                     PackageId = t.PackageId,
                                                     Version = t.Version,
                                                     LastMessage =
                                                         t.ProgressReports.Count > 0 ? progressReport.Message : ""
                                                 }
                                           : null;
                            }).ToList();

            model.AvailableVersions =
                cache.AllCachedPackages().Select(p => p.Version.ToString()).Distinct().OrderByDescending(s => s);

            return model;
        }