public Package(IPackage package, DerivedPackageData derivedData) { Id = package.Id; Version = package.Version.ToString(); Title = package.Title; Authors = String.Join(",", package.Authors); if (package.IconUrl != null) { IconUrl = package.IconUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped); } if (package.LicenseUrl != null) { LicenseUrl = package.LicenseUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped); } if (package.ProjectUrl != null) { ProjectUrl = package.ProjectUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped); } RequireLicenseAcceptance = package.RequireLicenseAcceptance; Description = package.Description; Summary = package.Summary; ReleaseNotes = package.ReleaseNotes; Tags = package.Tags; Dependencies = String.Join("|", package.DependencySets.SelectMany(ConvertDependencySetToStrings)); PackageHash = derivedData.PackageHash; PackageHashAlgorithm = "SHA512"; PackageSize = derivedData.PackageSize; LastUpdated = derivedData.LastUpdated.UtcDateTime; Published = derivedData.Created.UtcDateTime; IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion; IsLatestVersion = package.IsLatestVersion; Path = derivedData.Path; FullPath = derivedData.FullPath; MinClientVersion = package.MinClientVersion == null ? null : package.MinClientVersion.ToString(); }
public Package(IPackage package, DerivedPackageData derivedData) { Id = package.Id; Version = package.Version.ToString(); Title = package.Title; Authors = String.Join(",", package.Authors); if (package.IconUrl != null) { IconUrl = package.IconUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped); } if (package.LicenseUrl != null) { LicenseUrl = package.LicenseUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped); } if (package.ProjectUrl != null) { ProjectUrl = package.ProjectUrl.GetComponents(UriComponents.HttpRequestUrl, UriFormat.Unescaped); } RequireLicenseAcceptance = package.RequireLicenseAcceptance; Description = package.Description; Summary = package.Summary; Language = package.Language; Tags = package.Tags; Dependencies = String.Join("|", from d in package.Dependencies select ConvertDependency(d)); PackageHash = derivedData.PackageHash; PackageSize = derivedData.PackageSize; LastUpdated = derivedData.LastUpdated.UtcDateTime; Published = derivedData.Created.UtcDateTime; DownloadCount = -1; Rating = -1; VersionDownloadCount = -1; VersionRatingsCount = -1; }
private void AddPackageToCache(ConcurrentDictionary <IPackage, DerivedPackageData> packages, ConcurrentDictionary <string, Tuple <IPackage, DerivedPackageData> > absoluteLatest, ConcurrentDictionary <string, Tuple <IPackage, DerivedPackageData> > latest, bool checkFrameworks, HttpContext context, string path, IPackage zip) { string packageHash = null; long packageSize = 0; string persistedHashFile = EnablePersistNupkgHash ? GetHashFile(path, false) : null; bool hashComputeNeeded = true; ReadHashFile(context, path, persistedHashFile, ref packageSize, ref packageHash, ref hashComputeNeeded); if (hashComputeNeeded) { using (var stream = _fileSystem.OpenFile(path)) { packageSize = stream.Length; packageHash = Convert.ToBase64String(HashProvider.CalculateHash(stream)); } WriteHashFile(context, path, persistedHashFile, packageSize, packageHash); } var data = new DerivedPackageData { PackageSize = packageSize, PackageHash = packageHash, LastUpdated = _fileSystem.GetLastModified(path), Created = _fileSystem.GetCreated(path), Path = path, FullPath = _fileSystem.GetFullPath(path), // default to false, these will be set later IsAbsoluteLatestVersion = false, IsLatestVersion = false }; if (checkFrameworks) { data.SupportedFrameworks = zip.GetSupportedFrameworks(); } var entry = new Tuple <IPackage, DerivedPackageData>(zip, data); // find the latest versions string id = zip.Id.ToLowerInvariant(); // update with the highest version absoluteLatest.AddOrUpdate(id, entry, (oldId, oldEntry) => oldEntry.Item1.Version < entry.Item1.Version ? entry : oldEntry); // update latest for release versions if (zip.IsReleaseVersion()) { latest.AddOrUpdate(id, entry, (oldId, oldEntry) => oldEntry.Item1.Version < entry.Item1.Version ? entry : oldEntry); } // add the package to the cache, it should not exist already Debug.Assert(packages.ContainsKey(zip) == false, "duplicate package added"); packages.AddOrUpdate(zip, entry.Item2, (oldPkg, oldData) => oldData); }
/// <summary> /// Gives the Package containing both the IPackage and the derived metadata. /// The returned Package will be null if <paramref name="package" /> no longer exists in the cache. /// </summary> public Package GetMetadataPackage(IPackage package) { Package metadata = null; // The cache may have changed, and the metadata may no longer exist DerivedPackageData data = null; if (PackageCache.TryGetValue(package, out data)) { metadata = new Package(package, data); } return(metadata); }
/// <summary> /// Gets the metadata package. /// </summary> /// <param name="package">The package.</param> /// <returns></returns> public Package GetMetadataPackage(IPackage package) { var derived = new DerivedPackageData() { //Created = ? //FullPath = ? IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion, IsLatestVersion = package.IsLatestVersion //LastUpdated = ? //PackageHash = package.GetHash(), //PackageSize = ?? //Path = ?? //SupportedFrameworks = package.GetSupportedFrameworks(), }; //var pkg = new Package(package, new DerivedPackageData()); return(new Package(package, derived)); }
private DerivedPackageData CalculateDerivedData(IPackage package) { DerivedPackageData derivedPackageData; if (DerivedDataCache.TryGetValue(package.Id, out derivedPackageData)) { return(derivedPackageData); } var blob = this.GetLatestBlobForPackage(package); long length = 0; byte[] inArray; using (var stream = blob.OpenRead()) { length = stream.Length; inArray = this.HashProvider.CalculateHash(stream); } derivedPackageData = new DerivedPackageData { PackageSize = length, PackageHash = Convert.ToBase64String(inArray), LastUpdated = blob.Properties.LastModified ?? default(DateTimeOffset), Created = blob.Properties.LastModified ?? default(DateTimeOffset), Path = blob.Uri.ToString(), FullPath = blob.Uri.ToString(), IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion, IsLatestVersion = package.IsLatestVersion }; DerivedDataCache.AddOrUpdate(package.Id, derivedPackageData, (key, old) => derivedPackageData); return(derivedPackageData); }