ok vim runs that was ez
parent
aa9e032c31
commit
7832d09fe8
|
|
@ -7,6 +7,7 @@ use regex::Regex;
|
||||||
use croner;
|
use croner;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use tempdir::TempDir;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let flags = Flags::new();
|
let flags = Flags::new();
|
||||||
|
|
@ -115,6 +116,22 @@ impl DB {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn edit(&self) -> Result<(), String> {
|
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())
|
Err("not impl".to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -155,7 +172,7 @@ mod test_taskss {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct TasksAndMetadata {
|
pub struct TasksAndMetadata {
|
||||||
tasks: Tasks,
|
tasks: Tasks,
|
||||||
file: String,
|
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 version = file_version(self.file.clone())?;
|
||||||
let mut file = self.file.clone();
|
let mut file = self.file.clone();
|
||||||
if version != self.version {
|
if version != self.version {
|
||||||
|
|
@ -192,23 +209,25 @@ impl TasksAndMetadata {
|
||||||
eprintln!("{}", self.tasks.to_string());
|
eprintln!("{}", self.tasks.to_string());
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
false => {
|
false => self.save_as(file),
|
||||||
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()) {
|
pub fn save_due_as(&self, file: String) -> Result<(), String> {
|
||||||
Ok(_) => {
|
let mut cloned = self.clone();
|
||||||
match std::fs::rename(&tmpf, &file) {
|
cloned.tasks = cloned.tasks.due();
|
||||||
Ok(_) => Ok(()),
|
cloned.save_as(file)
|
||||||
Err(msg) => Err(format!("failed to flush {}: {}", file, msg)),
|
}
|
||||||
}
|
|
||||||
},
|
pub fn save_as(&self, file: String) -> Result<(), String> {
|
||||||
Err(msg) => Err(format!("failed to write {}: {}", file, msg)),
|
match std::fs::File::create(&file) {
|
||||||
}
|
Ok(mut f) => {
|
||||||
},
|
match f.write_all(self.tasks.to_string().as_bytes()) {
|
||||||
Err(msg) => Err(format!("failed to create {}: {}", file, msg)),
|
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>);
|
pub struct Tasks(Vec<Task>);
|
||||||
|
|
||||||
impl Tasks {
|
impl Tasks {
|
||||||
|
|
@ -841,8 +860,7 @@ mod test_duration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
#[derive(PartialEq)]
|
|
||||||
struct TS(u64);
|
struct TS(u64);
|
||||||
|
|
||||||
impl TS {
|
impl TS {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue