SearchBackend: add Auto variant as default

jmap-eventsource
Manos Pitsidianakis 2020-09-18 21:38:50 +03:00
parent 7dfa6c0639
commit fba69d1e5d
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
3 changed files with 32 additions and 16 deletions

View File

@ -370,8 +370,12 @@ impl Component for AccountStatus {
a.settings.conf.search_backend(),
a.backend_capabilities.supports_search,
) {
(SearchBackend::None, true) => "backend-side search".to_string(),
(SearchBackend::None, false) => "none (search will be slow)".to_string(),
(SearchBackend::Auto, true) | (SearchBackend::None, true) => {
"backend-side search".to_string()
}
(SearchBackend::Auto, false) | (SearchBackend::None, false) => {
"none (search will be slow)".to_string()
}
#[cfg(feature = "sqlite3")]
(SearchBackend::Sqlite3, _) => {
if let Ok(path) = crate::sqlite3::db_path() {

View File

@ -621,23 +621,17 @@ impl Serialize for IndexStyle {
}
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum SearchBackend {
None,
Auto,
#[cfg(feature = "sqlite3")]
Sqlite3,
}
impl Default for SearchBackend {
fn default() -> Self {
#[cfg(feature = "sqlite3")]
{
SearchBackend::Sqlite3
}
#[cfg(not(feature = "sqlite3"))]
{
SearchBackend::None
}
SearchBackend::Auto
}
}
@ -649,8 +643,14 @@ impl<'de> Deserialize<'de> for SearchBackend {
let s = <String>::deserialize(deserializer)?;
match s.as_str() {
#[cfg(feature = "sqlite3")]
"sqlite3" => Ok(SearchBackend::Sqlite3),
"nothing" | "none" | "" => Ok(SearchBackend::None),
sqlite3 if sqlite3.eq_ignore_ascii_case("sqlite3") => Ok(SearchBackend::Sqlite3),
none if none.eq_ignore_ascii_case("none")
|| none.eq_ignore_ascii_case("nothing")
|| none.is_empty() =>
{
Ok(SearchBackend::None)
}
auto if auto.eq_ignore_ascii_case("auto") => Ok(SearchBackend::Auto),
_ => Err(de::Error::custom("invalid `search_backend` value")),
}
}
@ -665,6 +665,7 @@ impl Serialize for SearchBackend {
#[cfg(feature = "sqlite3")]
SearchBackend::Sqlite3 => serializer.serialize_str("sqlite3"),
SearchBackend::None => serializer.serialize_str("none"),
SearchBackend::Auto => serializer.serialize_str("auto"),
}
}
}

View File

@ -437,8 +437,19 @@ impl Account {
}
};
if ["imap", "jmap", "notmuch"].contains(&settings.account().format()) {
settings.conf.search_backend = crate::conf::SearchBackend::None;
if settings.conf.search_backend == crate::conf::SearchBackend::Auto {
if backend.capabilities().supports_search {
settings.conf.search_backend = crate::conf::SearchBackend::None;
} else {
#[cfg(feature = "sqlite3")]
{
settings.conf.search_backend = crate::conf::SearchBackend::Sqlite3;
}
#[cfg(not(feature = "sqlite3"))]
{
settings.conf.search_backend = crate::conf::SearchBackend::None;
}
}
}
let mut active_jobs = HashMap::default();
@ -1433,7 +1444,7 @@ impl Account {
match self.settings.conf.search_backend {
#[cfg(feature = "sqlite3")]
crate::conf::SearchBackend::Sqlite3 => crate::sqlite3::search(&query, _sort),
crate::conf::SearchBackend::None => {
crate::conf::SearchBackend::Auto | crate::conf::SearchBackend::None => {
if self.backend_capabilities.supports_search {
self.backend
.read()