aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlukeflo2024-10-12 20:20:16 +0200
committerlukeflo2024-10-12 22:41:38 +0200
commit84e80b4074a174163a4c57c59ff616356e0a4350 (patch)
treeef4900673dcba99e8f61544ef6caf0b833e5b69c
parent2fa5f8193c2cf3b75f54a37f0f7c4b5ae9d7d665 (diff)
downloadbibiman-84e80b4074a174163a4c57c59ff616356e0a4350.tar.gz
bibiman-84e80b4074a174163a4c57c59ff616356e0a4350.zip
search with intermediate saves
-rw-r--r--src/backend/search.rs6
-rw-r--r--src/frontend/app.rs3
-rw-r--r--src/frontend/entries.rs6
-rw-r--r--src/frontend/keywords.rs19
-rw-r--r--src/frontend/ui.rs24
5 files changed, 27 insertions, 31 deletions
diff --git a/src/backend/search.rs b/src/backend/search.rs
index 2c11355..6757790 100644
--- a/src/backend/search.rs
+++ b/src/backend/search.rs
@@ -8,7 +8,8 @@ use std::collections::HashMap;
pub struct BibiSearch {
pub search_string: String, // Search string show in footer, used for search
pub inner_search: bool, // True, if we trigger a search for already filtered list
- pub filtered_entry_list: Vec<Vec<String>>, // Temporary holds filtered entry list to refilter it
+ pub filtered_entry_list_by_search: Vec<Vec<String>>, // Temporary holds entry list filtered by search pattern to refilter it
+ pub filtered_entry_list_by_tags: Vec<Vec<String>>, // Holds entry list filtered by tag to filter it further by search
pub filtered_tag_list: Vec<String>,
}
@@ -17,7 +18,8 @@ impl Default for BibiSearch {
Self {
search_string: String::new(),
inner_search: false,
- filtered_entry_list: Vec::new(),
+ filtered_entry_list_by_search: Vec::new(),
+ filtered_entry_list_by_tags: Vec::new(),
filtered_tag_list: Vec::new(),
}
}
diff --git a/src/frontend/app.rs b/src/frontend/app.rs
index ee2ab05..2f88ff2 100644
--- a/src/frontend/app.rs
+++ b/src/frontend/app.rs
@@ -161,7 +161,8 @@ impl App {
if let CurrentArea::TagArea = self.current_area {
self.tag_list.tag_list_state.select(Some(0))
}
- self.search_struct.filtered_entry_list.clear();
+ self.search_struct.filtered_entry_list_by_search.clear();
+ self.search_struct.filtered_entry_list_by_tags.clear();
self.search_struct.filtered_tag_list.clear();
self.search_struct.inner_search = false;
self.former_area = None
diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs
index 081de4c..ac6d1b0 100644
--- a/src/frontend/entries.rs
+++ b/src/frontend/entries.rs
@@ -250,7 +250,7 @@ impl App {
pub fn search_entries(&mut self) {
let orig_list = {
if self.search_struct.inner_search {
- let orig_list = &self.search_struct.filtered_entry_list;
+ let orig_list = &self.search_struct.filtered_entry_list_by_tags;
orig_list
} else {
let orig_list = &self.biblio_data.entry_list.bibentries;
@@ -260,8 +260,8 @@ impl App {
let filtered_list =
BibiSearch::search_entry_list(&mut self.search_struct.search_string, orig_list.clone());
//search::search_entry_list(&self.search_string, orig_list.clone());
- // self.search_struct.filtered_entry_list = filtered_list.clone();
- self.entry_table = EntryTable::from_iter(filtered_list)
+ self.search_struct.filtered_entry_list_by_search = filtered_list.clone();
+ self.entry_table = EntryTable::from_iter(filtered_list);
}
// Open file connected with entry through 'file' or 'pdf' field
diff --git a/src/frontend/keywords.rs b/src/frontend/keywords.rs
index 6aa4068..b4cc7e9 100644
--- a/src/frontend/keywords.rs
+++ b/src/frontend/keywords.rs
@@ -105,9 +105,17 @@ impl App {
}
pub fn filter_tags_by_entries(&mut self) {
- if !self.search_struct.filtered_entry_list.is_empty() {
+ 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 = self.search_struct.filtered_entry_list.clone();
+
+ 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 {
@@ -135,7 +143,7 @@ impl App {
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;
+ let orig_list = &self.search_struct.filtered_entry_list_by_search;
orig_list
} else {
let orig_list = &self.biblio_data.entry_list.bibentries;
@@ -144,8 +152,9 @@ impl App {
};
let keyword = self.get_selected_tag();
let filtered_list = BibiSearch::filter_entries_by_tag(&keyword, &orig_list);
- self.search_struct.filtered_entry_list = filtered_list;
- self.entry_table = EntryTable::from_iter(self.search_struct.filtered_entry_list.clone());
+ 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.filter_tags_by_entries();
self.toggle_area();
self.former_area = Some(FormerArea::TagArea);
diff --git a/src/frontend/ui.rs b/src/frontend/ui.rs
index 7edcf43..a328df7 100644
--- a/src/frontend/ui.rs
+++ b/src/frontend/ui.rs
@@ -258,34 +258,18 @@ impl App {
.add_modifier(Modifier::ITALIC)
.fg(TEXT_FG_COLOR);
let lines = {
- let idx = self.entry_table.entry_table_state.selected().unwrap();
- let cur_entry = &self.entry_table.entry_table_items[idx];
// if self.entry_table.entry_table_items.len() > 0 {
if self.entry_table.entry_table_state.selected().is_some() {
+ let idx = self.entry_table.entry_table_state.selected().unwrap();
+ let cur_entry = &self.entry_table.entry_table_items[idx];
let mut lines = vec![];
lines.push(Line::from(vec![
Span::styled("Authors: ", style_value),
- Span::styled(
- // String::from(BibiEntry::get_authors(
- // &self.get_selected_citekey(),
- // &self.main_biblio.bibliography,
- // )),
- // Style::new().green(),
- cur_entry.authors.clone(),
- Style::new().green(),
- ),
+ Span::styled(cur_entry.authors.clone(), Style::new().green()),
]));
lines.push(Line::from(vec![
Span::styled("Title: ", style_value),
- Span::styled(
- // String::from(BibiEntry::get_title(
- // &self.get_selected_citekey(),
- // &self.main_biblio.bibliography,
- // )),
- // Style::new().magenta(),
- cur_entry.title.clone(),
- Style::new().magenta(),
- ),
+ Span::styled(cur_entry.title.clone(), Style::new().magenta()),
]));
lines.push(Line::from(vec![
Span::styled("Year: ", style_value),