aboutsummaryrefslogtreecommitdiff
path: root/src/commands/sit.rs
diff options
context:
space:
mode:
authorottjk <joshott16@gmail.com>2024-01-20 01:56:41 -0500
committerottjk <joshott16@gmail.com>2024-01-20 01:56:41 -0500
commiteb99d622a8190e105e490185690b540c5ef1c97f (patch)
tree17f4040f570bd2e2aef855a79c01bda38d25c96b /src/commands/sit.rs
downloadxoppdog-master.tar.gz
xoppdog-master.zip
initial commitHEADmaster
Diffstat (limited to 'src/commands/sit.rs')
-rw-r--r--src/commands/sit.rs73
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(())
+}