From 3168c9c4068959d7cd50b4597e2da8689a7bc44a Mon Sep 17 00:00:00 2001 From: kozhilya Date: Wed, 7 May 2025 14:18:24 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0,=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9=20=D0=BF=D0=BE=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=B0=D1=82=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D1=91=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=BE=D1=86?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D0=BE=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Importers/AbstractImporter.cs | 18 +++++++---- .../Implementations/Aonprd/AonprdImporter.cs | 1 + .../DataBuilder/AonprdProcessorCollection.cs | 30 ++++++++++++++++++- Pf2eDataScrapper/Program.cs | 3 ++ 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Pf2eDataScrapper/Importers/AbstractImporter.cs b/Pf2eDataScrapper/Importers/AbstractImporter.cs index f1f93ac..e80020e 100644 --- a/Pf2eDataScrapper/Importers/AbstractImporter.cs +++ b/Pf2eDataScrapper/Importers/AbstractImporter.cs @@ -3,29 +3,35 @@ namespace Pf2eDataScrapper.Importers; /// -/// Абстрактный класс импортёра +/// Абстрактный класс импортёра. /// internal abstract class AbstractImporter { /// - /// Отображаемое имя импортёра + /// Отображаемое имя импортёра. /// public abstract string Name { get; } /// - /// Короткое имя импортёра + /// Короткое имя импортёра. /// public abstract string Slug { get; } public abstract AbstractImporterRepository Repository { get; } /// - /// Путь к директории с данными для импортёра + /// Путь к директории с данными для импортёра. /// public string Dir => Path.Combine(EnvSettings.DataDirPath, Slug); /// - /// Метод подготовки данных для импорта + /// Перечисление процессоров, которые будут использоваться для обработки данных. + /// При пустом массиве будут обработаны все доступные процессоры. + /// + public string[] ProcessorNames { get; set; } = []; + + /// + /// Метод подготовки данных для импорта. /// public abstract void Prepare(); @@ -35,7 +41,7 @@ internal abstract class AbstractImporter public abstract void Import(); /// - /// Построение схем данных + /// Построение схем данных. /// public abstract void BuildSchemas(); } diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs index 03e744b..7559823 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdImporter.cs @@ -37,6 +37,7 @@ internal class AonprdImporter : AbstractImporter public override void Import() { AonprdDataBuilder builder = new(Loader); + builder.Processors.UseOnlyNames(ProcessorNames); builder.TruncateTables(); builder.Build(); diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs index 5cd4052..b1104a1 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/DataBuilder/AonprdProcessorCollection.cs @@ -14,7 +14,9 @@ internal class AonprdProcessorCollection public int Priority = -1; } - public readonly List Items = []; + private readonly List _allItems; + + public List Items { get; private set; } = []; public AonprdProcessorCollection() { @@ -50,6 +52,8 @@ internal class AonprdProcessorCollection Items.Add(new(attribute, constructor)); } + + _allItems = Items.ToList(); } private void CheckDependencies() @@ -109,4 +113,28 @@ internal class AonprdProcessorCollection yield return item; } } + + public void UseOnlyNames(string[] processorNames) + { + Dictionary nameFlags = processorNames.ToDictionary(name => name, _ => false); + + while (nameFlags.Values.Any(v => !v)) + { + foreach ( + KeyValuePair pair in nameFlags.Where(pair => !pair.Value).ToList() + ) + { + ProcessorItem item = _allItems.First(item => item.Attribute.Name == pair.Key); + + foreach (string dependency in item.Attribute.Dependencies) + { + nameFlags.TryAdd(dependency, false); + } + + nameFlags[pair.Key] = true; + } + } + + Items = _allItems.Where(item => nameFlags.ContainsKey(item.Attribute.Name)).ToList(); + } } diff --git a/Pf2eDataScrapper/Program.cs b/Pf2eDataScrapper/Program.cs index dac032a..cfdf326 100644 --- a/Pf2eDataScrapper/Program.cs +++ b/Pf2eDataScrapper/Program.cs @@ -10,6 +10,9 @@ Pf2EFoundryImporter importer = new(); */ AonprdImporter importer = new(); + +importer.ProcessorNames = ["rules"]; + importer.Prepare(); importer.Import(); // importer.BuildSchemas();