mirror of
https://github.com/chatmail/core.git
synced 2026-04-20 23:16:30 +03:00
Better error reporting when creating a folder fails (#3325)
Fixes #3310
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
- support `source_code_url` from Webxdc manifests #3314
|
- support `source_code_url` from Webxdc manifests #3314
|
||||||
- support Webxdc document names and add `document` to `dc_msg_get_webxdc_info()` #3317
|
- support Webxdc document names and add `document` to `dc_msg_get_webxdc_info()` #3317
|
||||||
- improve chat encryption info, make it easier to find contacts without keys #3318
|
- improve chat encryption info, make it easier to find contacts without keys #3318
|
||||||
|
- improve error reporting when creating a folder fails #3325
|
||||||
|
|
||||||
### API-Changes
|
### API-Changes
|
||||||
- deprecate unused `marker1before` argument of `dc_get_chat_msgs`
|
- deprecate unused `marker1before` argument of `dc_get_chat_msgs`
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use super::Imap;
|
use super::Imap;
|
||||||
|
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
|
use anyhow::Context as _;
|
||||||
|
|
||||||
type Result<T> = std::result::Result<T, Error>;
|
type Result<T> = std::result::Result<T, Error>;
|
||||||
|
|
||||||
@@ -15,8 +16,8 @@ pub enum Error {
|
|||||||
#[error("IMAP Folder name invalid: {0}")]
|
#[error("IMAP Folder name invalid: {0}")]
|
||||||
BadFolderName(String),
|
BadFolderName(String),
|
||||||
|
|
||||||
#[error("IMAP folder does not exist: {0}")]
|
#[error("Got a NO response when trying to select {0}, usually this means that it doesn't exist: {1}")]
|
||||||
NoFolder(String),
|
NoFolder(String, String),
|
||||||
|
|
||||||
#[error("IMAP close/expunge failed")]
|
#[error("IMAP close/expunge failed")]
|
||||||
CloseExpungeFailed(#[from] async_imap::error::Error),
|
CloseExpungeFailed(#[from] async_imap::error::Error),
|
||||||
@@ -117,8 +118,8 @@ impl Imap {
|
|||||||
Err(async_imap::error::Error::Validate(_)) => {
|
Err(async_imap::error::Error::Validate(_)) => {
|
||||||
Err(Error::BadFolderName(folder.to_string()))
|
Err(Error::BadFolderName(folder.to_string()))
|
||||||
}
|
}
|
||||||
Err(async_imap::error::Error::No(_)) => {
|
Err(async_imap::error::Error::No(response)) => {
|
||||||
Err(Error::NoFolder(folder.to_string()))
|
Err(Error::NoFolder(folder.to_string(), response))
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
self.config.selected_folder = None;
|
self.config.selected_folder = None;
|
||||||
@@ -139,19 +140,19 @@ impl Imap {
|
|||||||
&mut self,
|
&mut self,
|
||||||
context: &Context,
|
context: &Context,
|
||||||
folder: &str,
|
folder: &str,
|
||||||
) -> Result<NewlySelected> {
|
) -> anyhow::Result<NewlySelected> {
|
||||||
match self.select_folder(context, Some(folder)).await {
|
match self.select_folder(context, Some(folder)).await {
|
||||||
Ok(newly_selected) => Ok(newly_selected),
|
Ok(newly_selected) => Ok(newly_selected),
|
||||||
Err(err) => match err {
|
Err(err) => match err {
|
||||||
Error::NoFolder(_) => {
|
Error::NoFolder(..) => {
|
||||||
if let Some(ref mut session) = self.session {
|
let session = self.session.as_mut().context("no IMAP session")?;
|
||||||
session.create(folder).await?;
|
session.create(folder).await.with_context(|| {
|
||||||
} else {
|
format!("Couldn't select folder ('{}'), then create() failed", err)
|
||||||
return Err(Error::NoSession);
|
})?;
|
||||||
}
|
|
||||||
self.select_folder(context, Some(folder)).await
|
Ok(self.select_folder(context, Some(folder)).await?)
|
||||||
}
|
}
|
||||||
_ => Err(err),
|
_ => Err(err.into()),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user