ok vim runs that was ez

master
Bel LaPointe 2024-06-14 09:49:22 -06:00
parent aa9e032c31
commit 7832d09fe8
1 changed files with 38 additions and 20 deletions

View File

@ -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<TS, String> {
}
}
#[derive(Debug, serde::Serialize, serde::Deserialize)]
#[derive(Debug, serde::Serialize, serde::Deserialize, Clone)]
pub struct Tasks(Vec<Task>);
impl Tasks {
@ -841,8 +860,7 @@ mod test_duration {
}
}
#[derive(Debug)]
#[derive(PartialEq)]
#[derive(Debug, PartialEq, Clone)]
struct TS(u64);
impl TS {