Cleanup backend logic
parent
e503b0015a
commit
f2899b63d2
|
@ -36,13 +36,7 @@ fn main() {
|
||||||
ncurses::setlocale(locale_conf, "en_US.UTF-8");
|
ncurses::setlocale(locale_conf, "en_US.UTF-8");
|
||||||
let set = Settings::new();
|
let set = Settings::new();
|
||||||
let ui = ui::TUI::initialize();
|
let ui = ui::TUI::initialize();
|
||||||
let mut backends = Backends::new();
|
let backends = Backends::new();
|
||||||
backends
|
|
||||||
.register(
|
|
||||||
"maildir".to_string(),
|
|
||||||
Box::new(|| Box::new(MaildirType::new(""))),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let (sender, receiver): (SyncSender<ThreadEvent>, Receiver<ThreadEvent>) =
|
let (sender, receiver): (SyncSender<ThreadEvent>, Receiver<ThreadEvent>) =
|
||||||
sync_channel(::std::mem::size_of::<ThreadEvent>());
|
sync_channel(::std::mem::size_of::<ThreadEvent>());
|
||||||
|
|
|
@ -40,4 +40,3 @@ pub use mailbox::*;
|
||||||
pub use conf::*;
|
pub use conf::*;
|
||||||
|
|
||||||
pub use mailbox::backends::{RefreshEventConsumer, Backends};
|
pub use mailbox::backends::{RefreshEventConsumer, Backends};
|
||||||
pub use mailbox::backends::maildir::MaildirType;
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ impl Account {
|
||||||
for _ in 0..settings.folders.len() {
|
for _ in 0..settings.folders.len() {
|
||||||
folders.push(None);
|
folders.push(None);
|
||||||
}
|
}
|
||||||
let backend = backends.get(settings.get_format()).unwrap();
|
let backend = backends.get(settings.get_format());
|
||||||
Account {
|
Account {
|
||||||
name: name,
|
name: name,
|
||||||
folders: folders,
|
folders: folders,
|
||||||
|
|
|
@ -21,40 +21,40 @@
|
||||||
pub mod maildir;
|
pub mod maildir;
|
||||||
|
|
||||||
use mailbox::email::{Envelope, Flag};
|
use mailbox::email::{Envelope, Flag};
|
||||||
use error::{MeliError, Result};
|
use mailbox::backends::maildir::MaildirType;
|
||||||
|
use error::Result;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
|
|
||||||
extern crate fnv;
|
extern crate fnv;
|
||||||
use self::fnv::FnvHashMap;
|
use self::fnv::FnvHashMap;
|
||||||
use std;
|
use std;
|
||||||
|
|
||||||
|
/// A hashmap containing all available mail backends.
|
||||||
pub struct Backends {
|
pub struct Backends {
|
||||||
map: FnvHashMap<std::string::String, Box<Fn() -> Box<MailBackend>>>,
|
map: FnvHashMap<std::string::String, Box<Fn() -> Box<MailBackend>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Backends {
|
impl Backends {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Backends {
|
let mut b = Backends {
|
||||||
map: FnvHashMap::with_capacity_and_hasher(1, Default::default())
|
map: FnvHashMap::with_capacity_and_hasher(1, Default::default())
|
||||||
}
|
};
|
||||||
|
b.register("maildir".to_string(), Box::new(|| Box::new(MaildirType::new(""))));
|
||||||
|
b
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get(&self, key: &str) -> Result<Box<MailBackend>> {
|
pub fn get(&self, key: &str) -> Box<MailBackend> {
|
||||||
if !self.map.contains_key(key) {
|
if !self.map.contains_key(key) {
|
||||||
return Err(MeliError::new(
|
panic!("{} is not a valid mail backend", key);
|
||||||
format!("{} is not a valid mail backend", key),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
Ok(self.map[key]())
|
self.map[key]()
|
||||||
}
|
}
|
||||||
pub fn register(&mut self, key: String, backend: Box<Fn() -> Box<MailBackend>>) -> Result<()> {
|
pub fn register(&mut self, key: String, backend: Box<Fn() -> Box<MailBackend>>) -> () {
|
||||||
if self.map.contains_key(&key) {
|
if self.map.contains_key(&key) {
|
||||||
return Err(MeliError::new(
|
panic!("{} is an already registered backend", key);
|
||||||
format!("{} is an already registered backend", key),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
self.map.insert(key, backend);
|
self.map.insert(key, backend);
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue