mirror of
https://github.com/chatmail/core.git
synced 2026-05-01 20:36:31 +03:00
Add more logging and improve errors around folder selection
This commit is contained in:
13
src/imap.rs
13
src/imap.rs
@@ -554,7 +554,10 @@ impl Imap {
|
|||||||
folder: &str,
|
folder: &str,
|
||||||
) -> Result<bool> {
|
) -> Result<bool> {
|
||||||
let session = self.session.as_mut().context("no session")?;
|
let session = self.session.as_mut().context("no session")?;
|
||||||
let newly_selected = session.select_or_create_folder(context, folder).await?;
|
let newly_selected = session
|
||||||
|
.select_or_create_folder(context, folder)
|
||||||
|
.await
|
||||||
|
.with_context(|| format!("failed to select or create folder {}", folder))?;
|
||||||
let mailbox = session
|
let mailbox = session
|
||||||
.selected_mailbox
|
.selected_mailbox
|
||||||
.as_mut()
|
.as_mut()
|
||||||
@@ -564,8 +567,12 @@ impl Imap {
|
|||||||
.uid_validity
|
.uid_validity
|
||||||
.with_context(|| format!("No UIDVALIDITY for folder {}", folder))?;
|
.with_context(|| format!("No UIDVALIDITY for folder {}", folder))?;
|
||||||
|
|
||||||
let old_uid_validity = get_uidvalidity(context, folder).await?;
|
let old_uid_validity = get_uidvalidity(context, folder)
|
||||||
let old_uid_next = get_uid_next(context, folder).await?;
|
.await
|
||||||
|
.with_context(|| format!("failed to get old UID validity for folder {}", folder))?;
|
||||||
|
let old_uid_next = get_uid_next(context, folder)
|
||||||
|
.await
|
||||||
|
.with_context(|| format!("failed to get old UID NEXT for folder {}", folder))?;
|
||||||
|
|
||||||
if new_uid_validity == old_uid_validity {
|
if new_uid_validity == old_uid_validity {
|
||||||
let new_emails = if newly_selected == NewlySelected::No {
|
let new_emails = if newly_selected == NewlySelected::No {
|
||||||
|
|||||||
@@ -109,13 +109,14 @@ impl ImapSession {
|
|||||||
Ok(newly_selected) => Ok(newly_selected),
|
Ok(newly_selected) => Ok(newly_selected),
|
||||||
Err(err) => match err {
|
Err(err) => match err {
|
||||||
Error::NoFolder(..) => {
|
Error::NoFolder(..) => {
|
||||||
|
info!(context, "Failed to select folder {} because it does not exist, trying to create it.", folder);
|
||||||
self.create(folder).await.with_context(|| {
|
self.create(folder).await.with_context(|| {
|
||||||
format!("Couldn't select folder ('{}'), then create() failed", err)
|
format!("Couldn't select folder ('{}'), then create() failed", err)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
Ok(self.select_folder(context, Some(folder)).await?)
|
Ok(self.select_folder(context, Some(folder)).await.with_context(|| format!("failed to select newely created folder {}", folder))?)
|
||||||
}
|
}
|
||||||
_ => Err(err.into()),
|
_ => Err(err).with_context(|| format!("failed to select folder {} with error other than NO, not trying to create it", folder)),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user