pub mod filters;
pub mod results;
use crate::error::Result;
use crate::storage::SessionIndex;
pub use filters::SearchFilters;
pub use results::SearchResult;
#[allow(dead_code)]
pub fn search_sessions(filters: &SearchFilters) -> Result<Vec<SearchResult>> {
let index = SessionIndex::new()?;
let mut sessions = if !filters.tools.is_empty() {
index.find_by_tools(&filters.tools)?
} else {
if let Some(ref project) = filters.project {
index.find_by_project(project)?
} else {
index.list_sessions()?
}
};
if filters.tools.is_empty() {
} else if let Some(ref project) = filters.project {
sessions.retain(|s| s.project_name == *project);
}
if filters.errors_only {
sessions.retain(|s| s.error_count > 0);
}
let mut results: Vec<SearchResult> = sessions
.into_iter()
.map(SearchResult::from_session_file)
.collect();
results.sort_by(|a, b| {
b.relevance
.partial_cmp(&a.relevance)
.unwrap_or(std::cmp::Ordering::Equal)
});
Ok(results)
}