public Facts() { Target = new DownloadData(); }
public static DownloadData ApplyDownloadOverrides( this DownloadData originalData, IReadOnlyDictionary <string, long> downloadOverrides, ILogger logger) { if (originalData == null) { throw new ArgumentNullException(nameof(originalData)); } if (downloadOverrides == null) { throw new ArgumentNullException(nameof(downloadOverrides)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } // Create a copy of the original data and apply overrides as we copy. var result = new DownloadData(); foreach (var downloadData in originalData) { var packageId = downloadData.Key; if (ShouldOverrideDownloads(packageId)) { logger.LogInformation( "Overriding downloads of package {PackageId} from {Downloads} to {DownloadsOverride}", packageId, originalData.GetDownloadCount(packageId), downloadOverrides[packageId]); var versions = downloadData.Value.Keys; result.SetDownloadCount( packageId, versions.First(), downloadOverrides[packageId]); } else { foreach (var versionData in downloadData.Value) { result.SetDownloadCount(downloadData.Key, versionData.Key, versionData.Value); } } } bool ShouldOverrideDownloads(string packageId) { if (!downloadOverrides.TryGetValue(packageId, out var downloadOverride)) { return(false); } // Apply the downloads override only if the package has fewer total downloads. // In effect, this removes a package's manual boost once its total downloads exceed the override. if (originalData[packageId].Total >= downloadOverride) { logger.LogInformation( "Skipping download override for package {PackageId} as its downloads of {Downloads} are " + "greater than its override of {DownloadsOverride}", packageId, originalData[packageId].Total, downloadOverride); return(false); } return(true); } return(result); }