mirror of
https://github.com/soywod/himalaya.git
synced 2024-09-20 17:01:27 +00:00
add info log for copy/move/delete cmds
This commit is contained in:
parent
aaedfd36b8
commit
8e6740db65
|
@ -9,7 +9,7 @@ use crate::{
|
||||||
input,
|
input,
|
||||||
mbox::cli::mbox_target_arg,
|
mbox::cli::mbox_target_arg,
|
||||||
msg::model::{Attachments, Msg, Msgs, ReadableMsg},
|
msg::model::{Attachments, Msg, Msgs, ReadableMsg},
|
||||||
output::utils::print,
|
output::utils::{print, Info},
|
||||||
smtp,
|
smtp,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -437,6 +437,14 @@ pub fn msg_matches(matches: &ArgMatches) -> Result<()> {
|
||||||
flags.push(Flag::Seen);
|
flags.push(Flag::Seen);
|
||||||
imap_conn.append_msg(target, &msg.raw, &flags)?;
|
imap_conn.append_msg(target, &msg.raw, &flags)?;
|
||||||
imap_conn.logout();
|
imap_conn.logout();
|
||||||
|
|
||||||
|
print(
|
||||||
|
&output_fmt,
|
||||||
|
Info(format!(
|
||||||
|
"Message {} successfully copied to folder `{}`",
|
||||||
|
&uid, &target
|
||||||
|
)),
|
||||||
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,6 +458,14 @@ pub fn msg_matches(matches: &ArgMatches) -> Result<()> {
|
||||||
imap_conn.append_msg(target, &msg.raw, msg.flags.deref())?;
|
imap_conn.append_msg(target, &msg.raw, msg.flags.deref())?;
|
||||||
imap_conn.add_flags(mbox, uid, "\\Seen \\Deleted")?;
|
imap_conn.add_flags(mbox, uid, "\\Seen \\Deleted")?;
|
||||||
imap_conn.logout();
|
imap_conn.logout();
|
||||||
|
|
||||||
|
print(
|
||||||
|
&output_fmt,
|
||||||
|
Info(format!(
|
||||||
|
"Message {} successfully moved to folder `{}`",
|
||||||
|
&uid, &target
|
||||||
|
)),
|
||||||
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,6 +474,11 @@ pub fn msg_matches(matches: &ArgMatches) -> Result<()> {
|
||||||
let uid = matches.value_of("uid").unwrap();
|
let uid = matches.value_of("uid").unwrap();
|
||||||
imap_conn.add_flags(mbox, uid, "\\Seen \\Deleted")?;
|
imap_conn.add_flags(mbox, uid, "\\Seen \\Deleted")?;
|
||||||
imap_conn.logout();
|
imap_conn.logout();
|
||||||
|
|
||||||
|
print(
|
||||||
|
&output_fmt,
|
||||||
|
Info(format!("Message {} successfully deleted", &uid)),
|
||||||
|
)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,51 @@
|
||||||
use error_chain::error_chain;
|
use error_chain::error_chain;
|
||||||
use serde::Serialize;
|
use serde::{
|
||||||
use std::{fmt::Display, process::Command};
|
ser::{self, SerializeStruct},
|
||||||
|
Serialize,
|
||||||
|
};
|
||||||
|
use std::{fmt, process::Command, result};
|
||||||
|
|
||||||
error_chain! {}
|
error_chain! {
|
||||||
|
foreign_links {
|
||||||
|
Utf8(std::string::FromUtf8Error);
|
||||||
|
Io(std::io::Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Info(pub String);
|
||||||
|
|
||||||
|
impl fmt::Display for Info {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "{}", self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ser::Serialize for Info {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: ser::Serializer,
|
||||||
|
{
|
||||||
|
let mut state = serializer.serialize_struct("Info", 1)?;
|
||||||
|
state.serialize_field("info", &self.0)?;
|
||||||
|
state.end()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_cmd(cmd: &str) -> Result<String> {
|
pub fn run_cmd(cmd: &str) -> Result<String> {
|
||||||
let output = if cfg!(target_os = "windows") {
|
let output = if cfg!(target_os = "windows") {
|
||||||
Command::new("cmd").args(&["/C", cmd]).output()
|
Command::new("cmd").args(&["/C", cmd]).output()
|
||||||
} else {
|
} else {
|
||||||
Command::new("sh").arg("-c").arg(cmd).output()
|
Command::new("sh").arg("-c").arg(cmd).output()
|
||||||
}
|
}?;
|
||||||
.chain_err(|| "Run command failed")?;
|
|
||||||
|
|
||||||
Ok(String::from_utf8(output.stdout).chain_err(|| "Invalid utf8 output")?)
|
Ok(String::from_utf8(output.stdout)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print<T: Display + Serialize>(output_type: &str, item: T) -> Result<()> {
|
pub fn print<T: fmt::Display + Serialize>(output_type: &str, item: T) -> Result<()> {
|
||||||
match output_type {
|
match output_type {
|
||||||
"json" => print!(
|
"json" => print!(
|
||||||
"{}",
|
"{}",
|
||||||
serde_json::to_string(&item).chain_err(|| "Invalid JSON string")?
|
serde_json::to_string(&item).chain_err(|| "Could not decode JSON")?
|
||||||
),
|
),
|
||||||
"text" | _ => println!("{}", item.to_string()),
|
"text" | _ => println!("{}", item.to_string()),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue