ok vim runs that was ez
parent
aa9e032c31
commit
7832d09fe8
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue