Skip to content

Commit

Permalink
handle unrecognized entries in synthesis
Browse files Browse the repository at this point in the history
  • Loading branch information
msarilar committed Mar 18, 2023
1 parent f7af07e commit 7fefc91
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 15 deletions.
46 changes: 43 additions & 3 deletions EDEngineer.Tests/LogParsingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ namespace EDEngineer.Tests
[TestFixture]
public class LogParsingTests
{
private readonly JournalEntryConverter converter = new JournalEntryConverter(new ItemNameConverter(new List<EntryData>(), new Dictionary<string, Equipment>()),
Mock.Of<ISimpleDictionary<string, Entry>>(), new Languages(), new List<Blueprint>());

[Test]
public void Can_convert_loadout()
{
Expand Down Expand Up @@ -590,12 +593,49 @@ public void Can_convert_loadout()
}";
#endregion

var converter = new JournalEntryConverter(new ItemNameConverter(new List<EntryData>(), new Dictionary<string, Equipment>()),
Mock.Of<ISimpleDictionary<String, Entry>>(), new Languages(), new List<Blueprint>());

var jObject = JObject.Parse(loadout);

Check.ThatCode(() => converter.ExtractOperation(jObject, JournalEvent.Loadout)).DoesNotThrow();
}

[Test]
public void Can_parse_event()
{
#region json
const string json = @"{
""timestamp"":""2023-03-17T01:40:41Z"",
""event"":""Synthesis"",
""Name"":""AX Dumbfire Ammo Premium"",
""Materials"":[
{
""Name"":""tungsten"",
""count"":5
},
{
""Name"":""mercury"",
""count"":4
},
{
""Name"":""polonium"",
""count"":2
},
{
""Name"":""tg_biomechanicalsconduits"",
""Name_Localised"":""Bio-Mechanical Conduits"",
""count"":5
},
{
""Name"":""tg_shipflightdata"",
""Name_Localised"":""Ship Flight Data"",
""count"":6
}
]
}";
#endregion

var jObject = JObject.Parse(json);

Check.ThatCode(() => converter.ExtractOperation(jObject, JournalEvent.Synthesis)).DoesNotThrow();
}
}
}
47 changes: 35 additions & 12 deletions EDEngineer/Utils/JournalEntryConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,37 @@ namespace EDEngineer.Utils
public class JournalEntryConverter : JsonConverter
{
private readonly ItemNameConverter converter;
private readonly ISimpleDictionary<string, Entry> entries;
private readonly Func<string, string, Entry> getEntry;
private readonly Languages languages;
private static readonly HashSet<string> relevantJournalEvents = new HashSet<string>(Enum.GetNames(typeof(JournalEvent)));

public JournalEntryConverter(ItemNameConverter converter, ISimpleDictionary<string, Entry> entries, Languages languages, IEnumerable<Blueprint> blueprints)
{
this.converter = converter;
this.entries = entries;
this.getEntry = (name, localizedName) =>
{
if(!entries.ContainsKey(name))
{
if (string.IsNullOrEmpty(localizedName))
{
localizedName = name;
}

entries[name] = new Entry(new EntryData()
{
FormattedName = name,
Name = localizedName,
SettlementType = new string[0],
BuildingType = new string[0],
ContainerType = new string[0],
Kind = Kind.Unknown,
Rarity = Rarity.None,
Group = Group.Item
});
}

return entries[name];
};
this.languages = languages;
}

Expand Down Expand Up @@ -450,21 +473,21 @@ private JournalOperation ExtractTechnologyBroker(JObject data)
IngredientsConsumed = (data["Ingredients"]?.Select(c =>
{
dynamic cc = c;
return Tuple.Create(converter.TryGet(Kind.Data | Kind.Material | Kind.Commodity, (string)cc.Name, out var ingredient), ingredient, (int)cc.Count);
}) ?? Enumerable.Empty<Tuple<bool, string, int>>())
return Tuple.Create(converter.TryGet(Kind.Data | Kind.Material | Kind.Commodity, (string)cc.Name, out var ingredient), ingredient, (int)cc.Count, (string)cc.Name_Localised);
}) ?? Enumerable.Empty<Tuple<bool, string, int, string>>())
.Union(data["Materials"]?.Select(c =>
{
dynamic cc = c;
var filter = cc.Category == "Encoded" ? Kind.Data : Kind.Material;
return Tuple.Create(converter.TryGet(filter, (string)cc.Name, out var ingredient), ingredient, (int)cc.Count);
}) ?? Enumerable.Empty<Tuple<bool, string, int>>())
return Tuple.Create(converter.TryGet(filter, (string)cc.Name, out var ingredient), ingredient, (int)cc.Count, (string)cc.Name_Localised);
}) ?? Enumerable.Empty<Tuple<bool, string, int, string>>())
.Union(data["Commodities"]?.Select(c =>
{
dynamic cc = c;
return Tuple.Create(converter.TryGet(Kind.Commodity, (string)cc.Name, out var ingredient), ingredient, (int)cc.Count);
}) ?? Enumerable.Empty<Tuple<bool, string, int>>())
return Tuple.Create(converter.TryGet(Kind.Commodity, (string)cc.Name, out var ingredient), ingredient, (int)cc.Count, (string)cc.Name_Localised);
}) ?? Enumerable.Empty<Tuple<bool, string, int, string>>())
.Where(c => c.Item1)
.Select(c => new BlueprintIngredient(entries[c.Item2], c.Item3)).ToList()
.Select(c => new BlueprintIngredient(getEntry(c.Item2, c.Item4), c.Item3)).ToList()
};

return operation.IngredientsConsumed.Any() ? operation : null;
Expand Down Expand Up @@ -734,7 +757,7 @@ private JournalOperation ExtractSynthesis(JObject data)
var synthesisIngredientName = converter.GetOrCreate(Kind.Material, (string)cc.Name);
int? count = cc.Value ?? cc.Count;

synthesisOperation.IngredientsConsumed.Add(new BlueprintIngredient(entries[synthesisIngredientName],
synthesisOperation.IngredientsConsumed.Add(new BlueprintIngredient(getEntry(synthesisIngredientName, (string)cc.Name_Localised),
count ?? 1));
}

Expand Down Expand Up @@ -771,8 +794,8 @@ private JournalOperation ExtractEngineerOperation(JObject data)
IngredientsConsumed = data["Ingredients"].Select(c =>
{
dynamic cc = c;
return Tuple.Create(converter.TryGet(Kind.Data | Kind.Material | Kind.Commodity, (string)cc.Name, out var rewardName), rewardName, (int)(cc.Value ?? cc.Count));
}).Where(c => c.Item1).Select(c => new BlueprintIngredient(entries[c.Item2], c.Item3)).ToList(),
return Tuple.Create(converter.TryGet(Kind.Data | Kind.Material | Kind.Commodity, (string)cc.Name, out var rewardName), rewardName, (int)(cc.Value ?? cc.Count), (string)cc.Name_Localised);
}).Where(c => c.Item1).Select(c => new BlueprintIngredient(getEntry(c.Item2, c.Item4), c.Item3)).ToList(),
Modifiers = ExtractModifiers(data["Modifiers"]).ToList()
};

Expand Down

0 comments on commit 7fefc91

Please sign in to comment.