Рефакторинг и подготовка к созданию обработчиков импорта
This commit is contained in:
@@ -35,5 +35,9 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract void Import();
|
public abstract void Import();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Построение схем данных
|
||||||
|
/// </summary>
|
||||||
|
public abstract void BuildSchemas();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -21,7 +21,8 @@
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public CompendiumFolderCollection Filter()
|
public CompendiumFolderCollection Filter()
|
||||||
{
|
{
|
||||||
return [.. this.FindAll(x => x.Type != CompendiumDocumentType.Actor)];
|
// return [.. this.FindAll(x => x.Type != CompendiumDocumentType.Actor)];
|
||||||
|
return [.. this.FindAll(x => x.Type != CompendiumDocumentType.Actor && x.Name == "Conditions")];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Newtonsoft.Json.Linq;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
|
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
|
||||||
|
|
||||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
||||||
@@ -119,12 +120,52 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var folder in Collection)
|
// foreach (var folder in Collection)
|
||||||
{
|
// {
|
||||||
Console.WriteLine(folder);
|
// Console.WriteLine(folder);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
Collection = Collection.Filter();
|
||||||
|
|
||||||
Console.WriteLine($"Total items: {ItemCount}");
|
Console.WriteLine($"Total items: {ItemCount}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable<LoaderEnrty> Enrties()
|
||||||
|
{
|
||||||
|
foreach (var folder in Collection.FindAll(f => f.Path is not null))
|
||||||
|
{
|
||||||
|
var dirPath = Path.Combine(Importer.Dir, folder.Path!);
|
||||||
|
|
||||||
|
foreach (var filePath in Directory.GetFiles(dirPath, "*.json", SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
var file = new FileInfo(filePath);
|
||||||
|
|
||||||
|
if (file.Name == "_folders.json")
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
using var reader = new StreamReader(file.FullName);
|
||||||
|
var itemJson = JObject.Parse(reader.ReadToEnd());
|
||||||
|
|
||||||
|
var itemFolder = folder;
|
||||||
|
if (itemJson.TryGetValue("folder", out var itemJsonFolder))
|
||||||
|
{
|
||||||
|
itemFolder = Collection.GetById(itemJsonFolder.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return new LoaderEnrty(file, itemJson, itemFolder ?? folder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LoaderEnrty(FileInfo file, JObject itemJson, CompendiumFolder folder)
|
||||||
|
{
|
||||||
|
public FileInfo File { get; } = file;
|
||||||
|
public JObject Json { get; } = itemJson;
|
||||||
|
public CompendiumFolder Folder { get; } = folder;
|
||||||
|
public string Type { get; } = itemJson["type"]?.ToString()
|
||||||
|
?? throw new Exception($"Expected to have `type` field in file {file.FullName}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder;
|
||||||
|
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder;
|
||||||
|
|
||||||
|
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Импортёр для модуля Pf2e FoundryVTT.
|
/// Импортёр для модуля Pf2e FoundryVTT.
|
||||||
@@ -46,7 +49,21 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override void Import()
|
public override void Import()
|
||||||
{
|
{
|
||||||
Loader.Prepare();
|
var builder = new PF2eFoundryDataBuilder(Loader);
|
||||||
|
|
||||||
|
builder.TruncateTables();
|
||||||
|
builder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Построение схем данных
|
||||||
|
/// </summary>
|
||||||
|
public override void BuildSchemas()
|
||||||
|
{
|
||||||
|
var builder = new CompendiumSchemaBuilder(Loader);
|
||||||
|
|
||||||
|
builder.BuildSchemas();
|
||||||
|
builder.Save(EnvSettings.OutputDir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-26
@@ -1,8 +1,9 @@
|
|||||||
using Konsole;
|
using Konsole;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
|
||||||
using Pf2eDataScrapper.SchemaBuilder;
|
using Pf2eDataScrapper.SchemaBuilder;
|
||||||
|
|
||||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Класс построения схемы компендиумов.
|
/// Класс построения схемы компендиумов.
|
||||||
@@ -97,36 +98,15 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
|||||||
var bar = new ProgressBar(Loader.ItemCount);
|
var bar = new ProgressBar(Loader.ItemCount);
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
|
||||||
foreach (var folder in Collection.FindAll(f => f.Path is not null))
|
foreach (var entry in Loader.Enrties())
|
||||||
{
|
{
|
||||||
var dirPath = Path.Combine(Loader.Importer.Dir, folder.Path!);
|
bar.Refresh(i++, entry.Folder.Name);
|
||||||
|
|
||||||
foreach (var filePath in Directory.GetFiles(dirPath, "*.json", SearchOption.AllDirectories))
|
var schemas = GetItemSchemas(entry.Folder, entry.Type);
|
||||||
{
|
|
||||||
bar.Refresh(i++, folder.Name);
|
|
||||||
|
|
||||||
var file = new FileInfo(filePath);
|
|
||||||
|
|
||||||
if (file.Name == "_folders.json")
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
using var reader = new StreamReader(file.FullName);
|
|
||||||
var itemJson = JObject.Parse(reader.ReadToEnd());
|
|
||||||
|
|
||||||
var itemFolder = folder;
|
|
||||||
if (itemJson.TryGetValue("folder", out var itemJsonFolder))
|
|
||||||
{
|
|
||||||
itemFolder = Collection.GetById(itemJsonFolder.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
var schemas = GetItemSchemas(itemFolder ?? folder, itemJson["type"]?.ToString());
|
|
||||||
|
|
||||||
foreach (var schema in schemas)
|
foreach (var schema in schemas)
|
||||||
{
|
{
|
||||||
schema.AddValue(itemJson);
|
schema.AddValue(entry.Json);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+1
-1
@@ -7,7 +7,7 @@ using Newtonsoft.Json.Linq;
|
|||||||
using Pf2eDataScrapper.SchemaBuilder;
|
using Pf2eDataScrapper.SchemaBuilder;
|
||||||
using Pf2eDataScrapper.SchemaBuilder.Types;
|
using Pf2eDataScrapper.SchemaBuilder.Types;
|
||||||
|
|
||||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
|
||||||
{
|
{
|
||||||
internal class CompendiumSchemaTypeResolver : TypeResolver
|
internal class CompendiumSchemaTypeResolver : TypeResolver
|
||||||
{
|
{
|
||||||
+11
-33
@@ -1,46 +1,24 @@
|
|||||||
using Newtonsoft.Json.Linq;
|
using Pf2eDataScrapper;
|
||||||
using Pf2eDataScrapper;
|
|
||||||
using Pf2eDataScrapper.Importers;
|
|
||||||
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry;
|
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry;
|
||||||
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
|
|
||||||
using Pf2eDataScrapper.SchemaBuilder;
|
|
||||||
|
|
||||||
EnvSettings.Load();
|
EnvSettings.Load();
|
||||||
|
|
||||||
Console.WriteLine("Hello, World!");
|
|
||||||
|
|
||||||
//var loader = new GitLoader(EnvSettings.RepositoryDirPath);
|
|
||||||
|
|
||||||
|
|
||||||
var importer = new Pf2EFoundryImporter();
|
var importer = new Pf2EFoundryImporter();
|
||||||
|
|
||||||
//loader.UpdateImporter(importer);
|
|
||||||
|
|
||||||
importer.Prepare();
|
importer.Prepare();
|
||||||
|
|
||||||
var builder = new CompendiumSchemaBuilder(importer.Loader);
|
try
|
||||||
|
|
||||||
builder.BuildSchemas();
|
|
||||||
builder.Save(EnvSettings.OutputDir);
|
|
||||||
|
|
||||||
// var q = importer.Loader.BuildSchemas();
|
|
||||||
// SchemaDumper.Dump(q);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
JObject data;
|
|
||||||
|
|
||||||
using (var reader = new StreamReader("test.json"))
|
|
||||||
{
|
{
|
||||||
data = JObject.Parse(reader.ReadToEnd());
|
importer.Import();
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex);
|
||||||
|
//Console.WriteLine(ex.Message);
|
||||||
|
//Console.WriteLine(ex.InnerException);
|
||||||
|
//Console.WriteLine(ex.StackTrace);
|
||||||
|
}
|
||||||
|
// importer.BuildSchemas();
|
||||||
|
|
||||||
SchemaNode schema = new();
|
|
||||||
schema.AddValue(data);
|
|
||||||
|
|
||||||
Console.WriteLine(schema);
|
|
||||||
|
|||||||
Reference in New Issue
Block a user