public void Load()
{
Log.Info("Indexing forms in plugin {0}", fileName);
Stream stream = context.DataFileProvider.GetDataFile(FileMode.Open, fileName).Open();
using (var reader = context.CreateReader(stream))
{
// Header needs to be read again
header = reader.ReadHeader();
// Prepare reference mapper
reader.ReferenceMapper = new PluginReferenceMapper(this);
int before = context.Forms.Count();
int overriding = 0;
int added = 0;
using (var progress = Display.StartProgress("Indexing forms"))
{
if (context.AsyncFormIndexing)
{
// Retrieve plugin number so that loaded forms can be linked to it
byte pluginNumber = context.Plugins.GetPluginNumber(this);
foreach (var record in reader.FindRecordsAsync())
{
Form form = new Form()
{
PluginNumber = pluginNumber,
FilePosition = record.FilePosition,
FormKind = (FormKind)record.Signature,
FormId = reader.ReferenceMapper.LocalToContext(record.FormId),
ParentFormId = reader.ReferenceMapper.LocalToContext(record.ParentRecordFormId)
};
// Index loaded form
context.Forms.Add(form);
added++;
if (form.IsOverriding)
overriding++;
progress.Update(reader.TotalRecordsFound, header.NumRecords, "{0} ({1})", fileName, form.FormKind);
}
}
else
{
FindRecordsListener listener = new FindRecordsListener(this, reader, progress);
reader.FindRecords(listener);
added = listener.Added;
overriding = listener.Overriding;
}
}
Log.Info("Found {0} forms ({1} overrides)", added, overriding);
//if (header.NumRecords != reader.TotalRecordsFound)
//{
// Log.Warning("Number of records specified in header {0} does not match number of records found {1}", header.NumRecords, reader.TotalRecordsFound);
//}
}
}