From 3e15096dfc8982482dbb7ab4d5f3615a6e31d0ac Mon Sep 17 00:00:00 2001 From: Florian Stinglmayr Date: Fri, 21 Jan 2022 20:03:17 +0100 Subject: [PATCH] allow each step to generate more than one result --- BGS/Cartographics.cs | 4 +- BGS/LogEntry.cs | 2 +- BGS/Report.cs | 111 +++++++++++++++++++------------------- BGS/SellCargo.cs | 7 +++ BGS/SellMicroResources.cs | 6 +++ BGS/Vouchers.cs | 7 +++ 6 files changed, 78 insertions(+), 59 deletions(-) diff --git a/BGS/Cartographics.cs b/BGS/Cartographics.cs index 8f2a5d1..a5ac29a 100644 --- a/BGS/Cartographics.cs +++ b/BGS/Cartographics.cs @@ -4,10 +4,8 @@ using EDJournal; namespace EliteBGS.BGS { public class Cartographics : LogEntry { - public Cartographics(MultiSellExplorationDataEntry e, string current_system, string current_station) { + public Cartographics(MultiSellExplorationDataEntry e) { Entries.Add(e); - System = current_system; - Station = current_station; } public int TotalSum { diff --git a/BGS/LogEntry.cs b/BGS/LogEntry.cs index c8ee55f..0c07723 100644 --- a/BGS/LogEntry.cs +++ b/BGS/LogEntry.cs @@ -35,6 +35,6 @@ namespace EliteBGS.BGS { throw new NotImplementedException("not implemented"); } - public string Name => this.ToString(); + public string Name => ToString(); } } diff --git a/BGS/Report.cs b/BGS/Report.cs index 01bb3fc..dd216a3 100644 --- a/BGS/Report.cs +++ b/BGS/Report.cs @@ -65,7 +65,7 @@ namespace EliteBGS.BGS { objectives.ForEach(x => x.Clear()); foreach (var e in relevant) { - LogEntry entry = null; + List results = new List(); bool collate = false; if (e.Is(Events.Docked)) { @@ -94,10 +94,10 @@ namespace EliteBGS.BGS { } } else if (e.Is(Events.MissionCompleted)) { var completed = e as MissionCompletedEntry; - entry = new MissionCompleted(completed) { + results.Add(new MissionCompleted(completed) { System = current_system, Station = current_station - }; + }); if (completed.HumanReadableNameWasGenerated) { /* If the human readable name was generated, we send a log message. Because the * generated names all sort of suck, we should have more human readable names in @@ -118,7 +118,7 @@ namespace EliteBGS.BGS { "Please adjust start date to when the mission was accepted to include it in the list."); continue; } - entry = new MissionFailed(accepted) { Failed = failed, System = current_system }; + results.Add(new MissionFailed(accepted) { Failed = failed, System = current_system }); if (failed.HumanReadableName == null) { OnLog?.Invoke("Human readable name for mission \"" + failed.Name + @@ -131,27 +131,28 @@ namespace EliteBGS.BGS { } else if (e.Is(Events.MultiSellExplorationData)) { /* For multi-sell-exploraton-data only the controlling faction of the station sold to matters. */ - entry = new Cartographics(e as MultiSellExplorationDataEntry, current_system, current_station); - entry.Faction = controlling_faction; + results.Add(new Cartographics(e as MultiSellExplorationDataEntry) { + System = current_system, + Station = current_station, + Faction = controlling_faction + }); } else if (e.Is(Events.RedeemVoucher)) { /* Same for selling combat vouchers. Only the current controlling faction matters here. */ - entry = new Vouchers(); - entry.Entries.Add(e); - entry.System = current_system; - entry.Station = current_station; - entry.Faction = (e as RedeemVoucherEntry).Factions.FirstOrDefault() ?? ""; - entry.ControllingFaction = controlling_faction; + results.Add(new Vouchers(e as RedeemVoucherEntry) { + System = current_system, + Station = current_station, + Faction = (e as RedeemVoucherEntry).Factions.FirstOrDefault() ?? "", + ControllingFaction = controlling_faction, + }); collate = true; } else if (e.Is(Events.SellMicroResources)) { - entry = new SellMicroResources() { + results.Add(new SellMicroResources(e as SellMicroResourcesEntry) { Faction = controlling_faction, Station = current_station, System = current_system - }; - - entry.Entries.Add(e); + }); } else if (e.Is(Events.MarketBuy)) { MarketBuyEntry buy = e as MarketBuyEntry; if (string.IsNullOrEmpty(buy.Type) || buy.BuyPrice == 0) { @@ -169,60 +170,60 @@ namespace EliteBGS.BGS { profit = sell.TotalSale - (avg * sell.Count); } - entry = new SellCargo() { + results.Add(new SellCargo(e as MarketSellEntry) { Faction = controlling_faction, Station = current_station, System = current_system, Profit = profit - }; - - entry.Entries.Add(e); + }); } - if (entry == null) { + if (results == null || results.Count <= 0) { continue; } - /* Find all objectives that generally match. - */ - var matches = objectives - .Where(x => x.Matches(entry) > 0) - .OrderBy(x => x.Matches(entry)) - ; - - Objective objective = null; - if (matches != null && matches.Count() > 0) { - /* Then select the one that matches the most. + foreach (LogEntry entry in results) { + /* Find all objectives that generally match. */ - objective = matches + var matches = objectives + .Where(x => x.Matches(entry) > 0) .OrderBy(x => x.Matches(entry)) - .Reverse() - .First() ; - } else { - /* create a new objective if we don't have one */ - objective = new Objective() { - Station = entry.Station, - Faction = entry.Faction, - System = entry.System, - }; - objectives.Add(objective); - } - LogEntry existing = null; - - existing = objective.LogEntries.Find(x => { - try { - return x.CompareTo(entry) == 0; - } catch (NotImplementedException) { - return false; + Objective objective = null; + if (matches != null && matches.Count() > 0) { + /* Then select the one that matches the most. + */ + objective = matches + .OrderBy(x => x.Matches(entry)) + .Reverse() + .First() + ; + } else { + /* create a new objective if we don't have one */ + objective = new Objective() { + Station = entry.Station, + Faction = entry.Faction, + System = entry.System, + }; + objectives.Add(objective); } - }); - if (collate && existing != null) { - existing.Entries.Add(e); - } else if (!collate || existing == null) { - objective.LogEntries.Add(entry); + LogEntry existing = null; + + existing = objective.LogEntries.Find(x => { + try { + return x.CompareTo(entry) == 0; + } catch (NotImplementedException) { + return false; + } + }); + + if (collate && existing != null) { + existing.Entries.Add(e); + } else if (!collate || existing == null) { + objective.LogEntries.Add(entry); + } } } } diff --git a/BGS/SellCargo.cs b/BGS/SellCargo.cs index fadaba1..61bb1c3 100644 --- a/BGS/SellCargo.cs +++ b/BGS/SellCargo.cs @@ -5,6 +5,13 @@ using EDJournal; namespace EliteBGS.BGS { public class SellCargo : LogEntry { public int Profit { get; set; } + + public SellCargo() { } + + public SellCargo(MarketSellEntry e) { + Entries.Add(e); + } + public override string ToString() { StringBuilder builder = new StringBuilder(); var sold = Entries.OfType().ToArray(); diff --git a/BGS/SellMicroResources.cs b/BGS/SellMicroResources.cs index ad298fe..308d928 100644 --- a/BGS/SellMicroResources.cs +++ b/BGS/SellMicroResources.cs @@ -12,6 +12,12 @@ namespace EliteBGS.BGS { } } + public SellMicroResources() { } + + public SellMicroResources(SellMicroResourcesEntry e) { + Entries.Add(e); + } + public override string ToString() { return string.Format("Sell Micro Resources: {0}", Credits.FormatCredits(TotalSum)); } diff --git a/BGS/Vouchers.cs b/BGS/Vouchers.cs index 7a763bf..8974e40 100644 --- a/BGS/Vouchers.cs +++ b/BGS/Vouchers.cs @@ -6,6 +6,13 @@ namespace EliteBGS.BGS { public class Vouchers : LogEntry { private string type = null; + public Vouchers() { + } + + public Vouchers(RedeemVoucherEntry e) { + Entries.Add(e); + } + public int TotalSum { get { return Entries