aboutsummaryrefslogtreecommitdiff
path: root/src/filters/log.rs
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2021-11-17 20:32:21 +0100
committerDaniel Schadt <kingdread@gmx.de>2021-11-17 20:32:21 +0100
commit5d18c3e79638573fb7ccf03349b7a5ca0c9d97f9 (patch)
treec64783cce6c32e169f5b2959549bb9c6cc66581f /src/filters/log.rs
parent28d098e5ae326dd899b3a31ab05bfcd464a83554 (diff)
downloadraidgrep-5d18c3e79638573fb7ccf03349b7a5ca0c9d97f9.tar.gz
raidgrep-5d18c3e79638573fb7ccf03349b7a5ca0c9d97f9.tar.bz2
raidgrep-5d18c3e79638573fb7ccf03349b7a5ca0c9d97f9.zip
Add a game-mode filter
Diffstat (limited to 'src/filters/log.rs')
-rw-r--r--src/filters/log.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/filters/log.rs b/src/filters/log.rs
index ac166e1..c878b78 100644
--- a/src/filters/log.rs
+++ b/src/filters/log.rs
@@ -9,7 +9,7 @@ use super::{
use std::collections::HashSet;
-use evtclib::Encounter;
+use evtclib::{Encounter, GameMode};
use chrono::{DateTime, Datelike, Utc, Weekday};
@@ -37,6 +37,33 @@ pub fn encounter(bosses: HashSet<Encounter>) -> Box<dyn LogFilter> {
}
#[derive(Debug, Clone)]
+struct GameModeFilter(HashSet<GameMode>);
+
+impl Filter<EarlyLogResult, LogResult> for GameModeFilter {
+ fn filter_early(&self, early_log: &EarlyLogResult) -> Inclusion {
+ let encounter_id = early_log.evtc.header.combat_id;
+ // Special WvW encounter
+ const GENERIC_ENCOUNTER_ID: u16 = 1;
+ let mode = if encounter_id == GENERIC_ENCOUNTER_ID {
+ Some(GameMode::WvW)
+ } else {
+ Encounter::from_header_id(encounter_id).map(Encounter::game_mode)
+ };
+ mode.map(|m| self.0.contains(&m).into())
+ .unwrap_or(Inclusion::Exclude)
+ }
+
+ fn filter(&self, log: &LogResult) -> bool {
+ log.game_mode.map(|m| self.0.contains(&m)).unwrap_or(false)
+ }
+}
+
+/// A [`LogFilter`] that only accepts logs with the given game mode.
+pub fn game_mode(game_modes: HashSet<GameMode>) -> Box<dyn LogFilter> {
+ Box::new(GameModeFilter(game_modes))
+}
+
+#[derive(Debug, Clone)]
struct OutcomeFilter(HashSet<FightOutcome>);
impl Filter<EarlyLogResult, LogResult> for OutcomeFilter {