diff --git a/ui/src/conf.rs b/ui/src/conf.rs index 79a7d9f8..5cde9eeb 100644 --- a/ui/src/conf.rs +++ b/ui/src/conf.rs @@ -166,6 +166,8 @@ pub struct FileAccount { read_only: bool, subscribed_folders: Vec, folders: Option>, + #[serde(default)] + cache_type: CacheType, } impl From for AccountConf { @@ -268,6 +270,10 @@ impl FileAccount { pub fn index_style(&self) -> IndexStyle { self.index_style } + + pub fn cache_type(&self) -> &CacheType { + &self.cache_type + } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] @@ -554,23 +560,50 @@ impl Serialize for IndexStyle { } } -#[derive(Debug)] -pub enum IndexCache { - Nothing, +#[derive(Debug, Clone, PartialEq)] +pub enum CacheType { + None, #[cfg(feature = "sqlite3")] Sqlite3, - Backend, } -impl Default for IndexCache { +impl Default for CacheType { fn default() -> Self { #[cfg(feature = "sqlite3")] { - IndexCache::Sqlite3 + CacheType::Sqlite3 } #[cfg(not(feature = "sqlite3"))] { - IndexCache::Nothing + CacheType::None + } + } +} + +impl<'de> Deserialize<'de> for CacheType { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + let s = ::deserialize(deserializer)?; + match s.as_str() { + #[cfg(feature = "sqlite3")] + "sqlite3" => Ok(CacheType::Sqlite3), + "nothing" | "none" | "" => Ok(CacheType::None), + _ => Err(de::Error::custom("invalid `index_cache` value")), + } + } +} + +impl Serialize for CacheType { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + match self { + #[cfg(feature = "sqlite3")] + CacheType::Sqlite3 => serializer.serialize_str("sqlite3"), + CacheType::None => serializer.serialize_str("none"), } } } diff --git a/ui/src/sqlite3.rs b/ui/src/sqlite3.rs index 87200868..67c9332a 100644 --- a/ui/src/sqlite3.rs +++ b/ui/src/sqlite3.rs @@ -198,7 +198,7 @@ pub fn index(context: &mut crate::state::Context) -> Result<()> { let mutexes = context .accounts .iter() - .filter(|acc| acc.settings.account().format() != "imap") + .filter(|acc| *acc.settings.conf.cache_type() == crate::conf::CacheType::Sqlite3) .map(|acc| (acc.collection.envelopes.clone(), acc.backend.clone())) .collect::>, Arc<_>)>>(); let env_hashes = mutexes