private async Task PackOneReferenceAsync(string file, XRefArchive writer)
{
var currentPackage = Path.GetFileName(file);
lock (_currentPackages)
{
_currentPackages[Array.IndexOf(_currentPackages, null)] = currentPackage;
}
var entries = new List<XRefMapRedirection>();
await GetItems(file).ForEachAsync(pair =>
{
lock (writer)
{
entries.Add(
new XRefMapRedirection
{
UidPrefix = pair.EntryName,
Href = writer.CreateMinor(
new XRefMap
{
Sorted = true,
HrefUpdated = true,
References = pair.ViewModel,
},
new[] { pair.EntryName })
});
_entryCount++;
_apiCount += pair.ViewModel.Count;
}
});
lock (writer)
{
var map = writer.GetMajor();
map.Redirections = (from r in map.Redirections.Concat(entries)
orderby r.UidPrefix.Length descending
select r).ToList();
writer.UpdateMajor(map);
}
lock (_currentPackages)
{
_currentPackages[Array.IndexOf(_currentPackages, currentPackage)] = null;
}
}