diff options
| author | lukeflo | 2024-10-12 21:34:12 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-12 22:41:38 +0200 |
| commit | 12b67d9d67d0e3256f6ddc8bc47572f6a178df4c (patch) | |
| tree | 65479de8c69bf7ce7eff1d65881c2d79f914322d /src/frontend/keywords.rs | |
| parent | 84e80b4074a174163a4c57c59ff616356e0a4350 (diff) | |
| download | bibiman-12b67d9d67d0e3256f6ddc8bc47572f6a178df4c.tar.gz bibiman-12b67d9d67d0e3256f6ddc8bc47572f6a178df4c.zip | |
reworked search mechanism
Diffstat (limited to 'src/frontend/keywords.rs')
| -rw-r--r-- | src/frontend/keywords.rs | 60 |
1 files changed, 20 insertions, 40 deletions
diff --git a/src/frontend/keywords.rs b/src/frontend/keywords.rs index b4cc7e9..0363609 100644 --- a/src/frontend/keywords.rs +++ b/src/frontend/keywords.rs @@ -16,7 +16,6 @@ ///// use super::app::{App, FormerArea}; -use super::entries::EntryTable; use crate::backend::search::BibiSearch; use ratatui::widgets::{ListState, ScrollbarState}; @@ -105,56 +104,37 @@ impl App { } pub fn filter_tags_by_entries(&mut self) { - if !self.search_struct.filtered_entry_list_by_search.is_empty() - || !self.search_struct.filtered_entry_list_by_tags.is_empty() - { - self.search_struct.filtered_tag_list.clear(); - - let orig_list = if !self.search_struct.filtered_entry_list_by_search.is_empty() { - self.search_struct.filtered_entry_list_by_search.clone() - } else { - self.search_struct.filtered_entry_list_by_tags.clone() - }; - - let mut filtered_keywords: Vec<String> = Vec::new(); - - for e in orig_list { - if !e[4].is_empty() { - let mut key_vec: Vec<String> = e[4] - .split(',') - .map(|s| s.trim().to_string()) - .filter(|s| !s.is_empty()) - .collect(); - filtered_keywords.append(&mut key_vec); - } + let mut filtered_keywords: Vec<String> = Vec::new(); + + let orig_list = &self.entry_table.entry_table_items; + + for e in orig_list { + if !e.keywords.is_empty() { + let mut key_vec: Vec<String> = e + .keywords + .split(',') + .map(|s| s.trim().to_string()) + .filter(|s| !s.is_empty()) + .collect(); + filtered_keywords.append(&mut key_vec); } + } - filtered_keywords.sort_by(|a, b| a.to_lowercase().cmp(&b.to_lowercase())); - filtered_keywords.dedup(); + filtered_keywords.sort_by(|a, b| a.to_lowercase().cmp(&b.to_lowercase())); + filtered_keywords.dedup(); - self.search_struct.filtered_tag_list = filtered_keywords.clone(); - self.tag_list = TagList::from_iter(filtered_keywords); - } + self.search_struct.filtered_tag_list = filtered_keywords.clone(); + self.tag_list = TagList::from_iter(filtered_keywords); } // Filter the entry list by tags when hitting enter // If already inside a filtered tag or entry list, apply the filtering // to the already filtered list only pub fn filter_for_tags(&mut self) { - let orig_list = { - if self.search_struct.inner_search { - let orig_list = &self.search_struct.filtered_entry_list_by_search; - orig_list - } else { - let orig_list = &self.biblio_data.entry_list.bibentries; - orig_list - } - }; + let orig_list = &self.entry_table.entry_table_items; let keyword = self.get_selected_tag(); let filtered_list = BibiSearch::filter_entries_by_tag(&keyword, &orig_list); - self.search_struct.filtered_entry_list_by_tags = filtered_list; - self.entry_table = - EntryTable::from_iter(self.search_struct.filtered_entry_list_by_tags.clone()); + self.entry_table.entry_table_items = filtered_list; self.filter_tags_by_entries(); self.toggle_area(); self.former_area = Some(FormerArea::TagArea); |
