refactor to only filter transactions based on dates, not the entries

This commit is contained in:
Florian Stinglmayr 2022-12-09 17:52:03 +01:00
parent a3b54b1326
commit 8d3d48d846

View File

@ -65,11 +65,33 @@ public partial class MainWindow : Window {
GenerateLog(); GenerateLog();
} }
private void HandleEntries(List<Entry> entries) { private void Report_OnLog(string message) {
StringBuilder builder = new StringBuilder();
builder.Append(DateTime.Now.ToString());
builder.Append(": ");
builder.Append(message);
builder.Append("\n");
log.AppendText(builder.ToString());
}
private void Log(string message) {
Report_OnLog(message);
}
private void HandleEntries(List<Entry> entries, DateTime start, DateTime end) {
try { try {
TransactionParser parser = new TransactionParser(); TransactionParser parser = new TransactionParser();
List<Transaction> transactions = parser.Parse(entries); List<Transaction> transactions = parser.Parse(entries);
// Filter the transactions down to the given time frame
DateTime actualend = end.AddDays(1);
transactions = transactions
.Where(t => t.CompletedAtDateTime >= start && t.CompletedAtDateTime <= actualend)
.ToList()
;
List<IncompleteTransaction> incompletes = transactions.OfType<IncompleteTransaction>().ToList(); List<IncompleteTransaction> incompletes = transactions.OfType<IncompleteTransaction>().ToList();
// Log incomplete and remove them from the results. // Log incomplete and remove them from the results.
foreach (var incomplete in incompletes) { foreach (var incomplete in incompletes) {
@ -86,25 +108,14 @@ public partial class MainWindow : Window {
} }
} }
private void HandleEntries(List<Entry> entries) {
HandleEntries(entries, DateTime.Now, DateTime.Now);
}
private void Loadentries_EntriesLoaded(List<Entry> lines) { private void Loadentries_EntriesLoaded(List<Entry> lines) {
HandleEntries(lines); HandleEntries(lines);
} }
private void Report_OnLog(string message) {
StringBuilder builder = new StringBuilder();
builder.Append(DateTime.Now.ToString());
builder.Append(": ");
builder.Append(message);
builder.Append("\n");
log.AppendText(builder.ToString());
}
private void Log(string message) {
Report_OnLog(message);
}
private void ParseJournal_Click(object sender, RoutedEventArgs e) { private void ParseJournal_Click(object sender, RoutedEventArgs e) {
try { try {
TransactionParser parser = new TransactionParser(); TransactionParser parser = new TransactionParser();
@ -121,21 +132,14 @@ public partial class MainWindow : Window {
// files have to be read in their entirety to check this). So we assume that you can't play // files have to be read in their entirety to check this). So we assume that you can't play
// three days straight, and keep the code fast. // three days straight, and keep the code fast.
DateTime actualstart = start.AddDays(-3); DateTime actualstart = start.AddDays(-3);
DateTime actualend = end.AddDays(1);
List<Entry> entries = journal.Files List<Entry> entries = journal.Files
.Where(f => f.NormalisedDateTime >= actualstart && f.NormalisedDateTime <= end) .Where(f => f.NormalisedDateTime >= actualstart && f.NormalisedDateTime <= actualend)
.SelectMany(e => e.Entries) .SelectMany(e => e.Entries)
.ToList() .ToList()
; ;
// Now further sort the list down to entries that are actually within the given datetime
// Note that entry datetimes are not normalised, so we have to sort until end + 1 day
DateTime actualend = end.AddDays(1);
entries = entries HandleEntries(entries, start, end);
.Where(e => e.Timestamp >= start && e.Timestamp < actualend)
.ToList()
;
HandleEntries(entries);
GenerateLog(); GenerateLog();
} catch (Exception exception) { } catch (Exception exception) {
Log("Something went terribly wrong while parsing the E:D player journal."); Log("Something went terribly wrong while parsing the E:D player journal.");