From a0f95ad7b1faf368c8bb05ce09a52989dac94774 Mon Sep 17 00:00:00 2001 From: Conrad Ludgate Date: Mon, 24 Jul 2023 19:47:50 +0100 Subject: [PATCH] skim: fix filtering aggregates (#1114) * skim: fix filtering aggregates * comments --- .../src/command/client/search/engines/skim.rs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/atuin/src/command/client/search/engines/skim.rs b/atuin/src/command/client/search/engines/skim.rs index 7604931..375a018 100644 --- a/atuin/src/command/client/search/engines/skim.rs +++ b/atuin/src/command/client/search/engines/skim.rs @@ -5,6 +5,7 @@ use atuin_client::{database::Database, history::History, settings::FilterMode}; use chrono::Utc; use eyre::Result; use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher}; +use itertools::Itertools; use tokio::task::yield_now; use super::{SearchEngine, SearchState}; @@ -52,11 +53,25 @@ async fn fuzzy_search( if i % 256 == 0 { yield_now().await; } + let context = &state.context; match state.filter_mode { FilterMode::Global => {} - FilterMode::Host if history.hostname == state.context.hostname => {} - FilterMode::Session if history.session == state.context.session => {} - FilterMode::Directory if history.cwd == state.context.cwd => {} + // we aggregate host by ',' separating them + FilterMode::Host + if history + .hostname + .split(',') + .contains(&context.hostname.as_str()) => {} + // we aggregate session by concattenating them. + // sessions are 32 byte simple uuid formats + FilterMode::Session + if history + .session + .as_bytes() + .chunks(32) + .contains(&context.session.as_bytes()) => {} + // we aggregate directory by ':' separating them + FilterMode::Directory if history.cwd.split(':').contains(&context.cwd.as_str()) => {} _ => continue, } #[allow(clippy::cast_lossless, clippy::cast_precision_loss)]