diff options
| author | lukeflo | 2024-10-07 16:44:26 +0200 |
|---|---|---|
| committer | lukeflo | 2024-10-12 22:41:38 +0200 |
| commit | e425c7dcdf444de1151ab3f5347e6503cd0452b9 (patch) | |
| tree | 0f153303043db31b40c276d42a5dc823cf8da740 /src/frontend/entries.rs | |
| parent | c9e749f811b16f7ec352d2aa8773105af046fad8 (diff) | |
| download | bibiman-e425c7dcdf444de1151ab3f5347e6503cd0452b9.tar.gz bibiman-e425c7dcdf444de1151ab3f5347e6503cd0452b9.zip | |
working func for opening PDFs, needs refinement (MacOS)
Diffstat (limited to 'src/frontend/entries.rs')
| -rw-r--r-- | src/frontend/entries.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/frontend/entries.rs b/src/frontend/entries.rs index 8eadfa2..b1312ec 100644 --- a/src/frontend/entries.rs +++ b/src/frontend/entries.rs @@ -18,11 +18,14 @@ use super::app::App; use super::tui::Tui; use crate::backend::search::BibiSearch; -use color_eyre::eyre::Result; +use color_eyre::eyre::{Context, Ok, Result}; use editor_command::EditorBuilder; use itertools::Itertools; use ratatui::widgets::TableState; -use std::process::Command; +use std::{ + io::Stderr, + process::{Command, Stdio}, +}; impl FromIterator<Vec<String>> for EntryTable { fn from_iter<T: IntoIterator<Item = Vec<String>>>(iter: T) -> Self { @@ -214,4 +217,22 @@ impl App { // self.search_struct.filtered_entry_list = filtered_list.clone(); self.entry_table = EntryTable::from_iter(filtered_list) } + + // Open file connected with entry through 'file' or 'pdf' field + pub fn open_connected_file(&mut self) -> Result<()> { + let idx = self.entry_table.entry_table_state.selected().unwrap(); + let filepath = &self.entry_table.entry_table_items[idx].filepath.clone(); + + // Build command to execute pdf-reader. 'xdg-open' is Linux standard + // TODO: need to implement for MacOS ('opener'). Windows, I don't know... + let _ = Command::new("xdg-open") + .arg(&filepath) + // Pipe output produced by opener to /dev/null + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .wrap_err("Opening file not possible"); + + Ok(()) + } } |
