aboutsummaryrefslogtreecommitdiff
path: root/src/filters
diff options
context:
space:
mode:
authorDaniel <kingdread@gmx.de>2020-05-01 13:29:38 +0200
committerDaniel <kingdread@gmx.de>2020-05-01 13:29:38 +0200
commit5f765b749f793b2866262546d28ff138a5654dfc (patch)
tree192add4f0c51169f8f2702596d05bee00af6561a /src/filters
parent811d7e62695c5c12aecd08b176c4ead641e2ad2c (diff)
downloadraidgrep-5f765b749f793b2866262546d28ff138a5654dfc.tar.gz
raidgrep-5f765b749f793b2866262546d28ff138a5654dfc.tar.bz2
raidgrep-5f765b749f793b2866262546d28ff138a5654dfc.zip
change LogFilter to take EarlyLogResult
This allows us to attach some additional metadata that is not found in the PartialEvtc otherwise, such as the file name.
Diffstat (limited to 'src/filters')
-rw-r--r--src/filters/log.rs19
-rw-r--r--src/filters/player.rs9
2 files changed, 13 insertions, 15 deletions
diff --git a/src/filters/log.rs b/src/filters/log.rs
index 2d2fc37..60e6912 100644
--- a/src/filters/log.rs
+++ b/src/filters/log.rs
@@ -3,27 +3,26 @@
//! This is the "base unit", as each file corresponds to one log. Filters on other items (such as
//! players) have to be lifted into log filters first.
use super::{
- super::{FightOutcome, LogResult, Weekday},
+ super::{EarlyLogResult, FightOutcome, LogResult},
Filter, Inclusion,
};
use std::collections::HashSet;
-use evtclib::raw::parser::PartialEvtc;
use evtclib::Boss;
-use chrono::{DateTime, Datelike, Utc};
+use chrono::{DateTime, Datelike, Utc, Weekday};
use num_traits::FromPrimitive as _;
/// Filter trait used for filters that operate on complete logs.
-pub trait LogFilter = Filter<PartialEvtc, LogResult>;
+pub trait LogFilter = Filter<EarlyLogResult, LogResult>;
#[derive(Debug, Clone)]
struct BossFilter(HashSet<Boss>);
-impl Filter<PartialEvtc, LogResult> for BossFilter {
- fn filter_early(&self, partial_evtc: &PartialEvtc) -> Inclusion {
- let boss = Boss::from_u16(partial_evtc.header.combat_id);
+impl Filter<EarlyLogResult, LogResult> for BossFilter {
+ fn filter_early(&self, early_log: &EarlyLogResult) -> Inclusion {
+ let boss = Boss::from_u16(early_log.evtc.header.combat_id);
boss.map(|b| self.0.contains(&b).into())
.unwrap_or(Inclusion::Exclude)
}
@@ -42,7 +41,7 @@ pub fn boss(bosses: HashSet<Boss>) -> Box<dyn LogFilter> {
#[derive(Debug, Clone)]
struct OutcomeFilter(HashSet<FightOutcome>);
-impl Filter<PartialEvtc, LogResult> for OutcomeFilter {
+impl Filter<EarlyLogResult, LogResult> for OutcomeFilter {
fn filter(&self, log: &LogResult) -> bool {
self.0.contains(&log.outcome)
}
@@ -76,7 +75,7 @@ pub fn wipe() -> Box<dyn LogFilter> {
#[derive(Debug, Clone)]
struct WeekdayFilter(HashSet<Weekday>);
-impl Filter<PartialEvtc, LogResult> for WeekdayFilter {
+impl Filter<EarlyLogResult, LogResult> for WeekdayFilter {
fn filter(&self, log: &LogResult) -> bool {
self.0.contains(&log.time.weekday())
}
@@ -90,7 +89,7 @@ pub fn weekday(weekdays: HashSet<Weekday>) -> Box<dyn LogFilter> {
#[derive(Debug, Clone)]
struct TimeFilter(Option<DateTime<Utc>>, Option<DateTime<Utc>>);
-impl Filter<PartialEvtc, LogResult> for TimeFilter {
+impl Filter<EarlyLogResult, LogResult> for TimeFilter {
fn filter(&self, log: &LogResult) -> bool {
let after_ok = match self.0 {
Some(time) => time <= log.time,
diff --git a/src/filters/player.rs b/src/filters/player.rs
index 7258bd7..3af2be2 100644
--- a/src/filters/player.rs
+++ b/src/filters/player.rs
@@ -3,14 +3,13 @@
//! Additionally, it provides methods to lift a player filter to a log filter with [`any`][any] and
//! [`all`][all].
use super::{
- super::{guilds, LogResult, Player, SearchField},
+ super::{guilds, EarlyLogResult, LogResult, Player, SearchField},
log::LogFilter,
Filter, Inclusion,
};
use std::convert::TryFrom;
-use evtclib::raw::parser::PartialEvtc;
use evtclib::{Agent, AgentKind};
use regex::Regex;
@@ -25,10 +24,10 @@ pub trait PlayerFilter = Filter<Agent, Player>;
#[derive(Debug)]
struct AllPlayers(Box<dyn PlayerFilter>);
-impl Filter<PartialEvtc, LogResult> for AllPlayers {
- fn filter_early(&self, partial_evtc: &PartialEvtc) -> Inclusion {
+impl Filter<EarlyLogResult, LogResult> for AllPlayers {
+ fn filter_early(&self, early_log: &EarlyLogResult) -> Inclusion {
let mut result = Inclusion::Include;
- for agent in &partial_evtc.agents {
+ for agent in &early_log.evtc.agents {
if !agent.is_player() {
continue;
}