aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
authorlukeflo2024-10-07 16:44:26 +0200
committerlukeflo2024-10-12 22:41:38 +0200
commite425c7dcdf444de1151ab3f5347e6503cd0452b9 (patch)
tree0f153303043db31b40c276d42a5dc823cf8da740 /src/frontend
parentc9e749f811b16f7ec352d2aa8773105af046fad8 (diff)
downloadbibiman-e425c7dcdf444de1151ab3f5347e6503cd0452b9.tar.gz
bibiman-e425c7dcdf444de1151ab3f5347e6503cd0452b9.zip
working func for opening PDFs, needs refinement (MacOS)
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/entries.rs25
-rw-r--r--src/frontend/handler.rs3
-rw-r--r--src/frontend/ui.rs2
3 files changed, 27 insertions, 3 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(())
+ }
}
diff --git a/src/frontend/handler.rs b/src/frontend/handler.rs
index a718a87..5bb52d5 100644
--- a/src/frontend/handler.rs
+++ b/src/frontend/handler.rs
@@ -99,6 +99,9 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App, tui: &mut Tui) -> R
KeyCode::Char('e') => {
app.run_editor(tui)?;
}
+ KeyCode::Char('o') => {
+ app.open_connected_file()?;
+ }
KeyCode::Char('/') => {
app.enter_search_area();
}
diff --git a/src/frontend/ui.rs b/src/frontend/ui.rs
index 4920b81..ed6171e 100644
--- a/src/frontend/ui.rs
+++ b/src/frontend/ui.rs
@@ -27,7 +27,7 @@ use ratatui::{
},
};
-use crate::{backend::bib::BibiEntry, frontend::app::App, frontend::keywords::TagListItem};
+use crate::{frontend::app::App, frontend::keywords::TagListItem};
use super::app::{CurrentArea, FormerArea};