mirror of
https://codeberg.org/icewind/tf-log-parser.git
synced 2026-06-03 18:24:09 +02:00
ignore errors around combine seams
This commit is contained in:
parent
2d8ede8027
commit
7b1ff4bd72
1 changed files with 22 additions and 5 deletions
27
src/lib.rs
27
src/lib.rs
|
|
@ -5,11 +5,12 @@ use crate::module::{
|
|||
ChatMessages, ClassStatsHandler, HealSpread, MedicStatsBuilder, PlayerHandler,
|
||||
};
|
||||
pub use crate::subjectmap::SubjectMap;
|
||||
use chrono::NaiveDateTime;
|
||||
use chrono::{Duration, NaiveDateTime};
|
||||
pub use event::{Event, EventMeta, GameEvent};
|
||||
use memchr::memmem::{find_iter, FindIter};
|
||||
pub use raw_event::{RawEvent, RawEventType};
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::TryInto;
|
||||
use std::fmt::Debug;
|
||||
use std::num::ParseIntError;
|
||||
pub(crate) use tf_log_parser_derive::{Event, Events};
|
||||
|
|
@ -107,13 +108,29 @@ pub fn parse_with_handler<Handler: EventHandler>(
|
|||
let event = match GameEvent::parse(&raw_event) {
|
||||
Ok(event) => event,
|
||||
Err(e) => {
|
||||
// handle truncated logs
|
||||
if events.next().is_none() {
|
||||
let Some(next) = events.next() else {
|
||||
// log is truncated
|
||||
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)?;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue