aboutsummaryrefslogtreecommitdiffstats
path: root/crates/turtle/src/command/client/search/engines.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/turtle/src/command/client/search/engines.rs')
-rw-r--r--crates/turtle/src/command/client/search/engines.rs86
1 files changed, 0 insertions, 86 deletions
diff --git a/crates/turtle/src/command/client/search/engines.rs b/crates/turtle/src/command/client/search/engines.rs
deleted file mode 100644
index 9fbff278..00000000
--- a/crates/turtle/src/command/client/search/engines.rs
+++ /dev/null
@@ -1,86 +0,0 @@
-use crate::atuin_client::{
- database::{ClientSqlite, Context, OptFilters},
- history::{History, HistoryId},
- settings::{FilterMode, SearchMode, Settings},
-};
-use async_trait::async_trait;
-use eyre::Result;
-
-use super::cursor::Cursor;
-
-pub(crate) mod daemon;
-pub(crate) mod db;
-pub(crate) mod skim;
-
-pub(crate) fn engine(search_mode: SearchMode, settings: &Settings) -> Box<dyn SearchEngine> {
- match search_mode {
- SearchMode::Skim => Box::new(skim::Search::new()),
- SearchMode::DaemonFuzzy => Box::new(daemon::Search::new(settings)),
- mode => Box::new(db::Search(mode)),
- }
-}
-
-pub(crate) struct SearchState {
- pub(crate) input: Cursor,
- pub(crate) filter_mode: FilterMode,
- pub(crate) context: Context,
- pub(crate) custom_context: Option<HistoryId>,
-}
-
-impl SearchState {
- pub(crate) fn rotate_filter_mode(&mut self, settings: &Settings, offset: isize) {
- let mut i = settings
- .search
- .filters
- .iter()
- .position(|&m| m == self.filter_mode)
- .unwrap_or_default();
- for _ in 0..settings.search.filters.len() {
- i = (i.wrapping_add_signed(offset)) % settings.search.filters.len();
- let mode = settings.search.filters[i];
- if self.filter_mode_available(mode, settings) {
- self.filter_mode = mode;
- break;
- }
- }
- }
-
- fn filter_mode_available(&self, mode: FilterMode, settings: &Settings) -> bool {
- match mode {
- FilterMode::Global | FilterMode::SessionPreload => self.custom_context.is_none(),
- FilterMode::Workspace => settings.workspaces && self.context.git_root.is_some(),
- _ => true,
- }
- }
-}
-
-#[async_trait]
-pub(crate) trait SearchEngine: Send + Sync + 'static {
- async fn full_query(
- &mut self,
- state: &SearchState,
- db: &mut ClientSqlite,
- ) -> Result<Vec<History>>;
-
- async fn query(&mut self, state: &SearchState, db: &mut ClientSqlite) -> Result<Vec<History>> {
- if state.input.as_str().is_empty() {
- Ok(db
- .search(
- SearchMode::FullText,
- state.filter_mode,
- &state.context,
- "",
- OptFilters {
- limit: Some(200),
- ..Default::default()
- },
- )
- .await?
- .into_iter()
- .collect::<Vec<_>>())
- } else {
- self.full_query(state, db).await
- }
- }
- fn get_highlight_indices(&self, command: &str, search_input: &str) -> Vec<usize>;
-}