mirror of
https://github.com/chatmail/core.git
synced 2026-05-23 00:36:32 +03:00
fix: Create mvbox on setting mvbox_move
This commit is contained in:
@@ -10,7 +10,7 @@ use strum::{EnumProperty, IntoEnumIterator};
|
|||||||
use strum_macros::{AsRefStr, Display, EnumIter, EnumProperty, EnumString};
|
use strum_macros::{AsRefStr, Display, EnumIter, EnumProperty, EnumString};
|
||||||
|
|
||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
use crate::constants::DC_VERSION_STR;
|
use crate::constants::{self, DC_VERSION_STR};
|
||||||
use crate::contact::addr_cmp;
|
use crate::contact::addr_cmp;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
@@ -596,6 +596,12 @@ impl Context {
|
|||||||
.set_raw_config(key.as_ref(), value.map(|s| s.to_lowercase()).as_deref())
|
.set_raw_config(key.as_ref(), value.map(|s| s.to_lowercase()).as_deref())
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
Config::MvboxMove => {
|
||||||
|
self.sql.set_raw_config(key.as_ref(), value).await?;
|
||||||
|
self.sql
|
||||||
|
.set_raw_config(constants::DC_FOLDERS_CONFIGURED_KEY, None)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
self.sql.set_raw_config(key.as_ref(), value).await?;
|
self.sql.set_raw_config(key.as_ref(), value).await?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,6 +206,8 @@ pub(crate) const WORSE_AVATAR_SIZE: u32 = 128;
|
|||||||
pub const BALANCED_IMAGE_SIZE: u32 = 1280;
|
pub const BALANCED_IMAGE_SIZE: u32 = 1280;
|
||||||
pub const WORSE_IMAGE_SIZE: u32 = 640;
|
pub const WORSE_IMAGE_SIZE: u32 = 640;
|
||||||
|
|
||||||
|
// Key for the folder configuration version (see below).
|
||||||
|
pub(crate) const DC_FOLDERS_CONFIGURED_KEY: &str = "folders_configured";
|
||||||
// this value can be increased if the folder configuration is changed and must be redone on next program start
|
// this value can be increased if the folder configuration is changed and must be redone on next program start
|
||||||
pub(crate) const DC_FOLDERS_CONFIGURED_VERSION: i32 = 4;
|
pub(crate) const DC_FOLDERS_CONFIGURED_VERSION: i32 = 4;
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ use crate::aheader::EncryptPreference;
|
|||||||
use crate::chat::{get_chat_cnt, ChatId, ProtectionStatus};
|
use crate::chat::{get_chat_cnt, ChatId, ProtectionStatus};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{
|
use crate::constants::{
|
||||||
DC_BACKGROUND_FETCH_QUOTA_CHECK_RATELIMIT, DC_CHAT_ID_TRASH, DC_VERSION_STR,
|
self, DC_BACKGROUND_FETCH_QUOTA_CHECK_RATELIMIT, DC_CHAT_ID_TRASH, DC_VERSION_STR,
|
||||||
};
|
};
|
||||||
use crate::contact::Contact;
|
use crate::contact::Contact;
|
||||||
use crate::debug_logging::DebugLogging;
|
use crate::debug_logging::DebugLogging;
|
||||||
@@ -672,7 +672,7 @@ impl Context {
|
|||||||
let only_fetch_mvbox = self.get_config_int(Config::OnlyFetchMvbox).await?;
|
let only_fetch_mvbox = self.get_config_int(Config::OnlyFetchMvbox).await?;
|
||||||
let folders_configured = self
|
let folders_configured = self
|
||||||
.sql
|
.sql
|
||||||
.get_raw_config_int("folders_configured")
|
.get_raw_config_int(constants::DC_FOLDERS_CONFIGURED_KEY)
|
||||||
.await?
|
.await?
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
@@ -764,7 +764,10 @@ impl Context {
|
|||||||
res.insert("sentbox_watch", sentbox_watch.to_string());
|
res.insert("sentbox_watch", sentbox_watch.to_string());
|
||||||
res.insert("mvbox_move", mvbox_move.to_string());
|
res.insert("mvbox_move", mvbox_move.to_string());
|
||||||
res.insert("only_fetch_mvbox", only_fetch_mvbox.to_string());
|
res.insert("only_fetch_mvbox", only_fetch_mvbox.to_string());
|
||||||
res.insert("folders_configured", folders_configured.to_string());
|
res.insert(
|
||||||
|
constants::DC_FOLDERS_CONFIGURED_KEY,
|
||||||
|
folders_configured.to_string(),
|
||||||
|
);
|
||||||
res.insert("configured_inbox_folder", configured_inbox_folder);
|
res.insert("configured_inbox_folder", configured_inbox_folder);
|
||||||
res.insert("configured_sentbox_folder", configured_sentbox_folder);
|
res.insert("configured_sentbox_folder", configured_sentbox_folder);
|
||||||
res.insert("configured_mvbox_folder", configured_mvbox_folder);
|
res.insert("configured_mvbox_folder", configured_mvbox_folder);
|
||||||
|
|||||||
21
src/imap.rs
21
src/imap.rs
@@ -22,9 +22,7 @@ use tokio::sync::RwLock;
|
|||||||
|
|
||||||
use crate::chat::{self, ChatId, ChatIdBlocked};
|
use crate::chat::{self, ChatId, ChatIdBlocked};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::constants::{
|
use crate::constants::{self, Blocked, Chattype, ShowEmails, DC_FETCH_EXISTING_MSGS_COUNT};
|
||||||
Blocked, Chattype, ShowEmails, DC_FETCH_EXISTING_MSGS_COUNT, DC_FOLDERS_CONFIGURED_VERSION,
|
|
||||||
};
|
|
||||||
use crate::contact::{normalize_name, Contact, ContactAddress, ContactId, Modifier, Origin};
|
use crate::contact::{normalize_name, Contact, ContactAddress, ContactId, Modifier, Origin};
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
@@ -1767,11 +1765,17 @@ impl Imap {
|
|||||||
context: &Context,
|
context: &Context,
|
||||||
create_mvbox: bool,
|
create_mvbox: bool,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let folders_configured = context.sql.get_raw_config_int("folders_configured").await?;
|
let folders_configured = context
|
||||||
if folders_configured.unwrap_or_default() >= DC_FOLDERS_CONFIGURED_VERSION {
|
.sql
|
||||||
|
.get_raw_config_int(constants::DC_FOLDERS_CONFIGURED_KEY)
|
||||||
|
.await?;
|
||||||
|
if folders_configured.unwrap_or_default() >= constants::DC_FOLDERS_CONFIGURED_VERSION {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
if let Err(err) = self.connect(context).await {
|
||||||
|
self.connectivity.set_err(context, &err).await;
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
self.configure_folders(context, create_mvbox).await
|
self.configure_folders(context, create_mvbox).await
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1893,7 +1897,10 @@ impl Imap {
|
|||||||
}
|
}
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.set_raw_config_int("folders_configured", DC_FOLDERS_CONFIGURED_VERSION)
|
.set_raw_config_int(
|
||||||
|
constants::DC_FOLDERS_CONFIGURED_KEY,
|
||||||
|
constants::DC_FOLDERS_CONFIGURED_VERSION,
|
||||||
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
info!(context, "FINISHED configuring IMAP-folders.");
|
info!(context, "FINISHED configuring IMAP-folders.");
|
||||||
|
|||||||
@@ -521,6 +521,20 @@ pub async fn convert_folder_meaning(
|
|||||||
/// critical operation fails such as fetching new messages fails, connection is reset via
|
/// critical operation fails such as fetching new messages fails, connection is reset via
|
||||||
/// `trigger_reconnect`, so a fresh one can be opened.
|
/// `trigger_reconnect`, so a fresh one can be opened.
|
||||||
async fn fetch_idle(ctx: &Context, connection: &mut Imap, folder_meaning: FolderMeaning) {
|
async fn fetch_idle(ctx: &Context, connection: &mut Imap, folder_meaning: FolderMeaning) {
|
||||||
|
let create_mvbox = true;
|
||||||
|
if let Err(err) = connection
|
||||||
|
.ensure_configured_folders(ctx, create_mvbox)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
warn!(
|
||||||
|
ctx,
|
||||||
|
"Cannot watch {folder_meaning}, ensure_configured_folders() failed: {:#}", err,
|
||||||
|
);
|
||||||
|
connection
|
||||||
|
.fake_idle(ctx, None, FolderMeaning::Unknown)
|
||||||
|
.await;
|
||||||
|
return;
|
||||||
|
}
|
||||||
let (folder_config, watch_folder) = match convert_folder_meaning(ctx, folder_meaning).await {
|
let (folder_config, watch_folder) = match convert_folder_meaning(ctx, folder_meaning).await {
|
||||||
Ok(meaning) => meaning,
|
Ok(meaning) => meaning,
|
||||||
Err(error) => {
|
Err(error) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user