diff --git a/Pf2eDataScrapper/ImportApplication.cs b/Pf2eDataScrapper/ImportApplication.cs
index ee1c1f5..3da4d97 100644
--- a/Pf2eDataScrapper/ImportApplication.cs
+++ b/Pf2eDataScrapper/ImportApplication.cs
@@ -7,7 +7,8 @@ using Pf2eDataScrapper.Helpers;
using Pf2eDataScrapper.Processors;
using Pf2eDataScrapper.WPF;
using Pf2eDataScrapper.WPF.EntityViewer;
-using Pf2eDataScrapper.WPF.Views;
+using Pf2eDataScrapper.WPF.ProgressForm;
+using Pf2eDataScrapper.WPF.StartForm;
using Pf2eModel;
using Slugify;
@@ -50,7 +51,7 @@ internal sealed class ImportApplication : Application
#endregion
- #region "Формы"
+ #region "Жизненный цикл"
private StartForm? _startFormWpf;
@@ -58,10 +59,6 @@ internal sealed class ImportApplication : Application
private EntityForm? _entityForm;
- #endregion
-
- #region "Жизненный цикл"
-
private Window? CurrentWpfForm { get; set; }
public delegate void ApplicationStateChangeDelegate(object sender, ApplicationStage nextStage);
@@ -133,6 +130,9 @@ internal sealed class ImportApplication : Application
break;
case ApplicationStage.ImportProcess:
+ _progressFormWpf!.Hide();
+ _progressFormWpf!.Close();
+ _progressFormWpf = null;
break;
case ApplicationStage.Viewer:
diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/StringHelper.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/StringHelper.cs
index 2613b27..93b1f87 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/StringHelper.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Helpers/StringHelper.cs
@@ -59,14 +59,14 @@ internal partial class StringHelper
}
///
- /// Извлечение информации о названии источника.
+ /// Извлечение суффикса из описания источника.
///
/// Исходная строка.
- /// Название источника.
- public string ResolveSource(string input)
+ /// Суффикс.
+ public string ResolveSourceSuffix(string input)
{
Match match = SourceSuffixRegex().Match(input);
- return match.Captures.Count > 0 ? match.Captures[0].Value : "";
+ return match.Captures.Count > 0 ? match.Groups[1].Value : "";
}
///
diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs
index 2fc750e..f0d7780 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/AbstractEntityProcessor.cs
@@ -173,7 +173,9 @@ internal abstract class AbstractEntityProcessor(
{
Entity = Entity,
SourceId = Globals.SourceIds[sourceName],
- Suffix = StringHelper.ResolveSource(Input.GetRequired("source_markdown")),
+ Suffix = StringHelper.ResolveSourceSuffix(
+ Input.GetRequired("source_markdown")
+ ),
IsRemaster = Input.GetOptional("legacy_id") is not null,
};
@@ -195,6 +197,7 @@ internal abstract class AbstractEntityProcessor(
Md5 = Input.Md5(),
};
+ Entity.Externals.Add(external);
Context.EntityExternals.Add(external);
}
diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs
index 6a6b1a7..5963fc1 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Finalization/LegacyRemasterProcessors.cs
@@ -33,16 +33,17 @@ internal class LegacyRemasterProcessors(ProcessorInput input) : AbstractInputPro
{
Context.LegacyRemasters.Add(new() { LegacyId = entityId, RemasterId = remasterId });
}
-
+ /*
foreach (int legacyId in GetEntityIds("legacy_id"))
{
Context.LegacyRemasters.Add(new() { LegacyId = legacyId, RemasterId = entityId });
}
+ */
}
protected List GetEntityIds(string path)
{
- List aonprdIds = (Input.GetOptional("path") ?? [])
+ List aonprdIds = (Input.GetOptional(path) ?? [])
.Select(token => token.ToString())
.ToList();
diff --git a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/SpellProcessor.cs b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/SpellProcessor.cs
index 4a61ede..3f46668 100644
--- a/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/SpellProcessor.cs
+++ b/Pf2eDataScrapper/Importers/Implementations/Aonprd/Processors/Types/SpellProcessor.cs
@@ -109,6 +109,10 @@ internal class SpellProcessor(
{
A(new() { Spell = Object, Type = SpellAreaType.Square });
}
+ if (areaDetails.Contains("fungi"))
+ {
+ areaDetails = [areaDetails[0] + " or " + areaDetails[1]];
+ }
if (areaTypes.Count != areaDetails.Count)
{
diff --git a/Pf2eModel/Migrations/20250516162158_1.Designer.cs b/Pf2eModel/Migrations/20250521102908_1.Designer.cs
similarity index 98%
rename from Pf2eModel/Migrations/20250516162158_1.Designer.cs
rename to Pf2eModel/Migrations/20250521102908_1.Designer.cs
index ecb8d11..a237127 100644
--- a/Pf2eModel/Migrations/20250516162158_1.Designer.cs
+++ b/Pf2eModel/Migrations/20250521102908_1.Designer.cs
@@ -13,7 +13,7 @@ using Pf2eModel.Model.Enum;
namespace Pf2eModel.Migrations
{
[DbContext(typeof(Pf2eDbContext))]
- [Migration("20250516162158_1")]
+ [Migration("20250521102908_1")]
partial class _1
{
///
@@ -288,36 +288,11 @@ namespace Pf2eModel.Migrations
.HasColumnOrder(2)
.HasComment("Идентификатор цели");
- b.Property("LegacyEntitiesId")
- .HasColumnType("integer")
- .HasColumnName("legacy_entities_id");
-
- b.Property("LegacyEntityId")
- .HasColumnType("integer")
- .HasColumnName("legacy_entity_id");
-
- b.Property("RemasterEntitiesId")
- .HasColumnType("integer")
- .HasColumnName("remaster_entities_id");
-
- b.Property("RemasterEntityId")
- .HasColumnType("integer")
- .HasColumnName("remaster_entity_id");
-
b.HasKey("LegacyId", "RemasterId")
.HasName("pk_legacy_remasters");
- b.HasIndex("LegacyEntitiesId")
- .HasDatabaseName("ix_legacy_remasters_legacy_entities_id");
-
- b.HasIndex("LegacyEntityId")
- .HasDatabaseName("ix_legacy_remasters_legacy_entity_id");
-
- b.HasIndex("RemasterEntitiesId")
- .HasDatabaseName("ix_legacy_remasters_remaster_entities_id");
-
- b.HasIndex("RemasterEntityId")
- .HasDatabaseName("ix_legacy_remasters_remaster_entity_id");
+ b.HasIndex("RemasterId")
+ .HasDatabaseName("ix_legacy_remasters_remaster_id");
b.ToTable("legacy_remasters", (string)null);
});
@@ -1973,33 +1948,19 @@ namespace Pf2eModel.Migrations
modelBuilder.Entity("Pf2eModel.Model.Base.LegacyRemaster", b =>
{
- b.HasOne("Pf2eModel.Model.Base.Entity", null)
- .WithMany()
- .HasForeignKey("LegacyEntitiesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_legacy_entities_id");
-
b.HasOne("Pf2eModel.Model.Base.Entity", "LegacyEntity")
- .WithMany()
- .HasForeignKey("LegacyEntityId")
+ .WithMany("LegacyTransferEntities")
+ .HasForeignKey("LegacyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_legacy_entity_id");
-
- b.HasOne("Pf2eModel.Model.Base.Entity", null)
- .WithMany()
- .HasForeignKey("RemasterEntitiesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_remaster_entities_id");
+ .HasConstraintName("fk_legacy_remasters_entities_legacy_id");
b.HasOne("Pf2eModel.Model.Base.Entity", "RemasterEntity")
- .WithMany()
- .HasForeignKey("RemasterEntityId")
+ .WithMany("RemasterTransferEntities")
+ .HasForeignKey("RemasterId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_remaster_entity_id");
+ .HasConstraintName("fk_legacy_remasters_entities_remaster_id");
b.Navigation("LegacyEntity");
@@ -2638,6 +2599,10 @@ namespace Pf2eModel.Migrations
b.Navigation("Externals");
+ b.Navigation("LegacyTransferEntities");
+
+ b.Navigation("RemasterTransferEntities");
+
b.Navigation("Sources");
});
diff --git a/Pf2eModel/Migrations/20250516162158_1.cs b/Pf2eModel/Migrations/20250521102908_1.cs
similarity index 97%
rename from Pf2eModel/Migrations/20250516162158_1.cs
rename to Pf2eModel/Migrations/20250521102908_1.cs
index 3eee44b..e773ece 100644
--- a/Pf2eModel/Migrations/20250516162158_1.cs
+++ b/Pf2eModel/Migrations/20250521102908_1.cs
@@ -316,36 +316,20 @@ namespace Pf2eModel.Migrations
columns: table => new
{
legacy_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор сущности"),
- remaster_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор цели"),
- legacy_entity_id = table.Column(type: "integer", nullable: false),
- remaster_entity_id = table.Column(type: "integer", nullable: false),
- legacy_entities_id = table.Column(type: "integer", nullable: false),
- remaster_entities_id = table.Column(type: "integer", nullable: false)
+ remaster_id = table.Column(type: "integer", nullable: false, comment: "Идентификатор цели")
},
constraints: table =>
{
table.PrimaryKey("pk_legacy_remasters", x => new { x.legacy_id, x.remaster_id });
table.ForeignKey(
- name: "fk_legacy_remasters_entities_legacy_entities_id",
- column: x => x.legacy_entities_id,
+ name: "fk_legacy_remasters_entities_legacy_id",
+ column: x => x.legacy_id,
principalTable: "entities",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
- name: "fk_legacy_remasters_entities_legacy_entity_id",
- column: x => x.legacy_entity_id,
- principalTable: "entities",
- principalColumn: "id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "fk_legacy_remasters_entities_remaster_entities_id",
- column: x => x.remaster_entities_id,
- principalTable: "entities",
- principalColumn: "id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "fk_legacy_remasters_entities_remaster_entity_id",
- column: x => x.remaster_entity_id,
+ name: "fk_legacy_remasters_entities_remaster_id",
+ column: x => x.remaster_id,
principalTable: "entities",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
@@ -1362,24 +1346,9 @@ namespace Pf2eModel.Migrations
column: "entity_id");
migrationBuilder.CreateIndex(
- name: "ix_legacy_remasters_legacy_entities_id",
+ name: "ix_legacy_remasters_remaster_id",
table: "legacy_remasters",
- column: "legacy_entities_id");
-
- migrationBuilder.CreateIndex(
- name: "ix_legacy_remasters_legacy_entity_id",
- table: "legacy_remasters",
- column: "legacy_entity_id");
-
- migrationBuilder.CreateIndex(
- name: "ix_legacy_remasters_remaster_entities_id",
- table: "legacy_remasters",
- column: "remaster_entities_id");
-
- migrationBuilder.CreateIndex(
- name: "ix_legacy_remasters_remaster_entity_id",
- table: "legacy_remasters",
- column: "remaster_entity_id");
+ column: "remaster_id");
migrationBuilder.CreateIndex(
name: "ix_ritual_checks_ritual_id",
diff --git a/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs b/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs
index a353789..749c2b1 100644
--- a/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs
+++ b/Pf2eModel/Migrations/Pf2eDbContextModelSnapshot.cs
@@ -285,36 +285,11 @@ namespace Pf2eModel.Migrations
.HasColumnOrder(2)
.HasComment("Идентификатор цели");
- b.Property("LegacyEntitiesId")
- .HasColumnType("integer")
- .HasColumnName("legacy_entities_id");
-
- b.Property("LegacyEntityId")
- .HasColumnType("integer")
- .HasColumnName("legacy_entity_id");
-
- b.Property("RemasterEntitiesId")
- .HasColumnType("integer")
- .HasColumnName("remaster_entities_id");
-
- b.Property("RemasterEntityId")
- .HasColumnType("integer")
- .HasColumnName("remaster_entity_id");
-
b.HasKey("LegacyId", "RemasterId")
.HasName("pk_legacy_remasters");
- b.HasIndex("LegacyEntitiesId")
- .HasDatabaseName("ix_legacy_remasters_legacy_entities_id");
-
- b.HasIndex("LegacyEntityId")
- .HasDatabaseName("ix_legacy_remasters_legacy_entity_id");
-
- b.HasIndex("RemasterEntitiesId")
- .HasDatabaseName("ix_legacy_remasters_remaster_entities_id");
-
- b.HasIndex("RemasterEntityId")
- .HasDatabaseName("ix_legacy_remasters_remaster_entity_id");
+ b.HasIndex("RemasterId")
+ .HasDatabaseName("ix_legacy_remasters_remaster_id");
b.ToTable("legacy_remasters", (string)null);
});
@@ -1970,33 +1945,19 @@ namespace Pf2eModel.Migrations
modelBuilder.Entity("Pf2eModel.Model.Base.LegacyRemaster", b =>
{
- b.HasOne("Pf2eModel.Model.Base.Entity", null)
- .WithMany()
- .HasForeignKey("LegacyEntitiesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_legacy_entities_id");
-
b.HasOne("Pf2eModel.Model.Base.Entity", "LegacyEntity")
- .WithMany()
- .HasForeignKey("LegacyEntityId")
+ .WithMany("LegacyTransferEntities")
+ .HasForeignKey("LegacyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_legacy_entity_id");
-
- b.HasOne("Pf2eModel.Model.Base.Entity", null)
- .WithMany()
- .HasForeignKey("RemasterEntitiesId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_remaster_entities_id");
+ .HasConstraintName("fk_legacy_remasters_entities_legacy_id");
b.HasOne("Pf2eModel.Model.Base.Entity", "RemasterEntity")
- .WithMany()
- .HasForeignKey("RemasterEntityId")
+ .WithMany("RemasterTransferEntities")
+ .HasForeignKey("RemasterId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
- .HasConstraintName("fk_legacy_remasters_entities_remaster_entity_id");
+ .HasConstraintName("fk_legacy_remasters_entities_remaster_id");
b.Navigation("LegacyEntity");
@@ -2635,6 +2596,10 @@ namespace Pf2eModel.Migrations
b.Navigation("Externals");
+ b.Navigation("LegacyTransferEntities");
+
+ b.Navigation("RemasterTransferEntities");
+
b.Navigation("Sources");
});
diff --git a/Pf2eModel/Model/Base/Entity.cs b/Pf2eModel/Model/Base/Entity.cs
index 823839c..53c0bc2 100644
--- a/Pf2eModel/Model/Base/Entity.cs
+++ b/Pf2eModel/Model/Base/Entity.cs
@@ -110,8 +110,18 @@ public class Entity
///
public ICollection LegacyEntities { get; set; } = [];
+ ///
+ /// Коллекция переходных объектов для устаревших сущностей.
+ ///
+ public ICollection LegacyTransferEntities { get; set; } = [];
+
///
/// Коллекция обновлённых сущностей.
///
public ICollection RemasterEntities { get; set; } = [];
+
+ ///
+ /// Коллекция переходных объектов для обновлённых сущностей.
+ ///
+ public ICollection RemasterTransferEntities { get; set; } = [];
}
diff --git a/Pf2eModel/Model/Base/Source/EntitySource.cs b/Pf2eModel/Model/Base/Source/EntitySource.cs
index 9be09d7..7a93781 100644
--- a/Pf2eModel/Model/Base/Source/EntitySource.cs
+++ b/Pf2eModel/Model/Base/Source/EntitySource.cs
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
+using Newtonsoft.Json;
namespace Pf2eModel.Model.Base.Source;
@@ -50,6 +51,7 @@ public class EntitySource
///
/// Сущность, к которой относится источник.
///
+ [JsonIgnore]
public Entity Entity { get; set; } = null!;
///
diff --git a/Pf2eModel/Model/Base/Source/Source.cs b/Pf2eModel/Model/Base/Source/Source.cs
index 7f098f1..0c56e23 100644
--- a/Pf2eModel/Model/Base/Source/Source.cs
+++ b/Pf2eModel/Model/Base/Source/Source.cs
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
+using Newtonsoft.Json;
using Pf2eModel.Model.Enum;
namespace Pf2eModel.Model.Base.Source;
@@ -44,5 +45,6 @@ public class Source
///
/// Связанные сущности.
///
+ [JsonIgnore]
public ICollection EntitySources { get; set; } = [];
}
diff --git a/Pf2eModel/Model/Base/Targets/ExternalTarget.cs b/Pf2eModel/Model/Base/Targets/ExternalTarget.cs
index 44b74bb..a02b9b1 100644
--- a/Pf2eModel/Model/Base/Targets/ExternalTarget.cs
+++ b/Pf2eModel/Model/Base/Targets/ExternalTarget.cs
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
+using Newtonsoft.Json;
namespace Pf2eModel.Model.Base.Targets;
@@ -45,5 +46,6 @@ public class ExternalTarget
///
/// Коллекция сущностей, которые ссылаются на эту цель.
///
+ [JsonIgnore]
public ICollection EntityExternals { get; set; } = [];
}
diff --git a/Pf2eModel/Pf2eDbContextModel.cs b/Pf2eModel/Pf2eDbContextModel.cs
index 1905681..2c3c06d 100644
--- a/Pf2eModel/Pf2eDbContextModel.cs
+++ b/Pf2eModel/Pf2eDbContextModel.cs
@@ -123,12 +123,14 @@ public partial class Pf2eDbContext
.HasMany(e => e.LegacyEntities)
.WithMany(e => e.RemasterEntities)
.UsingEntity(
- //l =>
- // l.HasOne(lr => lr.LegacyEntity).WithMany().HasForeignKey(lr => lr.LegacyId),
- //r =>
- // r.HasOne(lr => lr.RemasterEntity)
- // .WithMany()
- // .HasForeignKey(lr => lr.RemasterId)
+ l =>
+ l.HasOne(lr => lr.LegacyEntity)
+ .WithMany(e => e.LegacyTransferEntities)
+ .HasForeignKey(lr => lr.LegacyId),
+ r =>
+ r.HasOne(lr => lr.RemasterEntity)
+ .WithMany(e => e.RemasterTransferEntities)
+ .HasForeignKey(lr => lr.RemasterId)
);
});