mirror of
https://github.com/soywod/himalaya.git
synced 2024-09-05 18:41:11 +00:00
add list mailboxes cmd
This commit is contained in:
parent
d94b86ca4e
commit
187b886a1c
|
@ -14,10 +14,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Set up IMAP connection [#3]
|
- Set up IMAP connection [#3]
|
||||||
- List new emails [#6]
|
- List new emails [#6]
|
||||||
- Set up CLI arg parser [#15]
|
- Set up CLI arg parser [#15]
|
||||||
|
- List mailboxes command [#5]
|
||||||
|
|
||||||
[unreleased]: https://github.com/soywod/himalaya
|
[unreleased]: https://github.com/soywod/himalaya
|
||||||
|
|
||||||
[#1]: https://github.com/soywod/himalaya/issues/1
|
[#1]: https://github.com/soywod/himalaya/issues/1
|
||||||
[#2]: https://github.com/soywod/himalaya/issues/2
|
[#2]: https://github.com/soywod/himalaya/issues/2
|
||||||
[#3]: https://github.com/soywod/himalaya/issues/3
|
[#3]: https://github.com/soywod/himalaya/issues/3
|
||||||
|
[#5]: https://github.com/soywod/himalaya/issues/5
|
||||||
[#15]: https://github.com/soywod/himalaya/issues/15
|
[#15]: https://github.com/soywod/himalaya/issues/15
|
||||||
|
|
47
src/imap.rs
47
src/imap.rs
|
@ -147,5 +147,48 @@ pub fn read_emails(imap_sess: &mut ImapSession, mbox: &str, query: &str) -> imap
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// List mailboxes
|
pub fn list_mailboxes(imap_sess: &mut ImapSession) -> imap::Result<()> {
|
||||||
// let mboxes = imap_sess.list(Some(""), Some("*"))?;
|
let mboxes = imap_sess.list(Some(""), Some("*"))?;
|
||||||
|
|
||||||
|
let table_head = vec![
|
||||||
|
table::Cell::new(
|
||||||
|
vec![table::BOLD, table::UNDERLINE, table::WHITE],
|
||||||
|
String::from("DELIM"),
|
||||||
|
),
|
||||||
|
table::Cell::new(
|
||||||
|
vec![table::BOLD, table::UNDERLINE, table::WHITE],
|
||||||
|
String::from("NAME"),
|
||||||
|
),
|
||||||
|
table::Cell::new(
|
||||||
|
vec![table::BOLD, table::UNDERLINE, table::WHITE],
|
||||||
|
String::from("ATTRIBUTES"),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut table_rows = mboxes
|
||||||
|
.iter()
|
||||||
|
.map(|mbox| {
|
||||||
|
vec![
|
||||||
|
table::Cell::new(
|
||||||
|
vec![table::BLUE],
|
||||||
|
mbox.delimiter().unwrap_or("").to_string(),
|
||||||
|
),
|
||||||
|
table::Cell::new(vec![table::GREEN], mbox.name().to_string()),
|
||||||
|
table::Cell::new(
|
||||||
|
vec![table::YELLOW],
|
||||||
|
mbox.attributes()
|
||||||
|
.iter()
|
||||||
|
.map(|a| format!("{:?}", a))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(", "),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
table_rows.insert(0, table_head);
|
||||||
|
|
||||||
|
println!("{}", table::render(table_rows));
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
42
src/main.rs
42
src/main.rs
|
@ -26,12 +26,6 @@ fn main() {
|
||||||
.version("0.1.0")
|
.version("0.1.0")
|
||||||
.about("📫 Minimalist CLI email client")
|
.about("📫 Minimalist CLI email client")
|
||||||
.author("soywod <clement.douin@posteo.net>")
|
.author("soywod <clement.douin@posteo.net>")
|
||||||
.subcommand(
|
|
||||||
SubCommand::with_name("read")
|
|
||||||
.about("Reads an email by its UID")
|
|
||||||
.arg(mailbox_arg())
|
|
||||||
.arg(uid_arg()),
|
|
||||||
)
|
|
||||||
.subcommand(
|
.subcommand(
|
||||||
SubCommand::with_name("query")
|
SubCommand::with_name("query")
|
||||||
.about("Prints emails filtered by the given IMAP query")
|
.about("Prints emails filtered by the given IMAP query")
|
||||||
|
@ -44,6 +38,13 @@ fn main() {
|
||||||
.required(true),
|
.required(true),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
.subcommand(SubCommand::with_name("list").about("Lists all available mailboxes"))
|
||||||
|
.subcommand(
|
||||||
|
SubCommand::with_name("read")
|
||||||
|
.about("Reads an email by its UID")
|
||||||
|
.arg(mailbox_arg())
|
||||||
|
.arg(uid_arg()),
|
||||||
|
)
|
||||||
.subcommand(SubCommand::with_name("write").about("Writes a new email"))
|
.subcommand(SubCommand::with_name("write").about("Writes a new email"))
|
||||||
.subcommand(
|
.subcommand(
|
||||||
SubCommand::with_name("forward")
|
SubCommand::with_name("forward")
|
||||||
|
@ -71,15 +72,22 @@ fn main() {
|
||||||
if let Some(matches) = matches.values_of("query") {
|
if let Some(matches) = matches.values_of("query") {
|
||||||
let query = matches
|
let query = matches
|
||||||
.fold((false, vec![]), |(escape, mut cmds), cmd| {
|
.fold((false, vec![]), |(escape, mut cmds), cmd| {
|
||||||
if ["subject", "body", "text"].contains(&cmd.to_lowercase().as_str()) {
|
match (cmd, escape) {
|
||||||
cmds.push(cmd.to_string());
|
// Next command needs to be escaped
|
||||||
(true, cmds)
|
("subject", _) | ("body", _) | ("text", _) => {
|
||||||
} else if escape {
|
cmds.push(cmd.to_string());
|
||||||
cmds.push(format!("\"{}\"", cmd));
|
(true, cmds)
|
||||||
(false, cmds)
|
}
|
||||||
} else {
|
// Escaped commands
|
||||||
cmds.push(cmd.to_string());
|
(_, true) => {
|
||||||
(false, cmds)
|
cmds.push(format!("\"{}\"", cmd));
|
||||||
|
(false, cmds)
|
||||||
|
}
|
||||||
|
// Regular commands
|
||||||
|
(_, false) => {
|
||||||
|
cmds.push(cmd.to_string());
|
||||||
|
(false, cmds)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.1
|
.1
|
||||||
|
@ -88,4 +96,8 @@ fn main() {
|
||||||
imap::read_emails(&mut imap_sess, &mbox, &query).unwrap();
|
imap::read_emails(&mut imap_sess, &mbox, &query).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(_) = matches.subcommand_matches("list") {
|
||||||
|
imap::list_mailboxes(&mut imap_sess).unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue