Browse Source

basic delete

fix-typo
Coin de Gamma 3 months ago
parent
commit
c66fa2792d
  1. 36
      src/main.rs
  2. 11
      src/storage.rs

36
src/main.rs

@ -46,6 +46,11 @@ enum Commands {
Edit {
#[arg(value_name="item_id")]
id: String
},
Delete {
#[arg(value_name="item_id")]
id: String
}
}
@ -157,6 +162,20 @@ impl MPS {
Ok(())
}
fn show(&mut self, id: &String) -> io::Result<()> {
self.login()?;
let st = self.storage.as_ref().unwrap();
if !st.contains(id) {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
format!("Can`t find id: {}", id)
));
}
let item = st.get(id);
editor::open_to_show(&item.content)?;
Ok(())
}
fn add(&mut self, id: &String) -> io::Result<()> {
self.login()?;
let st = self.storage.as_mut().unwrap();
@ -190,29 +209,28 @@ impl MPS {
PROMPT::NO => return Ok(())
}
}
let mut item = (*st.get(id)).clone();
let new_content = editor::open_to_edit(&item.content)?;
item.content = new_content;
st.update(item);
st.dump()?;
Ok(())
}
fn show(&mut self, id: &String) -> io::Result<()> {
fn delete(&mut self, id: &String) -> io::Result<()> {
self.login()?;
let st = self.storage.as_ref().unwrap();
let st = self.storage.as_mut().unwrap();
if !st.contains(id) {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
format!("Can`t find id: {}", id)
"No such item"
));
}
let item = st.get(id);
editor::open_to_show(&item.content)?;
st.remove(id);
st.dump()?;
Ok(())
}
}
fn run_command() -> io::Result<()> {
@ -237,6 +255,10 @@ fn run_command() -> io::Result<()> {
let mut mps = MPS::new();
mps.edit(id)?
}
Some(Commands::Delete { id }) => {
let mut mps = MPS::new();
mps.delete(id)?
}
None => {
match Storage::check_installed() {
Ok(()) => (),

11
src/storage.rs

@ -98,6 +98,8 @@ impl Storage {
"Bad storage db format: no passphrase in the beginnning"
)),
};
// TODO: only in debug mode
//println!("passphrase ok");
if !encoder.test_encoded_passphrase(passtest)? {
return Err(io::Error::new(io::ErrorKind::InvalidData, "Wrong passphrase"));
}
@ -106,9 +108,13 @@ impl Storage {
Ok(line) => {
if id.is_none() {
let line = encoder.decrypt(line)?;
// TODO: only in debug mode
//println!("{}", line);
id = Some(line);
} else {
let content = encoder.decrypt(line)?;
// TODO: only in debug
//println!("{}", content);
items.insert(Item::from(id.unwrap(), content));
id = None;
}
@ -189,6 +195,11 @@ impl Storage {
self.items.insert(item);
}
pub fn remove(&mut self, id: &String) {
let item = Item::from_empty(id.clone());
self.items.remove(&item);
}
pub fn dump(&self) -> io::Result<()> {
let mut file = fs::OpenOptions::new()
.write(true)

Loading…
Cancel
Save