ignore errors around combine seams

This commit is contained in:
Robin Appelman 2023-03-21 20:42:00 +01:00
commit 7b1ff4bd72

View file

@ -5,11 +5,12 @@ use crate::module::{
ChatMessages, ClassStatsHandler, HealSpread, MedicStatsBuilder, PlayerHandler, ChatMessages, ClassStatsHandler, HealSpread, MedicStatsBuilder, PlayerHandler,
}; };
pub use crate::subjectmap::SubjectMap; pub use crate::subjectmap::SubjectMap;
use chrono::NaiveDateTime; use chrono::{Duration, NaiveDateTime};
pub use event::{Event, EventMeta, GameEvent}; pub use event::{Event, EventMeta, GameEvent};
use memchr::memmem::{find_iter, FindIter}; use memchr::memmem::{find_iter, FindIter};
pub use raw_event::{RawEvent, RawEventType}; pub use raw_event::{RawEvent, RawEventType};
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::convert::TryInto;
use std::fmt::Debug; use std::fmt::Debug;
use std::num::ParseIntError; use std::num::ParseIntError;
pub(crate) use tf_log_parser_derive::{Event, Events}; pub(crate) use tf_log_parser_derive::{Event, Events};
@ -107,12 +108,28 @@ pub fn parse_with_handler<Handler: EventHandler>(
let event = match GameEvent::parse(&raw_event) { let event = match GameEvent::parse(&raw_event) {
Ok(event) => event, Ok(event) => event,
Err(e) => { Err(e) => {
// handle truncated logs let Some(next) = events.next() else {
if events.next().is_none() { // log is truncated
break; break;
} else { };
return Err(e.into());
if let Ok(next) = next {
let old_date: NaiveDateTime = raw_event
.date
.try_into()
.unwrap_or_else(|_| NaiveDateTime::from_timestamp(0, 0));
let new_date: NaiveDateTime = next
.date
.try_into()
.unwrap_or_else(|_| NaiveDateTime::from_timestamp(0, 0));
// truncated lines during log combining, ignore error
if new_date.signed_duration_since(old_date) > Duration::seconds(60) {
continue;
}
} }
return Err(e.into());
} }
}; };
handler.process(&raw_event, &event, &mut start_time, &mut subjects)?; handler.process(&raw_event, &event, &mut start_time, &mut subjects)?;