79 lines
2.4 KiB
C#
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 Window(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.Items)
|
|
{
|
|
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}");
|
|
|
|
ProcessorInput input = new ProcessorInput(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();
|
|
}
|
|
}
|