protected override async Task<IDictionary<string, CatalogItemSummary>> SavePages(Guid commitId, DateTime commitTimeStamp, IDictionary<string, CatalogItemSummary> itemEntries, CancellationToken cancellationToken)
{
SortedDictionary<NuGetVersion, KeyValuePair<string, CatalogItemSummary>> versions = new SortedDictionary<NuGetVersion, KeyValuePair<string, CatalogItemSummary>>();
// load items from existing pages
IDictionary<string, CatalogItemSummary> pageEntries = await LoadIndexResource(RootUri, cancellationToken);
foreach (KeyValuePair<string, CatalogItemSummary> pageEntry in pageEntries)
{
IDictionary<string, CatalogItemSummary> pageItemEntries = await LoadIndexResource(new Uri(pageEntry.Key), cancellationToken);
foreach (KeyValuePair<string, CatalogItemSummary> pageItemEntry in pageItemEntries)
{
NuGetVersion version = GetPackageVersion(new Uri(pageItemEntry.Key), pageItemEntry.Value.Content);
versions.Add(version, pageItemEntry);
}
}
// add new items
foreach (KeyValuePair<string, CatalogItemSummary> itemEntry in itemEntries)
{
NuGetVersion version = GetPackageVersion(new Uri(itemEntry.Key), itemEntry.Value.Content);
versions[version] = itemEntry;
}
// (re)create pages
IDictionary<string, CatalogItemSummary> newPageEntries = await PartitionAndSavePages(commitId, commitTimeStamp, versions, cancellationToken);
// add to list of pages to clean up
if (_cleanUpList != null)
{
foreach (string existingPage in pageEntries.Keys)
{
if (!newPageEntries.ContainsKey(existingPage))
{
_cleanUpList.Add(new Uri(existingPage));
}
}
}
return newPageEntries;
}