aboutsummaryrefslogtreecommitdiff
path: root/src/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs110
1 files changed, 74 insertions, 36 deletions
diff --git a/src/app.rs b/src/app.rs
index 88f37b0..f7e7891 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -15,7 +15,7 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/////
-use crate::bibiman::{CurrentArea, FormerArea};
+use crate::bibiman::CurrentArea;
use crate::config::BibiConfig;
use color_eyre::eyre::{Context, Ok, Result};
// use super::Event;
@@ -142,13 +142,14 @@ impl App {
|| doi.starts_with("http://doi.org")
|| doi.starts_with("http://dx.doi.org")
{
- self.bibiman.handle_new_entry_submission(doi);
+ self.bibiman.handle_new_entry_submission(doi)?;
} else {
- self.bibiman.popup_area.popup_message(
- "No valid DOI pattern: ",
- doi,
- false,
- );
+ self.bibiman.open_popup(
+ PopupKind::MessageError,
+ Some("No valid DOI pattern: "),
+ Some(doi),
+ None,
+ )?;
}
}
_ => {}
@@ -277,7 +278,7 @@ impl App {
self.bibiman.open_connected_res(cfg)?;
} else if let Some(PopupKind::AppendToFile) = self.bibiman.popup_area.popup_kind
{
- self.bibiman.append_entry_to_file()?
+ self.bibiman.append_entry_to_file(cfg)?
} else if let Some(PopupKind::YankItem) = self.bibiman.popup_area.popup_kind {
self.bibiman.yank_entry_field()?
}
@@ -300,18 +301,27 @@ impl App {
.selected()
.unwrap();
let entry = self.bibiman.entry_table.entry_table_items[idx].clone();
- let mut items = vec!["Citekey".to_owned()];
+ let mut items = vec![("Citekey: ".to_string(), entry.citekey.clone())];
if entry.doi_url.is_some() {
- items.push("Weblink".to_owned())
+ items.push(("Weblink: ".into(), entry.doi_url.unwrap().clone()))
}
if entry.filepath.is_some() {
- items.push("Filepath".to_owned())
+ entry.filepath.unwrap().iter().for_each(|p| {
+ items.push(("Filepath: ".into(), p.clone().into_string().unwrap()))
+ });
+ // items.push((
+ // "Filepath: ".into(),
+ // entry.filepath.unwrap()[0].clone().into_string().unwrap(),
+ // ))
}
- self.bibiman.popup_area.popup_kind = Some(PopupKind::YankItem);
- self.bibiman.popup_area.popup_selection(items);
- self.bibiman.former_area = Some(FormerArea::EntryArea);
- self.bibiman.current_area = CurrentArea::PopupArea;
- self.bibiman.popup_area.popup_state.select(Some(0));
+
+ // self.bibiman.popup_area.popup_kind = Some(PopupKind::YankItem);
+ // self.bibiman.popup_area.popup_selection(items);
+ // self.bibiman.former_area = Some(FormerArea::EntryArea);
+ // self.bibiman.current_area = CurrentArea::PopupArea;
+ // self.bibiman.popup_area.popup_state.select(Some(0));
+ self.bibiman
+ .open_popup(PopupKind::YankItem, None, None, Some(items))?;
}
}
CmdAction::EditFile => {
@@ -328,25 +338,44 @@ impl App {
.selected()
.unwrap();
let entry = self.bibiman.entry_table.entry_table_items[idx].clone();
+ let mut items: Vec<(String, String)> = vec![];
if entry.filepath.is_some() || entry.doi_url.is_some() {
- let mut items = vec![];
if entry.doi_url.is_some() {
- items.push("Weblink (DOI/URL)".to_owned())
+ items.push((
+ "Weblink (DOI/URL): ".into(),
+ entry.doi_url.unwrap().clone(),
+ ))
}
if entry.filepath.is_some() {
- items.push("File (PDF/EPUB)".to_owned())
+ entry.filepath.unwrap().iter().for_each(|p| {
+ items.push((
+ "File (PDF/EPUB): ".into(),
+ // p.clone().into_string().unwrap(),
+ if entry.file_field && cfg.general.file_prefix.is_some() {
+ cfg.general
+ .file_prefix
+ .clone()
+ .unwrap()
+ .join(p)
+ .into_os_string()
+ .into_string()
+ .unwrap()
+ } else {
+ p.clone().into_string().unwrap()
+ },
+ ))
+ });
}
- self.bibiman.popup_area.popup_kind = Some(PopupKind::OpenRes);
- self.bibiman.popup_area.popup_selection(items);
- self.bibiman.former_area = Some(FormerArea::EntryArea);
- self.bibiman.current_area = CurrentArea::PopupArea;
- self.bibiman.popup_area.popup_state.select(Some(0))
+
+ self.bibiman
+ .open_popup(PopupKind::OpenRes, None, None, Some(items))?;
} else {
- self.bibiman.popup_area.popup_message(
- "Selected entry has no connected ressources: ",
- &entry.citekey,
- false,
- )
+ self.bibiman.open_popup(
+ PopupKind::MessageError,
+ Some("Selected entry has no connected resources: "),
+ Some(&entry.citekey),
+ None,
+ )?;
}
}
}
@@ -357,7 +386,7 @@ impl App {
}
}
CmdAction::ShowHelp => {
- self.bibiman.show_help();
+ self.bibiman.open_popup(PopupKind::Help, None, None, None)?;
}
CmdAction::Exit => {
self.quit();
@@ -372,13 +401,14 @@ pub fn open_connected_file(cfg: &BibiConfig, file: &OsStr) -> Result<()> {
// Build command to execute pdf-reader. 'xdg-open' is Linux standard
let cmd = &cfg.general.pdf_opener;
// If necessary, replace ~ with /home dir
- let file = if cfg.general.file_prefix.is_some() {
- cfg.general.file_prefix.clone().unwrap().join(file)
- } else {
- PathBuf::from(file)
- };
+ // let file = if cfg.general.file_prefix.is_some() {
+ // cfg.general.file_prefix.clone().unwrap().join(file)
+ // } else {
+ // PathBuf::from(file)
+ // };
+ // let file = PathBuf::from(file);
- let file = expand_home(&file).into_os_string();
+ // let file = expand_home(&file).into_os_string();
// Pass filepath as argument, pipe stdout and stderr to /dev/null
// to keep the TUI clean (where is it piped on Windows???)
@@ -430,6 +460,14 @@ pub fn expand_home(path: &PathBuf) -> PathBuf {
}
}
+/// Convert `Vec<(&str, &str)` to `Vec<(String, String)`
+pub fn convert_to_owned_vec(mut items: Vec<(&str, &str)>) -> Vec<(String, String)> {
+ items
+ .iter_mut()
+ .map(|(msg, obj)| (msg.to_string(), obj.to_string()))
+ .collect()
+}
+
#[cfg(test)]
mod test {
use super::*;