add fileheader entry class for detecting odyssey
This commit is contained in:
parent
a713e450fe
commit
821b030213
@ -1,13 +1,9 @@
|
|||||||
using System;
|
namespace EDPlayerJournal.Entries;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EDPlayerJournal.Entries;
|
|
||||||
public class CommanderEntry : Entry {
|
public class CommanderEntry : Entry {
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
public string? FID { get; set; }
|
public string? FID { get; set; }
|
||||||
|
|
||||||
protected override void Initialise() {
|
protected override void Initialise() {
|
||||||
Name = JSON.Value<string>("Name") ?? "";
|
Name = JSON.Value<string>("Name") ?? "";
|
||||||
FID = JSON.Value<string>("FID") ?? "";
|
FID = JSON.Value<string>("FID") ?? "";
|
||||||
|
@ -17,6 +17,7 @@ public class Entry {
|
|||||||
{ Events.CommitCrime, typeof(CommitCrimeEntry) },
|
{ Events.CommitCrime, typeof(CommitCrimeEntry) },
|
||||||
{ Events.Died, typeof(DiedEntry) },
|
{ Events.Died, typeof(DiedEntry) },
|
||||||
{ Events.Docked, typeof(DockedEntry) },
|
{ Events.Docked, typeof(DockedEntry) },
|
||||||
|
{ Events.FileHeader, typeof(FileHeaderEntry) },
|
||||||
{ Events.FactionKillBond, typeof(FactionKillBondEntry) },
|
{ Events.FactionKillBond, typeof(FactionKillBondEntry) },
|
||||||
{ Events.FSDJump, typeof(FSDJumpEntry) },
|
{ Events.FSDJump, typeof(FSDJumpEntry) },
|
||||||
{ Events.HullDamage, typeof(HullDamageEntry) },
|
{ Events.HullDamage, typeof(HullDamageEntry) },
|
||||||
|
@ -8,6 +8,7 @@ public class Events {
|
|||||||
public static readonly string Docked = "Docked";
|
public static readonly string Docked = "Docked";
|
||||||
public static readonly string FactionKillBond = "FactionKillBond";
|
public static readonly string FactionKillBond = "FactionKillBond";
|
||||||
public static readonly string FighterDestroyed = "FighterDestroyed";
|
public static readonly string FighterDestroyed = "FighterDestroyed";
|
||||||
|
public static readonly string FileHeader = "Fileheader";
|
||||||
public static readonly string FSDJump = "FSDJump";
|
public static readonly string FSDJump = "FSDJump";
|
||||||
public static readonly string HullDamage = "HullDamage";
|
public static readonly string HullDamage = "HullDamage";
|
||||||
public static readonly string LoadGame = "LoadGame";
|
public static readonly string LoadGame = "LoadGame";
|
||||||
|
37
EDPlayerJournal/Entries/FileHeaderEntry.cs
Normal file
37
EDPlayerJournal/Entries/FileHeaderEntry.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
namespace EDPlayerJournal.Entries;
|
||||||
|
|
||||||
|
public class FileHeaderEntry : Entry {
|
||||||
|
/// <summary>
|
||||||
|
/// File part.
|
||||||
|
/// </summary>
|
||||||
|
public ulong Part { get; set; } = 1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Local language of the file.
|
||||||
|
/// </summary>
|
||||||
|
public string? Language { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the file is for an Odyssey version
|
||||||
|
/// </summary>
|
||||||
|
public bool Odyssey { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Game version in question (3.8 or 4.0)
|
||||||
|
/// </summary>
|
||||||
|
public string GameVersion { get; set; } = "3.8";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build version (SVN revision number).
|
||||||
|
/// </summary>
|
||||||
|
public string? Build { get; set; }
|
||||||
|
|
||||||
|
protected override void Initialise() {
|
||||||
|
Part = JSON.Value<ulong?>("part") ?? 1;
|
||||||
|
Language = JSON.Value<string?>("language") ?? string.Empty;
|
||||||
|
// If this entry is not there then its a legacy entry
|
||||||
|
Odyssey = JSON.Value<bool?>("Odyssey") ?? false;
|
||||||
|
GameVersion = JSON.Value<string?>("gameversion") ?? "3.8";
|
||||||
|
Build = JSON.Value<string?>("build");
|
||||||
|
}
|
||||||
|
}
|
50
EDPlayerJournalTests/FileHeaderTest.cs
Normal file
50
EDPlayerJournalTests/FileHeaderTest.cs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
using EDPlayerJournal.Entries;
|
||||||
|
|
||||||
|
namespace EDPlayerJournalTests;
|
||||||
|
|
||||||
|
[TestClass]
|
||||||
|
public class FileHeaderTest {
|
||||||
|
[TestMethod]
|
||||||
|
public void OdysseyFileHeader() {
|
||||||
|
string fileheader = /*lang=json,strict*/ """{ "timestamp":"2022-11-21T15:04:36Z", "event":"Fileheader", "part":1, "language":"English/UK", "Odyssey":true, "gameversion":"4.0.0.1450", "build":"r286858/r0 " }""";
|
||||||
|
|
||||||
|
Entry? entry = Entry.Parse(fileheader);
|
||||||
|
|
||||||
|
Assert.IsNotNull(entry);
|
||||||
|
Assert.IsInstanceOfType(entry, typeof(FileHeaderEntry));
|
||||||
|
|
||||||
|
FileHeaderEntry? header = entry as FileHeaderEntry;
|
||||||
|
|
||||||
|
Assert.IsNotNull(header);
|
||||||
|
|
||||||
|
Assert.AreEqual(header.Part, 1UL);
|
||||||
|
Assert.AreEqual(header.Language, "English/UK");
|
||||||
|
Assert.AreEqual(header.Odyssey, true);
|
||||||
|
Assert.AreEqual(header.GameVersion, "4.0.0.1450");
|
||||||
|
// Someone at FDev messed up string building there.
|
||||||
|
Assert.AreEqual(header.Build, "r286858/r0 ");
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void LegacyFileHeader() {
|
||||||
|
// This is the oldest file header I could find.
|
||||||
|
string fileheader = /*lang=json,strict*/ """{ "timestamp":"2020-01-02T23:45:23Z", "event":"Fileheader", "part":1, "language":"English\\UK", "gameversion":"3.5.3.400 EDH", "build":"r213094/r0 " }""";
|
||||||
|
|
||||||
|
Entry? entry = Entry.Parse(fileheader);
|
||||||
|
|
||||||
|
Assert.IsNotNull(entry);
|
||||||
|
Assert.IsInstanceOfType(entry, typeof(FileHeaderEntry));
|
||||||
|
|
||||||
|
FileHeaderEntry? header = entry as FileHeaderEntry;
|
||||||
|
|
||||||
|
Assert.IsNotNull(header);
|
||||||
|
|
||||||
|
Assert.AreEqual(header.Part, 1UL);
|
||||||
|
// At some point they switche to a forward slash. Curious.
|
||||||
|
Assert.AreEqual(header.Language, """English\UK""");
|
||||||
|
Assert.AreEqual(header.Odyssey, false);
|
||||||
|
Assert.AreEqual(header.GameVersion, "3.5.3.400 EDH");
|
||||||
|
// ~73k commits in two years. Not bad.
|
||||||
|
Assert.AreEqual(header.Build, "r213094/r0 ");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user