From f1ca9ec3e41f830440194b1507bfcd9be7cf31b1 Mon Sep 17 00:00:00 2001 From: kozhilya Date: Fri, 16 May 2025 18:28:53 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=81=D0=B5=D1=85=20=D1=83=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B5=D0=B2=D1=88=D0=B8=D1=85=20=D1=8D=D0=BB?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Importers/AbstractCompendium.cs | 14 ++-- .../Importers/AbstractImporter.cs | 4 +- .../Aonprd/AonprdRepository.cs | 4 +- .../Aonprd/Compendium/AonprdCompendium.cs | 43 +++++-------- .../Implementations/Aonprd/Helpers/RuleToc.cs | 3 +- .../Finalization/LegacyRemasterProcessors.cs | 2 +- .../Preparation/CompendiumLoadProcessor.cs | 3 +- .../Preparation/SchemaBuildProcessor.cs | 3 +- .../Compendium/FoundryEnCompendium.cs | 51 +++++++++++++++ .../FoundryEn/FoundryEnCompendium.cs | 64 ------------------- .../Preparation/CompendiumFolderProcessor.cs | 3 +- .../Preparation/CompendiumItemsProcessor.cs | 3 +- .../Preparation/SchemaBuildProcessor.cs | 4 +- .../AbstractImporterRepository.cs | 3 +- .../Importers/Repositories/GitRepository.cs | 1 + 15 files changed, 95 insertions(+), 110 deletions(-) create mode 100644 Pf2eDataScrapper/Importers/Implementations/FoundryEn/Compendium/FoundryEnCompendium.cs delete mode 100644 Pf2eDataScrapper/Importers/Implementations/FoundryEn/FoundryEnCompendium.cs diff --git a/Pf2eDataScrapper/Importers/AbstractCompendium.cs b/Pf2eDataScrapper/Importers/AbstractCompendium.cs index 96818ef..dc1108e 100644 --- a/Pf2eDataScrapper/Importers/AbstractCompendium.cs +++ b/Pf2eDataScrapper/Importers/AbstractCompendium.cs @@ -18,25 +18,19 @@ internal abstract class AbstractCompendium /// public string Dir => Repository.RepositoryDirPath; - /// - /// Возвращает количество элементов в компендиуме. - /// - /// Количество элементов. - public abstract int Count(); - /// /// Возвращает количество элементов для указанного типа данных. /// - /// Тип данных. + /// Типы данных. /// Количество элементов. - public abstract int Count(string type); + public abstract int Count(params ICollection type); /// /// Получение итератора сущностей. Если указан тип - то только указанного типа. /// - /// Тип сущностей, которые нужно получить. + /// Типы сущностей, которые нужно получить. /// Итератор сущностей. public abstract IEnumerable> Iterate( - string? type = null + params ICollection type ); } diff --git a/Pf2eDataScrapper/Importers/AbstractImporter.cs b/Pf2eDataScrapper/Importers/AbstractImporter.cs index 8c35683..1fc79f9 100644 --- a/Pf2eDataScrapper/Importers/AbstractImporter.cs +++ b/Pf2eDataScrapper/Importers/AbstractImporter.cs @@ -1,4 +1,6 @@ -namespace Pf2eDataScrapper.Importers; +using System.IO; + +namespace Pf2eDataScrapper.Importers; /// /// Абстрактный класс импортёра. diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdRepository.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdRepository.cs index c5b523b..ccb52cd 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdRepository.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/AonprdRepository.cs @@ -1,4 +1,6 @@ -using Newtonsoft.Json.Linq; +using System.IO; +using System.Net.Http; +using Newtonsoft.Json.Linq; using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Importers.Repositories; diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Compendium/AonprdCompendium.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Compendium/AonprdCompendium.cs index 24adc29..9ee710d 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Compendium/AonprdCompendium.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Compendium/AonprdCompendium.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using System.IO; using Newtonsoft.Json.Linq; namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; @@ -8,6 +9,7 @@ namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; /// internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCompendium { + /// public override AonprdRepository Repository { get; } = repository; /// @@ -15,29 +17,22 @@ internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCo /// public ConcurrentBag Items { get; } = []; - /// - /// Возвращает количество элементов в компендиуме. - /// - /// Количество элементов. - public override int Count() => Items.Count; + /// + public override int Count(params ICollection types) => + types.Count == 0 ? Items.Count : Items.Count(i => types.Contains(i.Type)); - /// - /// Возвращает количество элементов для указанного типа данных. - /// - /// Тип данных. - /// Количество элементов. - public override int Count(string type) => Items.Count(i => i.Type == type); - - /// - /// Получение итератора сущностей. Если указан тип - то только указанного типа. - /// - /// Тип сущностей, которые нужно получить. - /// Итератор сущностей. - public override IEnumerable> Iterate(string? type = null) + /// + public override IEnumerable> Iterate( + params ICollection types + ) { - IEnumerable files = type is null - ? Items.Select(t => t.File).Distinct() - : Items.Where(t => t.Type == type).Select(t => t.File).Distinct(); + IEnumerable files = + types.Count == 0 + ? Items.Select(item => item.File).Distinct() + : Items + .Where(item => types.Contains(item.Type)) + .Select(item => item.File) + .Distinct(); foreach (string file in files) { @@ -57,16 +52,12 @@ internal sealed class AonprdCompendium(AonprdRepository repository) : AbstractCo if ( id is null || !fileReferences.TryGetValue(id, out AonprdCompendiumItem? reference) + || !types.Contains(reference.Type) ) { continue; } - if (type is not null && reference.Type != type) - { - continue; - } - yield return new(reference, (JObject)item); } } diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/RuleToc.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/RuleToc.cs index 6ab17bc..84b3a64 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/RuleToc.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/RuleToc.cs @@ -1,4 +1,5 @@ -using Pf2eModel.Model.Base.Source; +using System.IO; +using Pf2eModel.Model.Base.Source; namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.Helpers; diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs index d5a9479..001f71e 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs @@ -46,7 +46,7 @@ internal class LegacyRemasterProcessors(ProcessorInput input) : AbstractInputPro return Context .EntityExternals.AsNoTracking() - .Where(x => aonprdIds.Contains(x.ExternalId)) + .Where(x => aonprdIds.Contains(x.ExternalId!)) .Select(x => x.EntityId) .ToList(); } diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/CompendiumLoadProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/CompendiumLoadProcessor.cs index 09e1885..57c53d9 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/CompendiumLoadProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/CompendiumLoadProcessor.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json.Linq; +using System.IO; +using Newtonsoft.Json.Linq; using Pf2eDataScrapper.App; using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/SchemaBuildProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/SchemaBuildProcessor.cs index 33ef7d2..6de832c 100644 --- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/SchemaBuildProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Preparation/SchemaBuildProcessor.cs @@ -1,4 +1,5 @@ -using Pf2eDataScrapper.App; +using System.IO; +using Pf2eDataScrapper.App; using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Importers.Implementations.Aonprd.Compendium; using Pf2eDataScrapper.SchemaBuilder; diff --git a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Compendium/FoundryEnCompendium.cs b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Compendium/FoundryEnCompendium.cs new file mode 100644 index 0000000..15e3103 --- /dev/null +++ b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Compendium/FoundryEnCompendium.cs @@ -0,0 +1,51 @@ +using System.Collections.Concurrent; +using System.IO; +using Newtonsoft.Json.Linq; + +namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; + +/// +/// Загрузчик данных компендиума. +/// +/// Репозиторий данных. +internal sealed class FoundryEnCompendium( + FoundryEnRepository repository, + CompendiumFolderCollection folders +) : AbstractCompendium +{ + /// + public override FoundryEnRepository Repository { get; } = repository; + + /// + /// Набор папок компендиума + /// + public CompendiumFolderCollection Folders { get; } = folders; + + /// + /// Коллекция всех записей компендиума. + /// + public ConcurrentBag Items { get; } = []; + + /// + public override int Count(params ICollection types) => + types.Count == 0 ? Items.Count : Items.Count(i => types.Contains(i.Type)); + + /// + public override IEnumerable> Iterate( + params ICollection types + ) + { + foreach ( + FoundryEnCompendiumItem item in types.Count == 0 + ? Items + : Items.Where(i => types.Contains(i.Type)) + ) + { + using StreamReader fileReader = new( + Path.Combine(Repository.RepositoryDirPath, item.File) + ); + + yield return new(item, JObject.Parse(fileReader.ReadToEnd())); + } + } +} diff --git a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/FoundryEnCompendium.cs b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/FoundryEnCompendium.cs deleted file mode 100644 index 6341c0c..0000000 --- a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/FoundryEnCompendium.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.Collections.Concurrent; -using Newtonsoft.Json.Linq; -using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; - -namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn; - -/// -/// Загрузчик данных компендиума. -/// -/// Репозиторий данных. -internal sealed class FoundryEnCompendium( - FoundryEnRepository repository, - CompendiumFolderCollection folders -) : AbstractCompendium -{ - /// - /// Репозиторий данных. - /// - public override FoundryEnRepository Repository { get; } = repository; - - /// - /// Набор папок компендиума - /// - public CompendiumFolderCollection Folders { get; } = folders; - - /// - /// Коллекция всех записей компендиума. - /// - public ConcurrentBag Items { get; } = []; - - /// - /// Возвращает количество элементов в компендиуме. - /// - /// Количество элементов. - public override int Count() => Items.Count; - - /// - /// Возвращает количество элементов для указанного типа данных. - /// - /// Тип данных. - /// Количество элементов. - public override int Count(string type) => Items.Count(i => i.Type == type); - - /// - /// Получение итератора сущностей. Если указан тип - то только указанного типа. - /// - /// Тип сущностей, которые нужно получить. - /// Итератор сущностей. - public override IEnumerable> Iterate(string? type = null) - { - IEnumerable items = type is null - ? Items - : Items.Where(i => i.Type == type); - - foreach (FoundryEnCompendiumItem item in items) - { - using StreamReader fileReader = new( - Path.Combine(Repository.RepositoryDirPath, item.File) - ); - - yield return new(item, JObject.Parse(fileReader.ReadToEnd())); - } - } -} diff --git a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumFolderProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumFolderProcessor.cs index c073400..74a8e3c 100644 --- a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumFolderProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumFolderProcessor.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json.Linq; +using System.IO; +using Newtonsoft.Json.Linq; using Pf2eDataScrapper.App; using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; using Pf2eDataScrapper.Processors; diff --git a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumItemsProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumItemsProcessor.cs index 7fd6260..ac5a0e3 100644 --- a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumItemsProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/CompendiumItemsProcessor.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json.Linq; +using System.IO; +using Newtonsoft.Json.Linq; using Pf2eDataScrapper.App; using Pf2eDataScrapper.Helpers; using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; diff --git a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/SchemaBuildProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/SchemaBuildProcessor.cs index 905ea16..84adc47 100644 --- a/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/SchemaBuildProcessor.cs +++ b/Pf2eDataScrapper/Importers/Implementations/FoundryEn/Processors/Preparation/SchemaBuildProcessor.cs @@ -1,5 +1,7 @@ -using Pf2eDataScrapper.App; +using System.IO; +using Pf2eDataScrapper.App; using Pf2eDataScrapper.Helpers; +using Pf2eDataScrapper.Importers.Implementations.FoundryEn.Compendium; using Pf2eDataScrapper.SchemaBuilder; namespace Pf2eDataScrapper.Importers.Implementations.FoundryEn.Processors.Preparation; diff --git a/Pf2eDataScrapper/Importers/Repositories/AbstractImporterRepository.cs b/Pf2eDataScrapper/Importers/Repositories/AbstractImporterRepository.cs index ce3682f..b05659f 100644 --- a/Pf2eDataScrapper/Importers/Repositories/AbstractImporterRepository.cs +++ b/Pf2eDataScrapper/Importers/Repositories/AbstractImporterRepository.cs @@ -1,4 +1,5 @@ -using Pf2eDataScrapper.Helpers; +using System.IO; +using Pf2eDataScrapper.Helpers; namespace Pf2eDataScrapper.Importers.Repositories; diff --git a/Pf2eDataScrapper/Importers/Repositories/GitRepository.cs b/Pf2eDataScrapper/Importers/Repositories/GitRepository.cs index a63b640..1fa47af 100644 --- a/Pf2eDataScrapper/Importers/Repositories/GitRepository.cs +++ b/Pf2eDataScrapper/Importers/Repositories/GitRepository.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using System.IO; using Pf2eDataScrapper.Helpers; namespace Pf2eDataScrapper.Importers.Repositories;