diff options
| author | ottjk <joshott16@gmail.com> | 2024-01-20 01:56:41 -0500 |
|---|---|---|
| committer | ottjk <joshott16@gmail.com> | 2024-01-20 01:56:41 -0500 |
| commit | eb99d622a8190e105e490185690b540c5ef1c97f (patch) | |
| tree | 17f4040f570bd2e2aef855a79c01bda38d25c96b /src/commands/sit.rs | |
| download | xoppdog-eb99d622a8190e105e490185690b540c5ef1c97f.tar.gz xoppdog-eb99d622a8190e105e490185690b540c5ef1c97f.zip | |
Diffstat (limited to 'src/commands/sit.rs')
| -rw-r--r-- | src/commands/sit.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/commands/sit.rs b/src/commands/sit.rs new file mode 100644 index 0000000..84f2f9e --- /dev/null +++ b/src/commands/sit.rs @@ -0,0 +1,73 @@ +use notify::{ + Watcher, + RecursiveMode, + event::{Event, EventKind, ModifyKind}, +}; +use std::{ + path::PathBuf, + io::{self, Error}, + process::Command, + fs +}; + +pub fn start_sit(root: PathBuf) { + let mut watcher = notify::recommended_watcher(|res| { + match res { + Ok(event) => handle_event(event), + Err(e) => println!("watch error: {:?}", e), + } + }).unwrap(); + + if !root.try_exists().unwrap() { + fs::create_dir_all(&root).unwrap(); + } + + watcher.watch(&root, RecursiveMode::NonRecursive).unwrap(); + + let mut input = String::new(); + io::stdin() + .read_line(&mut input) + .expect("Failed to read user input."); +} + +fn handle_event(event: Event) { + let _event_result = match event.kind { + EventKind::Modify(ModifyKind::Data(_)) => compile(event), + EventKind::Create(_) => compile(event), + _ => Ok(()), + }; +} + +fn compile(event: Event) -> io::Result<()> { + let path = &event.paths[0]; + if path.extension().unwrap() == "xopp" { + let pdf_path = path.with_extension("pdf"); + let pdf_path_str = pdf_path.to_str().unwrap(); + + let xournal_status = Command::new("xournalpp") + .arg(path.as_os_str()) + .args(["-p", pdf_path_str]) + .arg("--export-no-background") + .arg("--export-no-ruling") + .status()?; + + match xournal_status.success() { + true => println!("exported to {}", pdf_path_str), + false => return Err(Error::other("couldn't export xopp to pdf.")), + } + + let inkscape_status = Command::new("inkscape") + .arg(pdf_path_str) + .arg("--export-type=pdf") + .arg("--export-latex") + .arg(format!("--export-filename={}", pdf_path_str)) + .status()?; + + match inkscape_status.success() { + true => println!("created pdf_tex from {}", pdf_path_str), + false => return Err(Error::other("couldn't export pdf to pdf_tex.")), + } + } + + Ok(()) +} |