Рефакторинг и подготовка к созданию обработчиков импорта
This commit is contained in:
@@ -35,5 +35,9 @@
|
||||
/// </summary>
|
||||
public abstract void Import();
|
||||
|
||||
/// <summary>
|
||||
/// Построение схем данных
|
||||
/// </summary>
|
||||
public abstract void BuildSchemas();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -21,7 +21,8 @@
|
||||
/// <returns></returns>
|
||||
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;
|
||||
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
||||
@@ -119,12 +120,52 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var folder in Collection)
|
||||
{
|
||||
Console.WriteLine(folder);
|
||||
}
|
||||
// foreach (var folder in Collection)
|
||||
// {
|
||||
// Console.WriteLine(folder);
|
||||
// }
|
||||
|
||||
Collection = Collection.Filter();
|
||||
|
||||
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>
|
||||
/// Импортёр для модуля Pf2e FoundryVTT.
|
||||
@@ -46,7 +49,21 @@
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-28
@@ -1,8 +1,9 @@
|
||||
using Konsole;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
|
||||
using Pf2eDataScrapper.SchemaBuilder;
|
||||
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс построения схемы компендиумов.
|
||||
@@ -97,36 +98,15 @@ namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
||||
var bar = new ProgressBar(Loader.ItemCount);
|
||||
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);
|
||||
|
||||
foreach (var schema in schemas)
|
||||
{
|
||||
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)
|
||||
{
|
||||
schema.AddValue(itemJson);
|
||||
}
|
||||
schema.AddValue(entry.Json);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ using Newtonsoft.Json.Linq;
|
||||
using Pf2eDataScrapper.SchemaBuilder;
|
||||
using Pf2eDataScrapper.SchemaBuilder.Types;
|
||||
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.SchemaBuilder
|
||||
{
|
||||
internal class CompendiumSchemaTypeResolver : TypeResolver
|
||||
{
|
||||
+11
-33
@@ -1,46 +1,24 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Pf2eDataScrapper;
|
||||
using Pf2eDataScrapper.Importers;
|
||||
using Pf2eDataScrapper;
|
||||
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry;
|
||||
using Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.Compendium;
|
||||
using Pf2eDataScrapper.SchemaBuilder;
|
||||
|
||||
EnvSettings.Load();
|
||||
|
||||
Console.WriteLine("Hello, World!");
|
||||
|
||||
//var loader = new GitLoader(EnvSettings.RepositoryDirPath);
|
||||
|
||||
|
||||
var importer = new Pf2EFoundryImporter();
|
||||
|
||||
//loader.UpdateImporter(importer);
|
||||
|
||||
importer.Prepare();
|
||||
|
||||
var builder = new CompendiumSchemaBuilder(importer.Loader);
|
||||
|
||||
builder.BuildSchemas();
|
||||
builder.Save(EnvSettings.OutputDir);
|
||||
|
||||
// var q = importer.Loader.BuildSchemas();
|
||||
// SchemaDumper.Dump(q);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return;
|
||||
|
||||
JObject data;
|
||||
|
||||
using (var reader = new StreamReader("test.json"))
|
||||
try
|
||||
{
|
||||
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