diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index 16db96823..4e5cac233 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -517,11 +517,11 @@ impl MailBackend for ImapType { Ok(()) } - fn as_any(&self) -> &dyn::std::any::Any { + fn as_any(&self) -> &dyn ::std::any::Any { self } - fn as_any_mut(&mut self) -> &mut dyn::std::any::Any { + fn as_any_mut(&mut self) -> &mut dyn ::std::any::Any { self } diff --git a/melib/src/backends/maildir/backend.rs b/melib/src/backends/maildir/backend.rs index 9dd0f06ed..23a975e98 100644 --- a/melib/src/backends/maildir/backend.rs +++ b/melib/src/backends/maildir/backend.rs @@ -34,10 +34,10 @@ extern crate notify; use self::notify::{watcher, DebouncedEvent, RecursiveMode, Watcher}; use std::time::Duration; -use std::collections::{HashMap, HashSet, hash_map::DefaultHasher}; +use std::collections::{hash_map::DefaultHasher, HashMap, HashSet}; use std::ffi::OsStr; use std::fs; -use std::hash::{Hasher, Hash}; +use std::hash::{Hash, Hasher}; use std::io::{self, Read, Write}; use std::ops::{Deref, DerefMut}; use std::os::unix::fs::PermissionsExt; diff --git a/melib/src/backends/mbox.rs b/melib/src/backends/mbox.rs index 4a4e5a2f8..659e3d485 100644 --- a/melib/src/backends/mbox.rs +++ b/melib/src/backends/mbox.rs @@ -618,7 +618,7 @@ impl MailBackend for MboxType { Err(MeliError::new("Unimplemented.")) } - fn as_any(&self) -> &dyn::std::any::Any { + fn as_any(&self) -> &dyn ::std::any::Any { self } } diff --git a/melib/src/backends/notmuch.rs b/melib/src/backends/notmuch.rs index b75a2c6dc..7326583b2 100644 --- a/melib/src/backends/notmuch.rs +++ b/melib/src/backends/notmuch.rs @@ -621,7 +621,7 @@ impl MailBackend for NotmuchDb { crate::backends::MaildirType::save_to_mailbox(path, bytes, flags) } - fn as_any(&self) -> &dyn::std::any::Any { + fn as_any(&self) -> &dyn ::std::any::Any { self } diff --git a/src/sqlite3.rs b/src/sqlite3.rs index cad5bcb78..6eec88844 100644 --- a/src/sqlite3.rs +++ b/src/sqlite3.rs @@ -21,9 +21,11 @@ /*! Use an sqlite3 database for fast searching. */ -use smallvec::SmallVec; -use melib::search::{escape_double_quote, query, Query::{self, *}}; use crate::melib::parsec::Parser; +use melib::search::{ + escape_double_quote, query, + Query::{self, *}, +}; use melib::{ backends::MailBackend, email::{Envelope, EnvelopeHash}, @@ -32,8 +34,9 @@ use melib::{ MeliError, Result, ERROR, }; use rusqlite::{params, Connection}; -use std::path::PathBuf; +use smallvec::SmallVec; use std::convert::TryInto; +use std::path::PathBuf; use std::sync::{Arc, RwLock}; pub fn db_path() -> Result { @@ -70,7 +73,9 @@ pub fn db_path() -> Result { pub fn open_db() -> Result { let db_path = db_path()?; if !db_path.exists() { - return Err(MeliError::new("Database hasn't been initialised. Run `reindex` command")); + return Err(MeliError::new( + "Database hasn't been initialised. Run `reindex` command", + )); } Connection::open(&db_path).map_err(|e| MeliError::new(e.to_string())) } @@ -166,7 +171,11 @@ END; ", Ok(conn) } -pub fn insert(envelope: &Envelope, backend: &Arc>>, acc_name: &str) -> Result<()> { +pub fn insert( + envelope: &Envelope, + backend: &Arc>>, + acc_name: &str, +) -> Result<()> { let conn = open_db()?; let backend_lck = backend.read().unwrap(); let op = backend_lck.operation(envelope.hash()); @@ -193,7 +202,10 @@ pub fn insert(envelope: &Envelope, backend: &Arc>>, } }; - if let Err(err) = conn.execute("INSERT OR IGNORE INTO accounts (name) VALUES (?1)", params![acc_name, ]) { + if let Err(err) = conn.execute( + "INSERT OR IGNORE INTO accounts (name) VALUES (?1)", + params![acc_name,], + ) { debug!( "Failed to insert envelope {}: {}", envelope.message_id_display(), @@ -210,8 +222,15 @@ pub fn insert(envelope: &Envelope, backend: &Arc>>, return Err(MeliError::new(err.to_string())); } let account_id: i32 = { - let mut stmt = conn.prepare("SELECT id FROM accounts WHERE name = ?").unwrap(); - let x = stmt.query_map(params![acc_name], |row| row.get(0)).unwrap().next().unwrap().unwrap(); + let mut stmt = conn + .prepare("SELECT id FROM accounts WHERE name = ?") + .unwrap(); + let x = stmt + .query_map(params![acc_name], |row| row.get(0)) + .unwrap() + .next() + .unwrap() + .unwrap(); x }; if let Err(err) = conn.execute( @@ -239,46 +258,66 @@ pub fn insert(envelope: &Envelope, backend: &Arc>>, pub fn remove(env_hash: EnvelopeHash) -> Result<()> { let conn = open_db()?; - if let Err(err) = conn.execute( - "DELETE FROM envelopes WHERE hash = ?", - params![env_hash.to_be_bytes().to_vec(), ]) - .map_err(|e| MeliError::new(e.to_string())) { - debug!( + if let Err(err) = conn + .execute( + "DELETE FROM envelopes WHERE hash = ?", + params![env_hash.to_be_bytes().to_vec(),], + ) + .map_err(|e| MeliError::new(e.to_string())) + { + debug!( + "Failed to remove envelope {}: {}", + env_hash, + err.to_string() + ); + log( + format!( "Failed to remove envelope {}: {}", env_hash, err.to_string() - ); - log( - format!( - "Failed to remove envelope {}: {}", - env_hash, - err.to_string() - ), - ERROR, - ); - return Err(err); + ), + ERROR, + ); + return Err(err); } Ok(()) } pub fn index(context: &mut crate::state::Context, account_name: &str) -> Result<()> { - let account = if let Some(a) = context.accounts.iter().find(|acc| acc.name() == account_name) { - a} else { - return Err(MeliError::new(format!("Account {} was not found.", account_name))); + let account = if let Some(a) = context + .accounts + .iter() + .find(|acc| acc.name() == account_name) + { + a + } else { + return Err(MeliError::new(format!( + "Account {} was not found.", + account_name + ))); }; - let (acc_name, acc_mutex, backend_mutex):( String, Arc>, Arc<_>) = if *account.settings.conf.cache_type() != crate::conf::CacheType::Sqlite3 { - return Err(MeliError::new(format!("Account {} doesn't have an sqlite3 search backend.", account_name))); - } else { + let (acc_name, acc_mutex, backend_mutex): (String, Arc>, Arc<_>) = + if *account.settings.conf.cache_type() != crate::conf::CacheType::Sqlite3 { + return Err(MeliError::new(format!( + "Account {} doesn't have an sqlite3 search backend.", + account_name + ))); + } else { ( account.name().to_string(), account.collection.envelopes.clone(), account.backend.clone(), - )}; + ) + }; let conn = open_or_create_db()?; let work_context = context.work_controller().get_context(); - let env_hashes = - acc_mutex.read().unwrap().keys().cloned().collect::>(); + let env_hashes = acc_mutex + .read() + .unwrap() + .keys() + .cloned() + .collect::>(); /* Sleep, index and repeat in order not to block the main process */ let handle = std::thread::Builder::new().name(String::from("rebuilding index")).spawn(move || {