Продолжение рефакторинга (вынесение WPF в отдельный проект)

This commit is contained in:
2025-10-02 17:25:48 +04:00
parent 2fa94851cb
commit f5b311e025
161 changed files with 899 additions and 559 deletions
@@ -11,7 +11,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Compendium;
/// Загрузчик данных компендиума.
/// </summary>
/// <param name="repository"><inheritdoc cref="FoundryEnRepository"/></param>
internal sealed class FoundryEnCompendium(FoundryEnRepository repository) : AbstractCompendium
public sealed class FoundryEnCompendium(FoundryEnRepository repository) : AbstractCompendium
{
/// <inheritdoc/>
public override FoundryEnRepository Repository { get; } = repository;
@@ -6,7 +6,7 @@
/// <param name="id">Идентификатор сущности.</param>
/// <param name="type">Тип сущности.</param>
/// <param name="file">Имя файла, в котором хранится сущность.</param>
internal class FoundryEnCompendiumItem(string id, string type, string file) : AbstractCompendiumItem
public class FoundryEnCompendiumItem(string id, string type, string file) : AbstractCompendiumItem
{
/// <summary>
/// Идентификатор сущности.
@@ -1,14 +1,13 @@
using Microsoft.Extensions.DependencyInjection;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Compendium;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Importers.Repositories;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn;
/// <summary>
/// Импортёр для модуля Pf2e FoundryVTT.
/// </summary>
internal class FoundryEnImporter : AbstractImporter
public class FoundryEnImporter : AbstractImporter
{
/// <summary>
/// Название внешней ссылки.
@@ -27,6 +26,10 @@ internal class FoundryEnImporter : AbstractImporter
#region "Внедрение зависимостей"
/// <summary>
/// Регистрация сервисов импортёра в контейнере зависимостей.
/// </summary>
/// <param name="services">Коллекция сервисов.</param>
public static void RegisterServices(IServiceCollection services)
{
services.AddSingleton<FoundryEnImporter>();
@@ -39,16 +42,3 @@ internal class FoundryEnImporter : AbstractImporter
#endregion
}
/// <summary>
/// Git-репозиторий данных FoundryVTT-модуля "pf2e".
/// </summary>
/// <param name="importer"><inheritdoc cref="FoundryEnImporter"/></param>
internal class FoundryEnRepository(FoundryEnImporter importer) : AbstractGitHubRepository(importer)
{
/// <inheritdoc/>
public override string Repository => "foundryvtt/pf2e";
/// <inheritdoc/>
public override string AssetName => "json-assets.zip";
}
@@ -0,0 +1,16 @@
using Pf2e.Scrapper.Importers.Repositories;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn;
/// <summary>
/// Git-репозиторий данных FoundryVTT-модуля "pf2e".
/// </summary>
/// <param name="importer"><inheritdoc cref="FoundryEnImporter"/></param>
public class FoundryEnRepository(FoundryEnImporter importer) : AbstractGitHubRepository(importer)
{
/// <inheritdoc/>
public override string Repository => "foundryvtt/pf2e";
/// <inheritdoc/>
public override string AssetName => "json-assets.zip";
}
@@ -10,7 +10,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
/// <summary>
/// Глобальные константы и утилиты для импорта данных в формате Foundry En.
/// </summary>
internal class FoundryEnGlobals
public class FoundryEnGlobals
{
/// <summary>
/// Цель внешних ссылок для Foundry En.
@@ -2,13 +2,14 @@
using System.Linq;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using Pf2e.Database;
using Pf2e.Database.Model.Common.I18n;
using Pf2e.Database.Model.Enum;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Database;
using Pf2e.Database.Model.Common.I18n;
using Pf2e.Database.Model.Enum;
using Pf2e.Scrapper.Processors.Attributes.Enum;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Entities;
@@ -21,7 +22,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Entities;
Active = false
)]
[ProcessorDependencies(["foundry-en:compendium", "foundry-en:external"])]
internal partial class ActionProcessor(
public partial class ActionProcessor(
DatabaseHelper databaseHelper,
Pf2eDbContext context,
FoundryEnGlobals globals,
@@ -1,12 +1,13 @@
using Newtonsoft.Json.Linq;
using Pf2e.Database;
using Pf2e.Database.Model.Enum;
using Pf2e.Database.Model.Structure;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Attributes.Enum;
using Pf2e.Scrapper.Processors.Collection;
using Pf2e.Database;
using Pf2e.Database.Model.Enum;
using Pf2e.Database.Model.Structure;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Entities;
@@ -19,7 +20,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Entities;
Active = false
)]
[ProcessorDependencies(["foundry-en:compendium"])]
internal class ConditionProcessor(
public class ConditionProcessor(
DatabaseHelper databaseHelper,
Pf2eDbContext context,
FoundryEnGlobals globals,
@@ -1,14 +1,15 @@
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Database;
using Pf2e.Database.Model.Enum;
using Pf2e.Database.Model.Structure;
using Pf2e.Database.Model.Structure.DeityRelation;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Attributes.Enum;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Entities;
@@ -21,7 +22,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Entities;
Active = true
)]
[ProcessorDependencies(["foundry-en:compendium", "foundry-en:external"])]
internal class DeityProcessor(
public class DeityProcessor(
DatabaseHelper databaseHelper,
Pf2eDbContext context,
FoundryEnGlobals globals,
@@ -3,17 +3,17 @@ using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json.Linq;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
using Pf2e.Database;
using Pf2e.Database.Model;
using Pf2e.Database.Model.Base;
using Pf2e.Database.Model.Base.Targets;
using Pf2e.Database.Model.Common.I18n;
using Pf2e.Database.Model.Enum;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors;
@@ -27,7 +27,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors;
/// <param name="context">[DI] <inheritdoc cref="Pf2eDbContext"/></param>
/// <param name="globals">[DI] <inheritdoc cref="FoundryEnGlobals"/></param>
/// <param name="input">Объект обработки вводимого JSON.</param>
internal abstract class FoundryEnAbstractProcessor<TEntity>(
public abstract class FoundryEnAbstractProcessor<TEntity>(
DatabaseHelper databaseHelper,
Pf2eDbContext context,
FoundryEnGlobals globals,
@@ -52,7 +52,7 @@ internal abstract class FoundryEnAbstractProcessor<TEntity>(
/// <summary>
/// Представление сущности, которое будет использоваться для обработки данных.
/// </summary>
public EntityView View { get; private set; } = null!;
public FullEntity View { get; private set; } = null!;
/// <summary>
/// Основная сущность, которая будет использоваться для обработки данных.
@@ -5,6 +5,7 @@ using Newtonsoft.Json.Linq;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Compendium;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Attributes.Enum;
using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparation;
@@ -16,7 +17,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparati
Active = false
)]
[ProcessorDependencies(["foundry-en:repository"])]
internal class CompendiumProcessor(
public class CompendiumProcessor(
FoundryEnRepository repository,
FoundryEnCompendium compendium,
ProcessProgress progress
@@ -1,9 +1,10 @@
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Definitions;
using Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
using Pf2e.Database;
using Pf2e.Database;
using Pf2e.Database.Model.Base.Targets;
using Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Attributes.Enum;
using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparation;
@@ -13,7 +14,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparati
Group = ProcessorGroupEnum.FoundryEnPreparation
)]
[ProcessorDependencies(["foundry-en:repository"])]
internal class ExternalProcessor(FoundryEnGlobals enGlobals) : AbstractSimpleProcessor
public class ExternalProcessor(FoundryEnGlobals enGlobals) : AbstractSimpleProcessor
{
public Pf2eDbContext Context { get; } = new();
public FoundryEnGlobals EnGlobals { get; } = enGlobals;
@@ -1,5 +1,6 @@
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Attributes.Enum;
using Pf2e.Scrapper.Processors.Definitions;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparation;
@@ -10,7 +11,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparati
Group = ProcessorGroupEnum.FoundryEnPreparation,
Active = false
)]
internal class RepositoryUpdateProcessor(FoundryEnRepository repository, ProcessProgress progress)
public class RepositoryUpdateProcessor(FoundryEnRepository repository, ProcessProgress progress)
: IProcessor
{
public FoundryEnRepository Repository { get; } = repository;
@@ -5,6 +5,7 @@ using System.Linq;
using Pf2e.Scrapper.Helpers;
using Pf2e.Scrapper.Importers.Implementations.FoundryEn.Compendium;
using Pf2e.Scrapper.Processors.Attributes;
using Pf2e.Scrapper.Processors.Attributes.Enum;
using Pf2e.Scrapper.SchemaBuilder;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparation;
@@ -16,7 +17,7 @@ namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparati
Active = false
)]
[ProcessorDependencies(["foundry-en:compendium"])]
internal class SchemaBuildProcessor(
public class SchemaBuildProcessor(
FoundryEnImporter importer,
FoundryEnRepository repository,
FoundryEnCompendium compendium,
@@ -5,16 +5,30 @@ using Pf2e.Scrapper.SchemaBuilder.Types;
namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Processors.Preparation;
internal class SchemaTypeResolver : TypeResolver
/// <summary>
/// Класс для определения типов полей в схеме данных Foundry PF2e.
/// </summary>
public class SchemaTypeResolver : TypeResolver
{
/// <summary>
/// Класс для представления типа поля, содержащего правила Foundry.
/// </summary>
/// <param name="parent">Родительский элемент схемы данных.</param>
public class FoundryRulesSchemaType(SchemaNode parent) : IgnoreSchemaType(parent)
{
/// <summary>
/// Отображаемое имя типа.
/// </summary>
/// <returns>Строковое представоение типа элемента.</returns>
public override string GetTypeName()
{
return "ignored (Foundry rules object)";
}
}
/// <summary>
/// Пути к полям, которые должны быть представлены как словари.
/// </summary>
protected readonly List<string> DictionaryPaths =
[
"character.items.[].system.items",
@@ -41,11 +55,11 @@ internal class SchemaTypeResolver : TypeResolver
];
/// <summary>
/// Частное определение типа поля.
/// Частное определение типа поля.
/// </summary>
/// <param name="node">Поле схемы данных, для которого создаётся тип.</param>
/// <param name="value">Добавляемое значение.</param>
/// <returns>Новый тип для схемы данных. `null`, что бы использовать значение по умолчанию</returns>
/// <returns>Новый тип для схемы данных. `null`, что бы использовать значение по умолчанию.</returns>
protected override AbstractSchemaType? CustomResolve(SchemaNode node, JToken? value)
{
return CheckPath(node, DictionaryPaths) ? new DictionarySchemaType(node)