public PackageDownloadingService(IAgentSettingsManager agentSettingsManager, IRetrievePackageQuery allPackagesQuery, ILocalPackageCache agentCache, IAgentConfigurationManager agentConfigurationManager, ILogger logger, IHubCommunicator hubCommunicator, IInstalledPackageArchive installCache, IPackageRepositoryFactory packageRepositoryFactory, IPackagesList allPackagesList, ICurrentlyDownloadingList currentlyDownloadingList, CompletedInstallationTaskList installationResults, IAgentWatchList watchList, IInstallationManager installationManager,INotificationService notificationService) { _settingsManager = agentSettingsManager; AllPackagesQuery = allPackagesQuery; AgentCache = agentCache; _agentConfigurationManager = agentConfigurationManager; _logger = logger; _hubCommunicator = hubCommunicator; _installCache = installCache; _packageRepository = packageRepositoryFactory.CreateRepository(agentSettingsManager.Settings.NuGetRepository); _allPackagesList = allPackagesList; _currentlyDownloadingList = currentlyDownloadingList; _installationResults = installationResults; _watchList = watchList; _installationManager = installationManager; _notificationService = notificationService; TimedTask = new TimedSingleExecutionTask(agentSettingsManager.Settings.PackageSyncIntervalMs, FetchPackages, _logger); }
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; }