A file-based task manager

Basic task creation done

+6 -9
+6 -9
src/workspace.rs
··· 3 4 use crate::errors::{Error, Result}; 5 use std::fs::File; 6 - use std::io::{BufReader, Seek}; 7 use std::path::PathBuf; 8 - use std::{ 9 - fs::OpenOptions, 10 - io::{BufRead, Write}, 11 - }; 12 13 pub struct Id(u32); 14 ··· 43 if !tsk_dir.exists() { 44 return Err(Error::Uninitialized); 45 } else { 46 - Ok(Self { path }) 47 } 48 } 49 ··· 51 let file = OpenOptions::new() 52 .read(true) 53 .write(true) 54 - .create(true) 55 .open(self.path.join("next"))?; 56 let mut lock = 57 Flock::lock(file, FlockArg::LockExclusive).map_err(|(_, errno)| Error::Lock(errno))?; 58 let mut buf = String::new(); 59 - BufReader::new(&*lock).read_line(&mut buf)?; 60 let id = buf.trim().parse::<u32>()?; 61 // reset the files contents 62 lock.set_len(0)?; ··· 74 .read(true) 75 .write(true) 76 .create(true) 77 - .open(self.path.join(format!("tsk-{}.tsk", id.0)))?; 78 let mut file = 79 Flock::lock(file, FlockArg::LockExclusive).map_err(|(_, errno)| Error::Lock(errno))?; 80 file.write_all(format!("{title}\n\n{body}").as_bytes())?;
··· 3 4 use crate::errors::{Error, Result}; 5 use std::fs::File; 6 + use std::io::{Read, Seek}; 7 use std::path::PathBuf; 8 + use std::{fs::OpenOptions, io::Write}; 9 10 pub struct Id(u32); 11 ··· 40 if !tsk_dir.exists() { 41 return Err(Error::Uninitialized); 42 } else { 43 + Ok(Self { path: tsk_dir }) 44 } 45 } 46 ··· 48 let file = OpenOptions::new() 49 .read(true) 50 .write(true) 51 + .create(false) 52 .open(self.path.join("next"))?; 53 let mut lock = 54 Flock::lock(file, FlockArg::LockExclusive).map_err(|(_, errno)| Error::Lock(errno))?; 55 let mut buf = String::new(); 56 + lock.read_to_string(&mut buf)?; 57 let id = buf.trim().parse::<u32>()?; 58 // reset the files contents 59 lock.set_len(0)?; ··· 71 .read(true) 72 .write(true) 73 .create(true) 74 + .open(self.path.join("tasks").join(format!("tsk-{}.tsk", id.0)))?; 75 let mut file = 76 Flock::lock(file, FlockArg::LockExclusive).map_err(|(_, errno)| Error::Lock(errno))?; 77 file.write_all(format!("{title}\n\n{body}").as_bytes())?;