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,
|
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,13 +108,29 @@ 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)?;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue