From 7832d09fe894848ea4f6b4f9486f82067a41ebb9 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:49:22 -0600 Subject: [PATCH] ok vim runs that was ez --- pttodoer/src/main.rs | 58 +++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/pttodoer/src/main.rs b/pttodoer/src/main.rs index 44e985c..18af025 100644 --- a/pttodoer/src/main.rs +++ b/pttodoer/src/main.rs @@ -7,6 +7,7 @@ use regex::Regex; use croner; use clap::Parser; use std::io::Write; +use tempdir::TempDir; fn main() { let flags = Flags::new(); @@ -115,6 +116,22 @@ impl DB { } pub fn edit(&self) -> Result<(), String> { + let d = TempDir::new(&TS::now().to_string()).expect("failed to create a temp dir"); + for set in &self.0 { + let base = set.file.split("/").last().unwrap().to_string(); + let f = d.path().join(base); + set.save_due_as(f.display().to_string())?; + } + + std::process::Command::new("/bin/sh") + .current_dir(d.path()) + .arg("-c") + .arg("vim -p ./*") + .spawn() + .expect("failed to start vim") + .wait() + .expect("failed to vim"); + Err("not impl".to_string()) } @@ -155,7 +172,7 @@ mod test_taskss { } } -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct TasksAndMetadata { tasks: Tasks, file: String, @@ -175,7 +192,7 @@ impl TasksAndMetadata { } } - fn save(&self, dry_run: bool) -> Result<(), String> { + pub fn save(&self, dry_run: bool) -> Result<(), String> { let version = file_version(self.file.clone())?; let mut file = self.file.clone(); if version != self.version { @@ -192,23 +209,25 @@ impl TasksAndMetadata { eprintln!("{}", self.tasks.to_string()); Ok(()) }, - false => { - let tmpf = format!("{}.{}", &file, TS::now().to_string()); - match std::fs::File::create(&tmpf) { - Ok(mut f) => { - match f.write_all(self.tasks.to_string().as_bytes()) { - Ok(_) => { - match std::fs::rename(&tmpf, &file) { - Ok(_) => Ok(()), - Err(msg) => Err(format!("failed to flush {}: {}", file, msg)), - } - }, - Err(msg) => Err(format!("failed to write {}: {}", file, msg)), - } - }, - Err(msg) => Err(format!("failed to create {}: {}", file, msg)), + false => self.save_as(file), + } + } + + pub fn save_due_as(&self, file: String) -> Result<(), String> { + let mut cloned = self.clone(); + cloned.tasks = cloned.tasks.due(); + cloned.save_as(file) + } + + pub fn save_as(&self, file: String) -> Result<(), String> { + match std::fs::File::create(&file) { + Ok(mut f) => { + match f.write_all(self.tasks.to_string().as_bytes()) { + Ok(_) => Ok(()), + Err(msg) => Err(format!("failed to write {}: {}", file, msg)), } }, + Err(msg) => Err(format!("failed to create {}: {}", file, msg)), } } @@ -228,7 +247,7 @@ fn file_version(file: String) -> Result { } } -#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)] pub struct Tasks(Vec); impl Tasks { @@ -841,8 +860,7 @@ mod test_duration { } } -#[derive(Debug)] -#[derive(PartialEq)] +#[derive(Debug, PartialEq, Clone)] struct TS(u64); impl TS {