public PackageInstallationService(InstallationTaskQueue pendingInstalls, 
     RunningInstallationTaskList runningInstalls, 
     CompletedInstallationTaskList completedInstalls,
     IDeploymentService deploymentService,
     ILogger logger,
     IHubCommunicator hubCommunicator, 
     ILocalPackageCache agentCache, 
     IInstalledPackageArchive installCache, 
     RunningInstallationTaskList runningTasks, 
     IAgentSettingsManager settingsManager,
     IPackagesList allPackagesList,
     CurrentlyDownloadingList currentlyDownloadingList,
     INotificationService notificationService)
 {
     CompletedInstalls = completedInstalls;
     _deploymentService = deploymentService;
     _logger = logger;
     _hubCommunicator = hubCommunicator;
     _agentCache = agentCache;
     _installCache = installCache;
     _runningTasks = runningTasks;
     _settingsManager = settingsManager;
     _allPackagesList = allPackagesList;
     _currentlyDownloadingList = currentlyDownloadingList;
     _notificationService = notificationService;
     PendingInstalls = pendingInstalls;
     RunningInstalls = runningInstalls;
     TimedTask = new TimedSingleExecutionTask(5000, CheckForNewInstallations, _logger);
 }
 public PackageInstallationService(InstallationTaskQueue pendingInstalls, 
     RunningInstallationTaskList runningInstalls, 
     CompletedInstallationTaskList completedInstalls,
     IDeploymentService deploymentService)
 {
     CompletedInstalls = completedInstalls;
     _deploymentService = deploymentService;
     PendingInstalls = pendingInstalls;
     RunningInstalls = runningInstalls;
     TimedTask = new TimedSingleExecutionTask(5000, CheckForNewInstallations);
 }
        public static AgentStatusReport BuildStatus(IPackagesList availablePackages, ILocalPackageCache packageCache, IInstalledPackageArchive installCache, RunningInstallationTaskList runningTasks, IAgentSettingsManager settingsManager, ICurrentlyDownloadingList currentlyDownloadingList, CompletedInstallationTaskList completedInstallations)
        {
            // copying these collections to variables because sometimes they get modified while building the status report object
            string[] updating = new string[currentlyDownloadingList != null ? currentlyDownloadingList.Count : 0];
            if (currentlyDownloadingList != null) currentlyDownloadingList.CopyTo(updating, 0);

            IPackage[] packages = new IPackage[availablePackages != null ? availablePackages.Count : 0];
            if (availablePackages != null) availablePackages.CopyTo(packages, 0);

            var watchedPackageList = availablePackages.GetWatched().ToList();
            IPackage[] watchedPackages = new IPackage[watchedPackageList != null ? watchedPackageList.Count : 0];
            if (watchedPackageList != null) watchedPackageList.CopyTo(watchedPackages);

            InstallationTask[] tasks=new InstallationTask[runningTasks != null ? runningTasks.Count : 0];
            if (runningTasks != null) runningTasks.CopyTo(tasks);

            var status = new AgentStatusReport
                       {
                           packages = BuildPackageInformation(watchedPackages, installCache, tasks, completedInstallations),
                           currentTasks = tasks.Select(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;
                                                           }).ToList(),
                           availableVersions = packages.Select(p => p.Version.ToString()).Distinct().OrderByDescending(s => s).ToList(),
                           environment = settingsManager.Settings.DeploymentEnvironment,
                           updating = updating.ToList(),
                           isUpdating = currentlyDownloadingList.Downloading
                       };

            status.OutOfDate =
                status.packages.Any(p => p.OutOfDate);

            return status;
        }
 public HubCommunicationService(IHubCommunicator hubCommunicator,
     IPackagesList allPackagesList, 
     ILocalPackageCache localPackageCache,
     IInstalledPackageArchive installCache, 
     RunningInstallationTaskList runningTasks, 
     IAgentSettingsManager settingsManager, 
     ILogger logger,
     CurrentlyDownloadingList currentlyDownloadingList,
     CompletedInstallationTaskList completedInstalls,
     INotificationService notificationService)
 {
     _hubCommunicator = hubCommunicator;
     _allPackagesList = allPackagesList;
     _localPackageCache = localPackageCache;
     _installCache = installCache;
     _runningTasks = runningTasks;
     _settingsManager = settingsManager;
     _logger = logger;
     _currentlyDownloadingList = currentlyDownloadingList;
     CompletedInstalls = completedInstalls;
     _notificationService = notificationService;
 }
        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;
        }
        public static PackageListViewModel Convert(ILocalPackageCache cache, RunningInstallationTaskList runningTasks, 
            IInstalledPackageArchive installPackageArchive, CompletedInstallationTaskList completedTasks,
            IAgentSettings agentSettings, IPackagesList allPackagesList)
        {
            var model = new PackageListViewModel();

            var packagesById = allPackagesList.GetWatched().GroupBy(p => p.Id);
            foreach (var package in packagesById)
            {
                var packageInfo = new LocalPackageInformation
                                  {
                                      PackageId = package.Key
                                  };
                var latestVersion = package.OrderByDescending(p=>p.Version).FirstOrDefault();
                if (latestVersion != null)
                    packageInfo.LatestAvailableVersion = latestVersion.Version.ToString();

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

                /*packageInfo.LastInstallationTask =
                    completedTasks
                        .Where(t => t.PackageId == package.Key).OrderByDescending(t => t.LogFileName)
                        .FirstOrDefault();*/

                packageInfo.CurrentTask = runningTasks.Count > 0 ? runningTasks
                           .Where(t => t.PackageId == package.Key)
                           .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;

                packageInfo.AvailableVersions = package.OrderByDescending(x => x.Version).Select(x => x.Version.ToString()).ToList();

                if (latestVersion != null)
                {

                    packageInfo.Tags = latestVersion.Tags.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var tag in packageInfo.Tags)
                    {
                        if (!model.Tags.Any(t => t.Equals(tag.ToLower())))
                        {
                            model.Tags.Add(tag.ToLower());
                        }
                    }
                }
                else
                {
                    packageInfo.Tags = new string[0];
                }
                model.Packages.Add(packageInfo);
            }

            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 =
                allPackagesList.Select(p => p.Version.ToString()).Distinct().OrderByDescending(s => s);

            model.NugetRepository = agentSettings.NuGetRepository;
            return model;
        }