Files
Pf2eDataScrapper/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdDataBuilder.cs
T

79 lines
2.4 KiB
C#

using Konsole;
using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium;
using static Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder.AbstractProcessor;
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
internal class AonprdDataBuilder(AonprdLoader loader)
{
public Pf2eDatabase Database = Pf2eDatabase.Instance;
/// <summary>
/// Загрузчик данных.
/// </summary>
public readonly AonprdLoader Loader = loader;
/// <summary>
/// Коллекция папок компендиума.
/// </summary>
public AonprdCompendium Compendium => Loader.Compendium;
public AonprdProcessorCollection Processors = new();
public void TruncateTables()
{
Console.WriteLine("Truncating all old data...");
Database.ExecuteCommand("SELECT f_truncate_tables();");
Console.WriteLine("Truncation completed!");
}
public void Build()
{
Console.WriteLine("Building data...");
ConcurrentWriter window = new Window(0, 0, Console.WindowWidth, Console.WindowHeight).Concurrent();
IConsole bars = window.OpenBox("Progress", Console.WindowWidth, 4, new BoxStyle { Body = Colors.WhiteOnBlack });
Window output = new(0, 4, Console.WindowWidth, Console.WindowHeight - 4, window);
ProgressBar bar1 = new(bars, Loader.ItemCount, 15);
ProgressBar bar2 = new(bars, 1, 15);
int i = 0;
foreach (AonprdProcessorCollection.ProcessorItem item in Processors.Iterate())
{
bar1.Refresh(i++, $"{item.Attribute.Name}");
bar2.Max = Compendium.Count([item.Attribute.Type]);
int j = 0;
foreach (AonprdLoader.LoaderEntry entry in Loader.Entries(item.Attribute.Type))
{
bar2.Refresh(i++, $"{entry.Id}");
AonprdProcessorInput input = new(entry.Json);
AbstractProcessor processor = (AbstractProcessor) item.Constructor.Invoke([input]);
try
{
processor.Process();
processor.Save();
}
catch (LegacyItemException ex)
{
output.WriteLine(ex.Message);
}
}
bar2.Refresh(j, "Processor complited");
}
bar1.Refresh(i, "Done!");
window.Clear();
}
}