Skip to content

Commit

Permalink
improve envelope list query error diagnostics
Browse files Browse the repository at this point in the history
  • Loading branch information
soywod committed Feb 29, 2024
1 parent 1e7adc5 commit 46bf3ee
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 27 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed

- Fixed watch IMAP envelopes when folder was empty [#179].

### Changed

- Changed the `envelope list` options:
Expand Down
5 changes: 2 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,4 @@ version = "0.1"

[patch.crates-io]
email-lib = { git = "https://git.sr.ht/~soywod/pimalaya" }
chumsky = { git = "https://github.com/zesterer/chumsky.git", rev = "6837537" }
54 changes: 30 additions & 24 deletions src/email/envelope/command/list.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
use anyhow::Result;
use ariadne::{Color, Label, Report, ReportKind, Source};
use clap::Parser;
use email::{backend::feature::BackendFeatureSource, envelope::list::ListEnvelopesOptions};
use email::{
backend::feature::BackendFeatureSource, envelope::list::ListEnvelopesOptions,
search_query::SearchEmailsQuery,
};
use log::info;
use std::process::exit;

#[cfg(feature = "account-sync")]
use crate::cache::arg::disable::CacheDisableFlag;
Expand Down Expand Up @@ -95,35 +99,37 @@ impl ListEnvelopesCommand {
)
.await?;

let filter = match self.query.map(|filter| filter.join(" ").parse()) {
Some(Ok(filter)) => Some(filter),
Some(Err(err)) => {
if let email::envelope::list::Error::ParseFilterError(errs, query) = &err {
errs.into_iter().for_each(|e| {
Report::build(ReportKind::Error, "query", e.span().start)
.with_message(e.to_string())
.with_label(
Label::new(("query", e.span().into_range()))
.with_message(e.reason().to_string())
.with_color(Color::Red),
)
.finish()
.eprint(("query", Source::from(&query)))
.unwrap()
});
};

Err(err)?;
None
}
let query = self
.query
.map(|query| query.join(" ").parse::<SearchEmailsQuery>());

let query = match query {
None => None,
Some(Ok(query)) => Some(query),
Some(Err(main_err)) => {
let source = "query";
let email::search_query::Error::ParseError(errs, query) = &main_err;
for err in errs {
Report::build(ReportKind::Error, source, err.span().start)
.with_message(main_err.to_string())
.with_label(
Label::new((source, err.span().into_range()))
.with_message(err.reason().to_string())
.with_color(Color::Red),
)
.finish()
.eprint((source, Source::from(&query)))
.unwrap();
}

exit(0)
}
};

let opts = ListEnvelopesOptions {
page,
page_size,
filter,
sort: Default::default(),
query,
};

let envelopes = backend.list_envelopes(folder, opts).await?;
Expand Down

0 comments on commit 46bf3ee

Please sign in to comment.