|
|
@ -171,27 +171,15 @@ impl MPS { |
|
|
|
Ok(()) |
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Show item. Id must exists
|
|
|
|
fn show(&mut self, id: &String) -> io::Result<()> { |
|
|
|
fn show(&mut self, id: &String) -> io::Result<()> { |
|
|
|
self.login()?; |
|
|
|
self.login()?; |
|
|
|
let st = self.storage.as_ref().unwrap(); |
|
|
|
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); |
|
|
|
let item = st.get(id); |
|
|
|
editor::open_to_show(&item.content)?; |
|
|
|
editor::open_to_show(&item.content)?; |
|
|
|
Ok(()) |
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fn show_by_number(&mut self, number: u32) -> io::Result<()> { |
|
|
|
|
|
|
|
self.login()?; |
|
|
|
|
|
|
|
let st = self.storage.as_ref().unwrap(); |
|
|
|
|
|
|
|
let id = st.get_id_by_number(number)?; |
|
|
|
|
|
|
|
self.show(&id) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn add(&mut self, id: &String) -> io::Result<()> { |
|
|
|
fn add(&mut self, id: &String) -> io::Result<()> { |
|
|
|
self.login()?; |
|
|
|
self.login()?; |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
@ -212,6 +200,7 @@ impl MPS { |
|
|
|
Ok(()) |
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Edit item, id need not to exist
|
|
|
|
fn edit(&mut self, id: &String) -> io::Result<()> { |
|
|
|
fn edit(&mut self, id: &String) -> io::Result<()> { |
|
|
|
self.login()?; |
|
|
|
self.login()?; |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
@ -233,36 +222,47 @@ impl MPS { |
|
|
|
Ok(()) |
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fn edit_by_number(&mut self, number: u32) -> io::Result<()> { |
|
|
|
// Delete item by id, is must exist
|
|
|
|
|
|
|
|
fn delete(&mut self, id: &String) -> io::Result<()> { |
|
|
|
self.login()?; |
|
|
|
self.login()?; |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
let id = st.get_id_by_number(number)?; |
|
|
|
st.remove(id); |
|
|
|
self.edit(&id) |
|
|
|
st.dump()?; |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fn delete(&mut self, id: &String) -> io::Result<()> { |
|
|
|
/// Resolve id by ItemArgs.
|
|
|
|
|
|
|
|
/// # Arguments
|
|
|
|
|
|
|
|
/// * `args` - arguments to parse
|
|
|
|
|
|
|
|
/// * `check` - check that id existing
|
|
|
|
|
|
|
|
fn item_id_by_item_id_args(&mut self, args: &ItemIdArgs, check: bool) -> io::Result<String> { |
|
|
|
self.login()?; |
|
|
|
self.login()?; |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
if !st.contains(id) { |
|
|
|
let mut item_id: String = "NOT_INITIALIZED".to_string(); |
|
|
|
|
|
|
|
if let Some(id) = &args.id { |
|
|
|
|
|
|
|
item_id = id.clone(); |
|
|
|
|
|
|
|
if check && !st.contains(&id) { |
|
|
|
return Err(io::Error::new( |
|
|
|
return Err(io::Error::new( |
|
|
|
io::ErrorKind::InvalidInput, |
|
|
|
io::ErrorKind::InvalidInput, |
|
|
|
"No such item" |
|
|
|
format!("No such item {}", id) |
|
|
|
)); |
|
|
|
)); |
|
|
|
} |
|
|
|
} |
|
|
|
st.remove(id); |
|
|
|
|
|
|
|
st.dump()?; |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if let Some(number) = &args.number { |
|
|
|
fn delete_by_number(&mut self, number: u32) -> io::Result<()> { |
|
|
|
item_id = st.get_id_by_number(*number)?; |
|
|
|
self.login()?; |
|
|
|
// we can guarantee that id exists because we take it by id
|
|
|
|
let st = self.storage.as_mut().unwrap(); |
|
|
|
} |
|
|
|
let id = st.get_id_by_number(number)?; |
|
|
|
if args.id.is_none() && args.number.is_none() { |
|
|
|
self.delete(&id) |
|
|
|
return Err(io::Error::new( |
|
|
|
|
|
|
|
io::ErrorKind::InvalidInput, |
|
|
|
|
|
|
|
format!("Bag arguments") |
|
|
|
|
|
|
|
)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Ok(item_id.clone()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn run_command() -> io::Result<()> { |
|
|
|
fn run_command() -> io::Result<()> { |
|
|
|
let cli = Cli::parse(); |
|
|
|
let cli = Cli::parse(); |
|
|
|
match &cli.command { |
|
|
|
match &cli.command { |
|
|
@ -273,36 +273,24 @@ fn run_command() -> io::Result<()> { |
|
|
|
let mut mps = MPS::new(); |
|
|
|
let mut mps = MPS::new(); |
|
|
|
mps.list()?; |
|
|
|
mps.list()?; |
|
|
|
} |
|
|
|
} |
|
|
|
Some(Commands::Show(item)) => { |
|
|
|
Some(Commands::Show(args)) => { |
|
|
|
let mut mps = MPS::new(); |
|
|
|
let mut mps = MPS::new(); |
|
|
|
if let Some(id) = &item.id { |
|
|
|
let id = mps.item_id_by_item_id_args(args, true)?; |
|
|
|
mps.show(id)?; |
|
|
|
mps.show(&id)?; |
|
|
|
} |
|
|
|
|
|
|
|
if let Some(number) = &item.number { |
|
|
|
|
|
|
|
mps.show_by_number(*number)?; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
Some(Commands::Add { id }) => { |
|
|
|
Some(Commands::Add { id }) => { |
|
|
|
let mut mps = MPS::new(); |
|
|
|
let mut mps = MPS::new(); |
|
|
|
mps.add(id)?; |
|
|
|
mps.add(id)?; |
|
|
|
} |
|
|
|
} |
|
|
|
Some(Commands::Edit(item)) => { |
|
|
|
Some(Commands::Edit(args)) => { |
|
|
|
let mut mps = MPS::new(); |
|
|
|
let mut mps = MPS::new(); |
|
|
|
if let Some(id) = &item.id { |
|
|
|
let id = mps.item_id_by_item_id_args(args, false)?; |
|
|
|
mps.edit(id)?; |
|
|
|
mps.edit(&id)?; |
|
|
|
} |
|
|
|
} |
|
|
|
if let Some(number) = &item.number { |
|
|
|
Some(Commands::Delete(args)) => { |
|
|
|
mps.edit_by_number(*number)?; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Some(Commands::Delete(item)) => { |
|
|
|
|
|
|
|
let mut mps = MPS::new(); |
|
|
|
let mut mps = MPS::new(); |
|
|
|
if let Some(id) = &item.id { |
|
|
|
let id = mps.item_id_by_item_id_args(args, true)?; |
|
|
|
mps.delete(id)? |
|
|
|
mps.delete(&id)?; |
|
|
|
} |
|
|
|
|
|
|
|
if let Some(number) = &item.number { |
|
|
|
|
|
|
|
mps.delete_by_number(*number)?; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
None => { |
|
|
|
None => { |
|
|
|
match Storage::check_installed() { |
|
|
|
match Storage::check_installed() { |
|
|
|