Исправление импортёра после разделения проектов
This commit is contained in:
@@ -37,7 +37,7 @@ internal class AonprdDataBuilder(AonprdLoader loader)
|
||||
|
||||
IConsole bars = window.OpenBox("Progress", Console.WindowWidth, 4, new BoxStyle { Body = Colors.WhiteOnBlack });
|
||||
|
||||
Window output = new Window(0, 4, Console.WindowWidth, Console.WindowHeight - 4, window);
|
||||
Window output = new(0, 4, Console.WindowWidth, Console.WindowHeight - 4, window);
|
||||
|
||||
ProgressBar bar1 = new(bars, Loader.ItemCount, 15);
|
||||
ProgressBar bar2 = new(bars, 1, 15);
|
||||
@@ -54,7 +54,7 @@ internal class AonprdDataBuilder(AonprdLoader loader)
|
||||
{
|
||||
bar2.Refresh(i++, $"{entry.Id}");
|
||||
|
||||
ProcessorInput input = new ProcessorInput(entry.Json);
|
||||
AonprdProcessorInput input = new(entry.Json);
|
||||
AbstractProcessor processor = (AbstractProcessor) item.Constructor.Invoke([input]);
|
||||
|
||||
try
|
||||
|
||||
@@ -35,7 +35,7 @@ public static class AonprdEnumResolver
|
||||
}),
|
||||
];
|
||||
|
||||
public static T ResolveEventArgs<T>(string value) where T : struct, Enum
|
||||
public static T Resolve<T>(string value) where T : Enum
|
||||
{
|
||||
Type type = typeof(T);
|
||||
|
||||
@@ -56,7 +56,7 @@ public static class AonprdEnumResolver
|
||||
public abstract Type Type { get; }
|
||||
}
|
||||
|
||||
private class Solver<T>(Dictionary<string, T> data) : Solver where T : struct, Enum
|
||||
private class Solver<T>(Dictionary<string, T> data) : Solver where T : Enum
|
||||
{
|
||||
public override Type Type { get; } = typeof(T);
|
||||
public Dictionary<string, T> Data { get; } = data;
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
||||
|
||||
internal class AonprdProcessorInput(JObject input) : ProcessorInput(input)
|
||||
{
|
||||
public override T Enum<T>(string value)
|
||||
{
|
||||
try
|
||||
{
|
||||
return AonprdEnumResolver.Resolve<T>(value);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return base.Enum<T>(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
-39
@@ -1,5 +1,4 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
||||
using Pf2eModel.Model;
|
||||
using Pf2eModel.Model.Base;
|
||||
using Pf2eModel.Model.Base.Source;
|
||||
@@ -11,13 +10,13 @@ using System.Text;
|
||||
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder;
|
||||
|
||||
internal abstract class AbstractProcessor(JObject input)
|
||||
internal abstract class AbstractProcessor(ProcessorInput input)
|
||||
{
|
||||
protected DatabaseHelper Helper = DatabaseHelper.Instance;
|
||||
|
||||
public readonly Pf2eDbContext Context = DatabaseHelper.DbContext;
|
||||
|
||||
public readonly JObject Input = input;
|
||||
public readonly ProcessorInput Input = input;
|
||||
|
||||
public Entity Entity { get; set; } = new();
|
||||
|
||||
@@ -30,15 +29,15 @@ internal abstract class AbstractProcessor(JObject input)
|
||||
Entity.Id = Helper.NextEntityId;
|
||||
Entity.Type = Type;
|
||||
|
||||
Entity.Name = GetRequired<string>("name");
|
||||
Entity.Img = GetRequired<string>("img");
|
||||
Entity.Description = GetRequired<string>("system.description.value");
|
||||
Entity.Name = Input.GetRequired<string>("name");
|
||||
Entity.Img = Input.GetRequired<string>("img");
|
||||
Entity.Description = Input.GetRequired<string>("system.description.value");
|
||||
|
||||
Entity.IsTranslated = false;
|
||||
Entity.IsChecked = false;
|
||||
|
||||
Entity.Slug = Helper.GenerateSlug(Entity.Name);
|
||||
Entity.Rarity = EnumOptional<EntityRarity>("system.traits.rarity", EntityRarity.Common);
|
||||
Entity.Rarity = Input.EnumOptional<EntityRarity>("system.traits.rarity", EntityRarity.Common);
|
||||
|
||||
Object.Id = Entity.Id;
|
||||
|
||||
@@ -59,10 +58,10 @@ internal abstract class AbstractProcessor(JObject input)
|
||||
{
|
||||
Entity = Entity,
|
||||
|
||||
Source = GetSource(GetRequired<string>("system.publication.title")),
|
||||
Source = GetSource(Input.GetRequired<string>("system.publication.title")),
|
||||
|
||||
Suffix = "",
|
||||
IsRemaster = GetRequired<bool>("system.publication.remaster")
|
||||
IsRemaster = Input.GetRequired<bool>("system.publication.remaster")
|
||||
};
|
||||
Context.EntitySources.Add(source);
|
||||
|
||||
@@ -71,13 +70,13 @@ internal abstract class AbstractProcessor(JObject input)
|
||||
{
|
||||
Entity = Entity,
|
||||
Target = GetTarget(),
|
||||
Suffix = GetRequired<string>("_id"),
|
||||
Md5 = Md5(Input.ToString())
|
||||
Suffix = Input.GetRequired<string>("_id"),
|
||||
Md5 = Md5(Input.Input.ToString())
|
||||
};
|
||||
Context.EntityExternals.Add(external);
|
||||
|
||||
// Traits
|
||||
JToken? traitsJson = Input.SelectToken("system.traits.value");
|
||||
JToken? traitsJson = Input.Input.SelectToken("system.traits.value");
|
||||
|
||||
if (traitsJson?.Type != JTokenType.Array)
|
||||
{
|
||||
@@ -95,33 +94,6 @@ internal abstract class AbstractProcessor(JObject input)
|
||||
Context.SaveChanges();
|
||||
}
|
||||
|
||||
public T GetRequired<T>(string path)
|
||||
{
|
||||
JToken token = Input.SelectToken(path) ?? throw new NullReferenceException($"'{path}' is null");
|
||||
|
||||
return token.ToObject<T>() ?? throw new NullReferenceException($"'{path}' is null");
|
||||
}
|
||||
|
||||
public T? GetOptional<T>(string path)
|
||||
{
|
||||
JToken? token = Input.SelectToken(path) ?? null;
|
||||
|
||||
return (token is null || token.Type == JTokenType.Null) ? default! : token.ToObject<T>() ?? default;
|
||||
}
|
||||
|
||||
public T EnumRequired<T>(string path) where T : Enum
|
||||
{
|
||||
string value = GetOptional<string>(path) ?? throw new NullReferenceException($"Value in path {path} null or not exists");
|
||||
|
||||
return ProcessorInput.Enum<T>(value);
|
||||
}
|
||||
|
||||
public T EnumOptional<T>(string path, T defaultValue) where T : Enum
|
||||
{
|
||||
string? value = GetOptional<string>(path);
|
||||
|
||||
return value is null ? defaultValue : ProcessorInput.Enum<T>(value);
|
||||
}
|
||||
|
||||
protected Source GetSource(string name)
|
||||
{
|
||||
|
||||
+2
-2
@@ -36,13 +36,13 @@ internal class PF2eFoundryDataBuilder
|
||||
continue;
|
||||
}
|
||||
Pf2eTypeProcessor? attribute = type.GetCustomAttribute<Pf2eTypeProcessor>();
|
||||
Processors.Add(attribute!.Type, type.GetConstructor([typeof(JObject)])!);
|
||||
Processors.Add(attribute!.Type, type.GetConstructor([typeof(ProcessorInput)])!);
|
||||
}
|
||||
}
|
||||
|
||||
public AbstractProcessor? GetProcessor(string type, JObject input)
|
||||
{
|
||||
return Processors.TryGetValue(type, out ConstructorInfo? constructor) ? (AbstractProcessor) constructor.Invoke([input]) : null;
|
||||
return Processors.TryGetValue(type, out ConstructorInfo? constructor) ? (AbstractProcessor) constructor.Invoke([new ProcessorInput(input)]) : null;
|
||||
}
|
||||
|
||||
public void TruncateTables()
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ using Pf2eModel.Model.Enum;
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder.Processors;
|
||||
|
||||
[Pf2eTypeProcessor("Item.action")]
|
||||
internal class ActionProcessor(JObject input) : AbstractProcessor(input)
|
||||
internal class ActionProcessor(ProcessorInput input) : AbstractProcessor(input)
|
||||
{
|
||||
public override EntityType Type => EntityType.Action;
|
||||
|
||||
@@ -21,7 +21,7 @@ internal class ActionProcessor(JObject input) : AbstractProcessor(input)
|
||||
*/
|
||||
JObject extra = new()
|
||||
{
|
||||
{ "selfEffect", Input.SelectToken("system.selfEffect") }
|
||||
{ "selfEffect", Input.Input.SelectToken("system.selfEffect") }
|
||||
};
|
||||
|
||||
Object.Extra = extra.ToString(Newtonsoft.Json.Formatting.None);
|
||||
|
||||
+6
-6
@@ -5,7 +5,7 @@ using Pf2eModel.Model.Structure;
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Pf2eFoundry.DataBuilder.Processors;
|
||||
|
||||
[Pf2eTypeProcessor("Item.condition")]
|
||||
internal class ConditionProcessor(JObject input) : AbstractProcessor(input)
|
||||
internal class ConditionProcessor(ProcessorInput input) : AbstractProcessor(input)
|
||||
{
|
||||
public override EntityType Type => EntityType.Condition;
|
||||
|
||||
@@ -17,14 +17,14 @@ internal class ConditionProcessor(JObject input) : AbstractProcessor(input)
|
||||
|
||||
JObject extra = new()
|
||||
{
|
||||
{ "duration", Input.SelectToken("system.duration") },
|
||||
{ "overrides", Input.SelectToken("system.overrides") },
|
||||
{ "references", Input.SelectToken("system.references") },
|
||||
{ "value", Input.SelectToken("system.value") }
|
||||
{ "duration", Input.Input.SelectToken("system.duration") },
|
||||
{ "overrides", Input.Input.SelectToken("system.overrides") },
|
||||
{ "references", Input.Input.SelectToken("system.references") },
|
||||
{ "value", Input.Input.SelectToken("system.value") }
|
||||
};
|
||||
|
||||
Object.Extra = extra.ToString(Newtonsoft.Json.Formatting.None);
|
||||
Object.Group = EnumOptional<ConditionGroup>("system.group", ConditionGroup.Unknown);
|
||||
Object.Group = Input.EnumOptional<ConditionGroup>("system.group", ConditionGroup.Unknown);
|
||||
|
||||
Context.Conditions.Add(Object);
|
||||
}
|
||||
|
||||
+19
-11
@@ -1,41 +1,53 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
|
||||
namespace Pf2eDataScrapper.Importers.Implementations.Aonprd.DataBuilder;
|
||||
namespace Pf2eDataScrapper.Importers;
|
||||
|
||||
internal class ProcessorInput(JObject input)
|
||||
{
|
||||
public readonly JObject Input = input;
|
||||
|
||||
public T GetRequired<T>(string path)
|
||||
public virtual T GetRequired<T>(string path)
|
||||
{
|
||||
JToken token = Input.SelectToken(path) ?? throw new NullReferenceException($"'{path}' is null");
|
||||
|
||||
return token.ToObject<T>() ?? throw new NullReferenceException($"'{path}' is null");
|
||||
}
|
||||
|
||||
public T? GetOptional<T>(string path)
|
||||
public virtual T? GetOptional<T>(string path)
|
||||
{
|
||||
JToken? token = Input.SelectToken(path) ?? null;
|
||||
|
||||
return (token is null || token.Type == JTokenType.Null) ? default! : token.ToObject<T>() ?? default;
|
||||
}
|
||||
|
||||
public T EnumRequired<T>(string path) where T : Enum
|
||||
public virtual T EnumRequired<T>(string path) where T : Enum
|
||||
{
|
||||
string value = GetOptional<string>(path) ?? throw new NullReferenceException($"Value in path {path} null or not exists");
|
||||
|
||||
return Enum<T>(value);
|
||||
}
|
||||
|
||||
public T EnumOptional<T>(string path, T defaultValue) where T : Enum
|
||||
public virtual T EnumOptional<T>(string path, T defaultValue) where T : Enum
|
||||
{
|
||||
string? value = GetOptional<string>(path);
|
||||
|
||||
return value is null ? defaultValue : Enum<T>(value);
|
||||
if (value is null)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static T Enum<T>(string value) where T : Enum
|
||||
try
|
||||
{
|
||||
return Enum<T>(value);
|
||||
}
|
||||
catch (InvalidEnumStringException)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual T Enum<T>(string value) where T : Enum
|
||||
{
|
||||
foreach (System.Reflection.FieldInfo field in typeof(T).GetFields())
|
||||
{
|
||||
@@ -45,10 +57,6 @@ internal class ProcessorInput(JObject input)
|
||||
{
|
||||
variants.Add(pgAttribute.PgName);
|
||||
}
|
||||
if (Attribute.GetCustomAttribute(field, typeof(AonprdEnumAttribute)) is AonprdEnumAttribute aonprdAttribute)
|
||||
{
|
||||
variants.AddRange(aonprdAttribute.Values);
|
||||
}
|
||||
|
||||
if (variants.Contains(value))
|
||||
{
|
||||
Reference in New Issue
Block a user