diff --git a/EDPlayerJournal/Entries/Entry.cs b/EDPlayerJournal/Entries/Entry.cs index c122891..c9b5659 100644 --- a/EDPlayerJournal/Entries/Entry.cs +++ b/EDPlayerJournal/Entries/Entry.cs @@ -30,6 +30,7 @@ public class Entry { { Events.MissionCompleted, typeof(MissionCompletedEntry) }, { Events.MissionFailed, typeof(MissionFailedEntry) }, { Events.MissionRedirected, typeof(MissionRedirectedEntry) }, + { Events.Missions, typeof(MissionsEntry) }, { Events.MultiSellExplorationData, typeof(MultiSellExplorationDataEntry) }, { Events.RedeemVoucher, typeof(RedeemVoucherEntry) }, { Events.SearchAndRescue, typeof(SearchAndRescueEntry) }, diff --git a/EDPlayerJournal/Entries/Events.cs b/EDPlayerJournal/Entries/Events.cs index 62ad8ec..288a0d5 100644 --- a/EDPlayerJournal/Entries/Events.cs +++ b/EDPlayerJournal/Entries/Events.cs @@ -20,6 +20,7 @@ public class Events { public static readonly string MissionCompleted = "MissionCompleted"; public static readonly string MissionFailed = "MissionFailed"; public static readonly string MissionRedirected = "MissionRedirected"; + public static readonly string Missions = "Missions"; public static readonly string MultiSellExplorationData = "MultiSellExplorationData"; public static readonly string RedeemVoucher = "RedeemVoucher"; public static readonly string SearchAndRescue = "SearchAndRescue"; diff --git a/EDPlayerJournal/Entries/MissionsEntry.cs b/EDPlayerJournal/Entries/MissionsEntry.cs new file mode 100644 index 0000000..c510894 --- /dev/null +++ b/EDPlayerJournal/Entries/MissionsEntry.cs @@ -0,0 +1,48 @@ +using Newtonsoft.Json.Linq; + +namespace EDPlayerJournal.Entries; + +public class MissionsEntry : Entry { + /// + /// List of currently active mission. + /// + public List Active { get; set; } = new List(); + + /// + /// List of failed missions, not yet discarded. + /// + public List Failed { get; set; } = new List(); + + /// + /// List of completed missions, not yet turned in. + /// + public List Complete { get; set; } = new List(); + + protected override void Initialise() { + JArray? arr; + + arr = JSON.Value("Active"); + if (arr != null) { + foreach (JObject item in arr.Children().OfType()) { + Mission m = Mission.FromMissionAccepted(item); + Active.Add(m); + } + } + + arr = JSON.Value("Failed"); + if (arr != null) { + foreach (JObject item in arr.Children().OfType()) { + Mission m = Mission.FromMissionAccepted(item); + Failed.Add(m); + } + } + + arr = JSON.Value("Complete"); + if (arr != null) { + foreach (JObject item in arr.Children().OfType()) { + Mission m = Mission.FromMissionAccepted(item); + Complete.Add(m); + } + } + } +} diff --git a/EDPlayerJournal/Mission.cs b/EDPlayerJournal/Mission.cs index d8aa482..141a7cd 100644 --- a/EDPlayerJournal/Mission.cs +++ b/EDPlayerJournal/Mission.cs @@ -176,6 +176,11 @@ public class Mission : IComparable { /// public string? Expiry { get; set; } + /// + /// Certain missions have an expires number. No one knows what that is. + /// + public ulong? Expires { get; set; } + /// /// Influence reward offered. This is for accepting missions only, see the /// mission effects for actual effects once the mission is complete. @@ -273,7 +278,8 @@ public class Mission : IComparable { mission.Target = o.Value("Target"); mission.TargetLocalised = o.Value("Target_Localised"); - mission.Expiry = o.Value("Expiry")?.ToString(); + mission.Expiry = o.Value("Expiry"); + mission.Expires = o.Value("Expires"); mission.Wing = o.Value("Wing") ?? false; mission.Name = o.Value("Name"); diff --git a/EDPlayerJournalTests/MissionTest.cs b/EDPlayerJournalTests/MissionTest.cs index cc7ee35..fe346c8 100644 --- a/EDPlayerJournalTests/MissionTest.cs +++ b/EDPlayerJournalTests/MissionTest.cs @@ -118,4 +118,27 @@ public class MissionTest { Assert.AreEqual(m.Influences["Salus Imperial Society"][1865919973739UL], "++"); Assert.AreEqual(m.Influences["Salus Imperial Society"][1733186884306UL], "++"); } + + [TestMethod] + public void MissionsTest() { + string missionsstr = /*lang=json,strict*/ """{ "timestamp":"2022-11-15T12:40:45Z", "event":"Missions", "Active":[ { "MissionID":900147917, "Name":"Mission_Courier_name", "PassengerMission":false, "Expires":26848 }, { "MissionID":900148007, "Name":"Mission_Courier_name", "PassengerMission":false, "Expires":26848 } ], "Failed":[ ], "Complete":[ ] }"""; + + Entry? entry = Entry.Parse(missionsstr); + + Assert.IsNotNull(entry); + Assert.IsInstanceOfType(entry, typeof(MissionsEntry)); + + MissionsEntry? missions = entry as MissionsEntry; + + Assert.IsNotNull(missions); + + Assert.AreEqual(missions.Active.Count, 2); + Assert.AreEqual(missions.Failed.Count, 0); + Assert.AreEqual(missions.Complete.Count, 0); + + Mission m = missions.Active[0]; + Assert.AreEqual(m.MissionID, 900147917UL); + Assert.AreEqual(m.Name, "Mission_Courier_name"); + Assert.AreEqual(m.Expires, 26848UL); + } }