EDBGS/EDPlayerJournal/PlayerJournal.cs

90 lines
2.2 KiB
C#

using EDPlayerJournal.Entries;
namespace EDPlayerJournal;
public class PlayerJournal {
public static string DefaultPath = "%UserProfile%\\Saved Games\\Frontier Developments\\Elite Dangerous";
private List<JournalFile> journalfiles = new List<JournalFile>();
private string? basepath = null;
public string? Location => basepath;
public PlayerJournal() {
Initialise(DefaultPath);
}
public PlayerJournal(string path) {
Initialise(path);
}
private void Initialise(string path) {
basepath = Environment.ExpandEnvironmentVariables(path);
ScanFiles();
}
public List<JournalFile> Files {
get { return journalfiles; }
}
public void Open() {
if (!Directory.Exists(basepath)) {
throw new JournalException("Invalid base path, path could not be found");
}
this.ScanFiles();
}
public JournalFile GetLastFile() {
var lastfile = Files
.OrderBy(x => x.DateTime)
.Last()
;
return lastfile;
}
public void ScanFiles() {
if (basepath == null) {
return;
}
var files = Directory.EnumerateFiles(basepath);
journalfiles.Clear();
foreach (var file in files) {
string full = Path.Combine(basepath, file);
try {
JournalFile journalfile = new JournalFile(full);
journalfiles.Add(journalfile);
} catch (JournalException) {
/* invalid journal file, or one of the other json files in there */
continue;
}
}
journalfiles.Sort();
}
public Entry? FindMostRecent(string entry) {
var entries = journalfiles
.OrderByDescending(x => x.DateTime)
.ToArray()
;
if (entries == null || entries.Length == 0) {
return null;
}
foreach(JournalFile file in entries) {
Entry found = file.Entries
.OrderByDescending(x => x.Timestamp)
.First(x => x.Event == entry)
;
if (found != null) {
return found;
}
}
return null;
}
}