aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/entries.rs
diff options
context:
space:
mode:
authorlukeflo2024-10-07 16:44:26 +0200
committerlukeflo2024-10-12 22:41:38 +0200
commite425c7dcdf444de1151ab3f5347e6503cd0452b9 (patch)
tree0f153303043db31b40c276d42a5dc823cf8da740 /src/frontend/entries.rs
parentc9e749f811b16f7ec352d2aa8773105af046fad8 (diff)
downloadbibiman-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.rs25
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(())
+ }
}