mirror of
https://codeberg.org/icewind/tf-log-parser.git
synced 2026-06-03 18:24:09 +02:00
handle more truncateion
This commit is contained in:
parent
7f258930ef
commit
2cb43e1872
2 changed files with 18 additions and 12 deletions
28
src/lib.rs
28
src/lib.rs
|
|
@ -5,7 +5,7 @@ use crate::module::{
|
|||
ChatMessages, ClassStatsHandler, HealSpread, MedicStatsBuilder, PlayerHandler,
|
||||
};
|
||||
pub use crate::subjectmap::SubjectMap;
|
||||
use chrono::{Duration, NaiveDateTime};
|
||||
use chrono::{Duration, NaiveDate, NaiveDateTime};
|
||||
pub use event::{Event, EventMeta, GameEvent};
|
||||
use memchr::memmem::{find_iter, FindIter};
|
||||
pub use raw_event::{RawEvent, RawEventType};
|
||||
|
|
@ -30,8 +30,6 @@ pub enum Error {
|
|||
Malformed,
|
||||
#[error("Incomplete logfile")]
|
||||
Incomplete,
|
||||
#[error("Line should be skipped")]
|
||||
Skip,
|
||||
#[error("Malformed subject: {0}")]
|
||||
Subject(Box<SubjectError>),
|
||||
#[error("{0}")]
|
||||
|
|
@ -96,10 +94,7 @@ pub fn parse_with_handler<Handler: EventHandler>(
|
|||
while let Some(event_res) = events.next() {
|
||||
let raw_event = match event_res {
|
||||
Ok(raw_event) => raw_event,
|
||||
Err(Error::Incomplete) if events.next().is_none() => break,
|
||||
Err(Error::Skip) => {
|
||||
continue;
|
||||
}
|
||||
Err(Error::Incomplete) => continue,
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
let should_handle = Handler::does_handle(raw_event.ty);
|
||||
|
|
@ -108,16 +103,22 @@ pub fn parse_with_handler<Handler: EventHandler>(
|
|||
let event = match GameEvent::parse(&raw_event) {
|
||||
Ok(event) => event,
|
||||
Err(e) => {
|
||||
let old_date: NaiveDateTime = raw_event
|
||||
.date
|
||||
.try_into()
|
||||
.unwrap_or_else(|_| NaiveDateTime::from_timestamp(0, 0));
|
||||
|
||||
// truncated newline during log combining, ignore error
|
||||
if contains_line_start(raw_event.params, &old_date.date()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let Some(next) = events.next() else {
|
||||
// log is truncated
|
||||
break;
|
||||
};
|
||||
|
||||
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()
|
||||
|
|
@ -153,6 +154,11 @@ pub fn parse_with_handler<Handler: EventHandler>(
|
|||
Ok((global, per_player))
|
||||
}
|
||||
|
||||
fn contains_line_start(line: &str, date: &NaiveDate) -> bool {
|
||||
let expected_start = format!("L {}", date.format("%m/%d/%Y"));
|
||||
line.contains(&expected_start)
|
||||
}
|
||||
|
||||
handler!(LogHandler {
|
||||
chat: ChatMessages,
|
||||
heal_spread: PlayerHandler::<HealSpread>,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ impl<'a> RawEvent<'a> {
|
|||
fn event_parser(input: &str) -> Result<RawEvent> {
|
||||
// println!("{}", input);
|
||||
if input.len() < 24 {
|
||||
return Err(Error::Skip);
|
||||
return Err(Error::Incomplete);
|
||||
}
|
||||
let date = RawDate(&input[0..21]);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue