diff --git a/BGS/DiscordLogGenerator.cs b/BGS/DiscordLogGenerator.cs index 283513b..ffde1ce 100644 --- a/BGS/DiscordLogGenerator.cs +++ b/BGS/DiscordLogGenerator.cs @@ -1,5 +1,83 @@ -namespace EliteBGS.BGS { - public interface IDiscordLogGenerator { - string GenerateDiscordLog(Report report); +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text; +using EliteBGS.BGS.LogGenerator; + +namespace EliteBGS.BGS { + public class DiscordLogGenerator { + protected List formatters = new List() { + new MissionFormat(), + new FailedMissionFormat(), + new MurderFormat(), + new VoucherFormat(), + new CombatZoneFormat(), + new KillBondsFormat(), + new CartographicsFormat(), + new MicroResourcesFormat(), + new MarketBuyFormat(), + new CargoSoldFormatter(), + new VistaGenomicsFormat(), + new SearchAndRescueFormat(), + }; + + protected virtual string GenerateHeader() { + return ""; + } + + protected virtual string GenerateFooter() { + return "\n"; + } + + protected virtual string GenerateObjectiveHeader(Objective objective) { + StringBuilder log = new StringBuilder(); + + log.AppendFormat("**Date:** {0}\n", DateTime.Now.ToString("dd/MM/yyyy")); + log.AppendFormat("**Location:** {0}\n", objective.ToShortString()); + log.AppendFormat("**Faction:** {0}\n", objective.Faction); + log.AppendLine(""); + log.AppendLine("```"); + + return log.ToString(); + } + + protected virtual string GenerateObjectiveFooter(Objective objective) { + return "```\n"; + } + + public virtual string GenerateDiscordLog(Report report) { + StringBuilder log = new StringBuilder(); + var objectives = report.Objectives + .Where(x => x.IsEnabled && x.LogEntries.Count() > 0) + .ToArray() + ; + + if (objectives.Count() <= 0) { + return ""; + } + + log.AppendFormat("{0}\n", GenerateHeader()); + + foreach (Objective objective in objectives) { + StringBuilder objlog = new StringBuilder(); + + objlog.AppendFormat("{0}\n", GenerateObjectiveHeader(objective)); + + foreach (LogFormatter formatter in formatters) { + string text = formatter.GenerateLog(objective); + if (!string.IsNullOrEmpty(text)) { + objlog.AppendFormat("{0}\n", text); + } + } + + objlog.AppendFormat("{0}\n", GenerateObjectiveFooter(objective)); + + log.AppendFormat("{0}\n", objlog.ToString().Trim()); + } + + log.AppendFormat("{0}\n", GenerateFooter()); + + return log.ToString(); + } } } diff --git a/BGS/GenericDiscordLog.cs b/BGS/GenericDiscordLog.cs index 2a5de10..9534279 100644 --- a/BGS/GenericDiscordLog.cs +++ b/BGS/GenericDiscordLog.cs @@ -1,313 +1,5 @@ -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using EDJournal; -using EliteBGS.BGS.LogGenerator; - -namespace EliteBGS.BGS { - public class GenericDiscordLog : IDiscordLogGenerator { - private List formatters = new List() { - new VistaGenomicsFormat(), - new SearchAndRescueFormat(), - }; - - private string FormatDate() { - DateTime today = DateTime.Now; - return today.ToString("dd/MM/yyyy"); - } - - private string BuildCartoGraphics(Objective objective) { - var total = from entries in objective.LogEntries - where entries.GetType() == typeof(Cartographics) - select entries - ; - var pages = total.Count(); - var sum = total.Sum(x => (x as Cartographics).TotalSum); - - if (pages <= 0 || sum <= 0) { - return ""; - } - - return string.Format("Sold {0} page(s) worth of universal cartographics\n" + - "(Total value: {1})\n\n", pages, Credits.FormatCredits(sum)); - } - - private string BuildCargoSold(Objective objective) { - StringBuilder builder = new StringBuilder(); - SellCargo[] sold = objective.LogEntries - .OfType() - .ToArray() - ; - - if (sold == null || sold.Length <= 0) { - return ""; - } - - foreach (SellCargo sell in sold) { - builder.AppendFormat("{0}\n", sell.ToString()); - } - - builder.AppendFormat("\n"); - - return builder.ToString(); - } - - private string BuildMicroResourcesSold(Objective objective) { - var total = from entries in objective.LogEntries - where entries.GetType() == typeof(SellMicroResources) - select entries - ; - var sum = total.Sum(x => (x as SellMicroResources).TotalSum); - - if (sum <= 0) { - return ""; - } - - return string.Format("Sold {0} worth of Micro Resources\n", - Credits.FormatCredits(sum)); - } - - private string BuildKillBonds(Objective objective) { - StringBuilder builder = new StringBuilder(); - FactionKillBonds[] bonds = objective.LogEntries - .OfType() - .ToArray() - ; - - if (bonds == null || bonds.Length == 0) { - return builder.ToString(); - } - - foreach (FactionKillBonds bond in bonds) { - builder.AppendFormat("{0}\n", bond.ToString()); - } - - builder.AppendFormat("\n"); - - return builder.ToString(); - } - - private string BuildVouchers(Objective objective) { - StringBuilder builder = new StringBuilder(); - var missions = from entries in objective.LogEntries - where entries.GetType() == typeof(Vouchers) - select entries - ; - - if (missions == null || missions.Count() <= 0) { - return ""; - } - - foreach (var mission in missions) { - var m = mission as Vouchers; - builder.AppendFormat("Handed in {0} vouchers for {1}\n", m.Type, m.Faction); - builder.AppendFormat("(Total value: {0})\n", Credits.FormatCredits(m.TotalSum)); - builder.AppendFormat("\n"); - } - - return builder.ToString(); - } - - private string BuildFailedMissions(Objective objective) { - MissionFailed[] missions = objective.LogEntries.OfType().ToArray(); - StringBuilder builder = new StringBuilder(); - - if (missions.Length <= 0) { - return ""; - } - - foreach (MissionFailed failed in missions) { - MissionFailedEntry f = failed.Failed; - builder.AppendFormat("Failed {0} mission(s) \"{1}\" targeting {2}\n", - failed.Amount, - f.HumanReadableName == null ? f.Name : f.HumanReadableName, - failed.Faction - ); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - private string BuildMissionList(Objective objective) { - Dictionary> collated = new Dictionary>(); - StringBuilder output = new StringBuilder(); - int total_influence = 0; - - var missions = from entries in objective.LogEntries - where entries.GetType() == typeof(MissionCompleted) - select entries - ; - - if (missions == null) { - return ""; - } - - foreach (MissionCompleted m in missions) { - if (!collated.ContainsKey(m.MissionName)) { - collated[m.MissionName] = new Dictionary(); - } - if (!collated[m.MissionName].ContainsKey(m.Influence)) { - collated[m.MissionName][m.Influence] = 0; - } - - ++collated[m.MissionName][m.Influence]; - - total_influence += m.Influence.Length; - } - - foreach (var mission in collated) { - if (objective.Faction != null) { - output.AppendFormat("{0}\n", mission.Key); - } else { - output.AppendFormat("{0}\n", mission.Key); - } - output.Append("("); - foreach (var influence in mission.Value.OrderBy(x => x.Key.Length)) { - output.AppendFormat("Inf{0} x{1}, ", influence.Key, influence.Value); - } - output.Remove(output.Length - 2, 2); // remove last ", " - output.Append(")\n\n"); - } - - var support = objective.LogEntries.OfType(); - foreach (InfluenceSupport inf in support) { - output.Append(inf.ToString()); - output.Append("\n"); - total_influence += inf.Influence.Length; - } - - if (support.Count() > 0) { - output.Append("\n"); - } - - if (total_influence > 0) { - output.AppendFormat("Total Influence: {0}\n\n", total_influence); - } - - return output.ToString(); - } - - private string BuildCombatZones(Objective objective) { - StringBuilder builder = new StringBuilder(); - CombatZone[] zones = objective.LogEntries - .OfType() - .ToArray() - ; - - if (zones == null || zones.Length == 0) { - return builder.ToString(); - } - - foreach (CombatZone zone in zones) { - builder.AppendFormat("{0}\n", zone.ToString()); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - private string BuildMurders(Objective objective) { - FoulMurder[] murders = objective.LogEntries.OfType().ToArray(); - StringBuilder builder = new StringBuilder(); - - if (murders.Length <= 0) { - return ""; - } - - foreach (FoulMurder murder in murders) { - builder.Append(murder.ToString()); - builder.Append("\n"); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - private string BuildMarketBuy(Objective objective) { - BuyCargo[] buys = objective.LogEntries.OfType().ToArray(); - StringBuilder builder = new StringBuilder(); - - if (buys.Length <= 0) { - return ""; - } - - foreach (BuyCargo buy in buys) { - builder.Append(buy.ToString()); - builder.Append("\n"); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - public string GenerateDiscordLog(Report report) { - StringBuilder log = new StringBuilder(); - - foreach (var objective in report.Objectives) { - if (objective.LogEntries.Count <= 0) { - continue; - } - - if (!objective.IsEnabled) { - continue; - } - - log.AppendFormat("**Date:** {0}\n", FormatDate()); - log.AppendFormat("**Location:** {0}\n", objective.ToShortString()); - log.AppendFormat("**Faction:** {0}\n", objective.Faction); - log.Append("\n"); - log.Append("```\n"); - - StringBuilder entries = new StringBuilder(); - - var missions = BuildMissionList(objective); - entries.Append(missions); - - var failed = BuildFailedMissions(objective); - entries.Append(failed); - - var murders = BuildMurders(objective); - entries.Append(murders); - - var vouchers = BuildVouchers(objective); - entries.Append(vouchers); - - var zones = BuildCombatZones(objective); - entries.Append(zones); - - var bonds = BuildKillBonds(objective); - entries.Append(bonds); - - var carto = BuildCartoGraphics(objective); - entries.Append(carto); - - var micro = BuildMicroResourcesSold(objective); - entries.Append(micro); - - var buy = BuildMarketBuy(objective); - entries.Append(buy); - - var sold = BuildCargoSold(objective); - entries.Append(sold); - - foreach (LogFormatter formatter in formatters) { - entries.AppendFormat("{0}\n", formatter.GenerateLog(objective)); - } - - log.Append(entries.ToString().Trim()); - log.Append("\n```\n"); - } - - return log.ToString(); - } - +namespace EliteBGS.BGS { + public class GenericDiscordLog : DiscordLogGenerator { public override string ToString() { return "Generic Log"; } diff --git a/BGS/LogGenerator/CargoSoldFormatter.cs b/BGS/LogGenerator/CargoSoldFormatter.cs new file mode 100644 index 0000000..f0b2d18 --- /dev/null +++ b/BGS/LogGenerator/CargoSoldFormatter.cs @@ -0,0 +1,58 @@ +using System.Linq; +using System.Text; +using EDJournal; + +namespace EliteBGS.BGS.LogGenerator { + public class CargoSoldFormatter : LogFormatter { + public string GenerateLog(Objective objective) { + StringBuilder builder = new StringBuilder(); + SellCargo[] sold = objective.LogEntries + .OfType() + .ToArray() + ; + + if (sold == null || sold.Length <= 0) { + return ""; + } + + + // This groups everything together by cargo sold, and then by market sold to. + // Dictionary > + var entries = sold.GroupBy(x => x.Cargo, + (key, cargos) => new { + Cargo = key, + Markets = cargos.GroupBy(y => y.Market, + (market, markets) => new { + Market = market, + Amount = markets.Sum(x => x.Amount), + Profit = markets.Sum(x => x.Profit) + }) + } + ) + ; + + foreach (var cargo in entries) { + foreach (var market in cargo.Markets) { + builder.AppendFormat("Sold {0} {1} to the {2}", + market.Amount, + cargo.Cargo, + market.Market + ); + + if (market.Profit != 0) { + builder.AppendFormat(" ({0} {1})", + Credits.FormatCredits(market.Profit), + market.Profit < 0 ? "loss" : "profit" + ); + } + + builder.Append("\n"); + } + } + + builder.AppendFormat("\n"); + + return builder.ToString(); + } + } +} diff --git a/BGS/LogGenerator/CartographicsFormat.cs b/BGS/LogGenerator/CartographicsFormat.cs new file mode 100644 index 0000000..181a1cf --- /dev/null +++ b/BGS/LogGenerator/CartographicsFormat.cs @@ -0,0 +1,21 @@ +using System.Linq; +using EDJournal; + +namespace EliteBGS.BGS.LogGenerator { + public class CartographicsFormat : LogFormatter { + public string GenerateLog(Objective objective) { + var total = objective.LogEntries.OfType(); + var pages = total.Count(); + long sum = total.Sum(x => (x as Cartographics).TotalSum); + + if (pages <= 0 || sum <= 0) { + return ""; + } + + return string.Format("Sold {0} page(s) worth of universal cartographics\n" + + "(Total value: {1})\n\n", + pages, Credits.FormatCredits(sum) + ); + } + } +} diff --git a/BGS/LogGenerator/CombatZoneFormat.cs b/BGS/LogGenerator/CombatZoneFormat.cs new file mode 100644 index 0000000..6b27aa1 --- /dev/null +++ b/BGS/LogGenerator/CombatZoneFormat.cs @@ -0,0 +1,4 @@ +namespace EliteBGS.BGS.LogGenerator { + class CombatZoneFormat : GenericFormat { + } +} diff --git a/BGS/LogGenerator/FailedMissionFormat.cs b/BGS/LogGenerator/FailedMissionFormat.cs new file mode 100644 index 0000000..20cd1c3 --- /dev/null +++ b/BGS/LogGenerator/FailedMissionFormat.cs @@ -0,0 +1,29 @@ +using System.Linq; +using System.Text; +using EDJournal; + +namespace EliteBGS.BGS.LogGenerator { + public class FailedMissionFormat : LogFormatter { + public string GenerateLog(Objective objective) { + MissionFailed[] missions = objective.LogEntries.OfType().ToArray(); + StringBuilder builder = new StringBuilder(); + + if (missions.Length <= 0) { + return ""; + } + + foreach (MissionFailed failed in missions) { + MissionFailedEntry f = failed.Failed; + builder.AppendFormat("Failed {0} mission(s) \"{1}\" targeting {2}\n", + failed.Amount, + f.HumanReadableName == null ? f.Name : f.HumanReadableName, + failed.Faction + ); + } + + builder.Append("\n"); + + return builder.ToString(); + } + } +} diff --git a/BGS/LogGenerator/KillBondsFormat.cs b/BGS/LogGenerator/KillBondsFormat.cs new file mode 100644 index 0000000..d6528d4 --- /dev/null +++ b/BGS/LogGenerator/KillBondsFormat.cs @@ -0,0 +1,4 @@ +namespace EliteBGS.BGS.LogGenerator { + public class KillBondsFormat : GenericFormat { + } +} diff --git a/BGS/LogGenerator/MarketBuyFormat.cs b/BGS/LogGenerator/MarketBuyFormat.cs new file mode 100644 index 0000000..ae63772 --- /dev/null +++ b/BGS/LogGenerator/MarketBuyFormat.cs @@ -0,0 +1,4 @@ +namespace EliteBGS.BGS.LogGenerator { + public class MarketBuyFormat : GenericFormat { + } +} diff --git a/BGS/LogGenerator/MicroResourcesFormat.cs b/BGS/LogGenerator/MicroResourcesFormat.cs new file mode 100644 index 0000000..021efb8 --- /dev/null +++ b/BGS/LogGenerator/MicroResourcesFormat.cs @@ -0,0 +1,18 @@ +using System.Linq; +using EDJournal; + +namespace EliteBGS.BGS.LogGenerator { + public class MicroResourcesFormat : LogFormatter { + public string GenerateLog(Objective objective) { + var total = objective.LogEntries.OfType(); + long sum = total.Sum(x => x.TotalSum); + + if (total == null || total.Count() <= 0 || sum <= 0) { + return ""; + } + + return string.Format("Sold {0} worth of Micro Resources\n", + Credits.FormatCredits(sum)); + } + } +} diff --git a/BGS/LogGenerator/MissionFormat.cs b/BGS/LogGenerator/MissionFormat.cs new file mode 100644 index 0000000..e29e474 --- /dev/null +++ b/BGS/LogGenerator/MissionFormat.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace EliteBGS.BGS.LogGenerator { + public class MissionFormat : LogFormatter { + public string GenerateLog(Objective objective) { + Dictionary> collated = new Dictionary>(); + StringBuilder output = new StringBuilder(); + int total_influence = 0; + + var missions = objective.LogEntries.OfType(); + + if (missions == null) { + return ""; + } + + foreach (MissionCompleted m in missions) { + if (!collated.ContainsKey(m.MissionName)) { + collated[m.MissionName] = new Dictionary(); + } + if (!collated[m.MissionName].ContainsKey(m.Influence)) { + collated[m.MissionName][m.Influence] = 0; + } + + ++collated[m.MissionName][m.Influence]; + + total_influence += m.Influence.Length; + } + + foreach (var mission in collated) { + if (objective.Faction != null) { + output.AppendFormat("{0} for {1}\n", mission.Key, objective.Faction); + } else { + output.AppendFormat("{0}\n", mission.Key); + } + output.Append("("); + foreach (var influence in mission.Value.OrderBy(x => x.Key.Length)) { + output.AppendFormat("Inf{0} x{1}, ", influence.Key, influence.Value); + } + output.Remove(output.Length - 2, 2); // remove last ", " + output.Append(")\n\n"); + } + + var support = objective.LogEntries.OfType(); + foreach (InfluenceSupport inf in support) { + output.Append(inf.ToString()); + output.Append("\n"); + total_influence += inf.Influence.Length; + } + + if (support.Count() > 0) { + output.Append("\n"); + } + + if (total_influence > 0) { + output.AppendFormat("Total Influence: {0}", total_influence); + } + + return output.ToString().Trim(); + } + } +} diff --git a/BGS/LogGenerator/MurderFormat.cs b/BGS/LogGenerator/MurderFormat.cs new file mode 100644 index 0000000..bbebc0d --- /dev/null +++ b/BGS/LogGenerator/MurderFormat.cs @@ -0,0 +1,4 @@ +namespace EliteBGS.BGS.LogGenerator { + public class MurderFormat : GenericFormat { + } +} diff --git a/BGS/LogGenerator/VoucherFormat.cs b/BGS/LogGenerator/VoucherFormat.cs new file mode 100644 index 0000000..5392630 --- /dev/null +++ b/BGS/LogGenerator/VoucherFormat.cs @@ -0,0 +1,24 @@ +using System.Linq; +using System.Text; +using EDJournal; + +namespace EliteBGS.BGS.LogGenerator { + public class VoucherFormat : LogFormatter { + public string GenerateLog(Objective objective) { + StringBuilder builder = new StringBuilder(); + var missions = objective.LogEntries.OfType(); + + if (missions == null || missions.Count() <= 0) { + return ""; + } + + foreach (var m in missions) { + builder.AppendFormat("Handed in {0} vouchers for {1}\n", m.Type, m.Faction); + builder.AppendFormat("(Total value: {0})\n", Credits.FormatCredits(m.TotalSum)); + builder.AppendFormat("\n"); + } + + return builder.ToString(); + } + } +} diff --git a/BGS/NonaDiscordLog.cs b/BGS/NonaDiscordLog.cs index a80fa2e..09b1937 100644 --- a/BGS/NonaDiscordLog.cs +++ b/BGS/NonaDiscordLog.cs @@ -1,18 +1,10 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Text; using System.Globalization; using EDJournal; -using EliteBGS.BGS.LogGenerator; namespace EliteBGS.BGS { - public class NonaDiscordLog : IDiscordLogGenerator { - private List formatters = new List() { - new VistaGenomicsFormat(), - new SearchAndRescueFormat(), - }; - + public class NonaDiscordLog : DiscordLogGenerator { private string FormatDate() { CultureInfo cultureInfo = CultureInfo.InvariantCulture; StringBuilder date = new StringBuilder(); @@ -36,330 +28,28 @@ namespace EliteBGS.BGS { return date.ToString(); } - private string BuildCartoGraphics(Objective objective) { - var total = from entries in objective.LogEntries - where entries.GetType() == typeof(Cartographics) - select entries - ; - var pages = total.Count(); - var sum = total.Sum(x => (x as Cartographics).TotalSum); - - if (pages <= 0 || sum <= 0) { - return ""; - } - - return string.Format("Sold {0} page(s) worth of universal cartographics\n" + - "(Total value: {1})\n\n", - pages, Credits.FormatCredits(sum) - ); - } - - private string BuildCargoSold(Objective objective) { - StringBuilder builder = new StringBuilder(); - SellCargo[] sold = objective.LogEntries - .OfType() - .ToArray() - ; - - if (sold == null || sold.Length <= 0) { - return ""; - } - - - // This groups everything together by cargo sold, and then by market sold to. - // Dictionary > - var entries = sold.GroupBy(x => x.Cargo, - (key, cargos) => new { - Cargo = key, - Markets = cargos.GroupBy(y => y.Market, - (market, markets) => new { - Market = market, - Amount = markets.Sum(x => x.Amount), - Profit = markets.Sum(x => x.Profit) - }) - } - ) - ; - - foreach (var cargo in entries) { - foreach (var market in cargo.Markets) { - builder.AppendFormat("Sold {0} {1} to the {2}", - market.Amount, - cargo.Cargo, - market.Market - ); - - if (market.Profit != 0) { - builder.AppendFormat(" ({0} {1})", - Credits.FormatCredits(market.Profit), - market.Profit < 0 ? "loss" : "profit" - ); - } - - builder.Append("\n"); - } - } - - builder.AppendFormat("\n"); - - return builder.ToString(); - } - - private string BuildMicroResourcesSold(Objective objective) { - var total = from entries in objective.LogEntries - where entries.GetType() == typeof(SellMicroResources) - select entries - ; - var sum = total.Sum(x => (x as SellMicroResources).TotalSum); - - if (sum <= 0) { - return ""; - } - - return string.Format("Sold {0} worth of Micro Resources\n", - Credits.FormatCredits(sum)); - } - - private string BuildKillBonds(Objective objective) { - StringBuilder builder = new StringBuilder(); - FactionKillBonds[] bonds = objective.LogEntries - .OfType() - .ToArray() - ; - - if (bonds == null || bonds.Length == 0) { - return builder.ToString(); - } - - foreach (FactionKillBonds bond in bonds) { - builder.AppendFormat("{0}\n", bond.ToString()); - } - - builder.AppendFormat("\n"); - - return builder.ToString(); - } - - private string BuildVouchers(Objective objective) { - StringBuilder builder = new StringBuilder(); - var missions = from entries in objective.LogEntries - where entries.GetType() == typeof(Vouchers) - select entries - ; - - if (missions == null || missions.Count() <= 0) { - return ""; - } - - foreach (var mission in missions) { - var m = mission as Vouchers; - builder.AppendFormat("Handed in {0} vouchers for {1}\n", m.Type, m.Faction); - builder.AppendFormat("(Total value: {0})\n", Credits.FormatCredits(m.TotalSum)); - builder.AppendFormat("\n"); - } - - return builder.ToString(); - } - - private string BuildMissionList(Objective objective) { - Dictionary> collated = new Dictionary>(); - StringBuilder output = new StringBuilder(); - int total_influence = 0; - - var missions = from entries in objective.LogEntries - where entries.GetType() == typeof(MissionCompleted) - select entries - ; - - if (missions == null) { - return ""; - } - - foreach (MissionCompleted m in missions) { - if (!collated.ContainsKey(m.MissionName)) { - collated[m.MissionName] = new Dictionary(); - } - if (!collated[m.MissionName].ContainsKey(m.Influence)) { - collated[m.MissionName][m.Influence] = 0; - } - - ++collated[m.MissionName][m.Influence]; - - total_influence += m.Influence.Length; - } - - foreach (var mission in collated) { - if (objective.Faction != null) { - output.AppendFormat("{0} for {1}\n", mission.Key, objective.Faction); - } else { - output.AppendFormat("{0}\n", mission.Key); - } - output.Append("("); - foreach (var influence in mission.Value.OrderBy(x => x.Key.Length)) { - output.AppendFormat("Inf{0} x{1}, ", influence.Key, influence.Value); - } - output.Remove(output.Length - 2, 2); // remove last ", " - output.Append(")\n\n"); - } - - var support = objective.LogEntries.OfType(); - foreach (InfluenceSupport inf in support) { - output.Append(inf.ToString()); - output.Append("\n"); - total_influence += inf.Influence.Length; - } - - if (support.Count() > 0) { - output.Append("\n"); - } - - if (total_influence > 0) { - output.AppendFormat("Total Influence: {0}\n\n", total_influence); - } - - return output.ToString(); - } - - private string BuildCombatZones(Objective objective) { - StringBuilder builder = new StringBuilder(); - CombatZone[] zones = objective.LogEntries - .OfType() - .ToArray() - ; - - if (zones == null || zones.Length == 0) { - return builder.ToString(); - } - - foreach (CombatZone zone in zones) { - builder.AppendFormat("{0}\n", zone.ToString()); - } - - builder.Append("\n"); - - return builder.ToString(); - } - private string BuildFailedMissions(Objective objective) { - MissionFailed[] missions = objective.LogEntries.OfType().ToArray(); - StringBuilder builder = new StringBuilder(); - - if (missions.Length <= 0) { - return ""; - } - - foreach (MissionFailed failed in missions) { - MissionFailedEntry f = failed.Failed; - builder.AppendFormat("Failed {0} mission(s) \"{1}\" targeting {2}\n", - failed.Amount, - f.HumanReadableName == null ? f.Name : f.HumanReadableName, - failed.Faction - ); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - private string BuildMurders(Objective objective) { - FoulMurder[] murders = objective.LogEntries.OfType().ToArray(); - StringBuilder builder = new StringBuilder(); - - if (murders.Length <= 0) { - return ""; - } - - foreach (FoulMurder murder in murders) { - builder.Append(murder.ToString()); - builder.Append("\n"); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - private string BuildMarketBuy(Objective objective) { - BuyCargo[] buys = objective.LogEntries.OfType().ToArray(); - StringBuilder builder = new StringBuilder(); - - if (buys.Length <= 0) { - return ""; - } - - foreach (BuyCargo buy in buys) { - builder.Append(buy.ToString()); - builder.Append("\n"); - } - - builder.Append("\n"); - - return builder.ToString(); - } - - public string GenerateDiscordLog(Report report) { + protected override string GenerateObjectiveHeader(Objective objective) { StringBuilder log = new StringBuilder(); - log.AppendFormat(":clock2: `Date:` {0}\n", FormatDate()); - foreach (var objective in report.Objectives) { - if (objective.LogEntries.Count <= 0) { - continue; - } - - if (!objective.IsEnabled) { - continue; - } - - log.AppendFormat(":globe_with_meridians: `Location:` {0}\n", objective.ToShortString()); - log.Append(":clipboard: `Conducted:`\n"); - log.Append("```\n"); - - StringBuilder entries = new StringBuilder(); - - var missions = BuildMissionList(objective); - entries.Append(missions); - - var failed = BuildFailedMissions(objective); - entries.Append(failed); - - var murders = BuildMurders(objective); - entries.Append(murders); - - var vouchers = BuildVouchers(objective); - entries.Append(vouchers); - - var zones = BuildCombatZones(objective); - entries.Append(zones); - - var bonds = BuildKillBonds(objective); - entries.Append(bonds); - - var carto = BuildCartoGraphics(objective); - entries.Append(carto); - - var micro = BuildMicroResourcesSold(objective); - entries.Append(micro); - - var buy = BuildMarketBuy(objective); - entries.Append(buy); - - var sold = BuildCargoSold(objective); - entries.Append(sold); - - foreach (LogFormatter formatter in formatters) { - string text = formatter.GenerateLog(objective); - if (!string.IsNullOrEmpty(text)) { - entries.AppendFormat("{0}\n", text); - } - } - - log.Append(entries.ToString().Trim()); - log.Append("\n```\n"); - } + log.AppendFormat(":globe_with_meridians: `Location:` {0}\n", objective.ToShortString()); + log.Append(":clipboard: `Conducted:`\n"); + log.Append("```"); return log.ToString(); } + protected override string GenerateObjectiveFooter(Objective objective) { + return "```"; + } + + protected override string GenerateHeader() { + return string.Format(":clock2: `Date:` {0}", FormatDate()); + } + + protected override string GenerateFooter() { + return ""; + } + public override string ToString() { return "Nova Navy Log"; } diff --git a/EliteBGS.csproj b/EliteBGS.csproj index e1099ec..75ae750 100644 --- a/EliteBGS.csproj +++ b/EliteBGS.csproj @@ -85,10 +85,20 @@ + + + + + + + + + + diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index b96ffaa..c54698e 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -31,7 +31,7 @@ namespace EliteBGS { private LoadEntriesWindow loadentries = new LoadEntriesWindow(); - private static readonly List logtypes = new List() { + private static readonly List logtypes = new List() { new NonaDiscordLog(), new GenericDiscordLog(), }; @@ -49,7 +49,7 @@ namespace EliteBGS { report.OnLog += Report_OnLog; - foreach (IDiscordLogGenerator type in logtypes) { + foreach (DiscordLogGenerator type in logtypes) { LogType.Items.Add(type); } @@ -182,7 +182,7 @@ namespace EliteBGS { private void GenerateDiscord_Click(object sender, RoutedEventArgs e) { try { - IDiscordLogGenerator discord = LogType.SelectedItem as IDiscordLogGenerator; + DiscordLogGenerator discord = LogType.SelectedItem as DiscordLogGenerator; string report = discord.GenerateDiscordLog(Report); DiscordLog.Text = report;