Patcher.Data.Plugins.Plugin.Load C# (CSharp) Method

Load() public method

public Load ( ) : void
return void
        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);
                //}
            }
        }