ui: add event queue for folders in Account

embed
Manos Pitsidianakis 2019-05-26 02:41:29 +03:00
parent 7de075df49
commit 51c913d450
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 12 additions and 48 deletions

View File

@ -36,6 +36,7 @@ use melib::mailbox::backends::{
use melib::mailbox::*;
use melib::AddressBook;
use std::collections::VecDeque;
use std::fs;
use std::io;
use std::mem;
@ -74,6 +75,8 @@ pub struct Account {
pub(crate) settings: AccountConf,
pub(crate) runtime_settings: AccountConf,
pub(crate) backend: Box<dyn MailBackend>,
event_queue: VecDeque<(FolderHash, RefreshEvent)>,
notify_fn: Arc<NotifyFn>,
}
@ -250,6 +253,8 @@ impl Account {
runtime_settings: settings,
backend,
notify_fn,
event_queue: VecDeque::with_capacity(8),
}
}
fn new_worker(
@ -274,6 +279,13 @@ impl Account {
})))
}
pub fn reload(&mut self, event: RefreshEvent, folder_hash: FolderHash) -> Option<UIEvent> {
if self.folders[&folder_hash].is_none()
|| self.folders[&folder_hash].as_ref().unwrap().is_err()
{
self.event_queue.push_back((folder_hash, event));
return None;
}
let kind = event.kind();
{
//let mailbox: &mut Mailbox = self.folders[idx].as_mut().unwrap().as_mut().unwrap();
@ -384,56 +396,8 @@ impl Account {
fn load_mailbox(&mut self, folder_hash: FolderHash, mailbox: Result<Mailbox>) {
self.folders.insert(folder_hash, Some(mailbox));
/*
if self.sent_folder.is_some() && self.sent_folder.unwrap() == index {
self.folders[index] = Some(mailbox);
/* Add our replies to other folders */
for id in (0..self.folders.len()).filter(|i| *i != index) {
self.add_replies_to_folder(id);
}
} else {
self.folders[index] = Some(mailbox);
self.add_replies_to_folder(index);
};
*/
}
/*
fn add_replies_to_folder(&mut self, folder_index: usize) {
if let Some(sent_index) = self.sent_folder.as_ref() {
if self.folders[*sent_index]
.as_ref()
.map(|v| v.is_ok())
.unwrap_or(false)
&& self.folders[folder_index]
.as_ref()
.map(|v| v.is_ok())
.unwrap_or(false)
{
let (sent, cur) = {
let ptr = self.folders.as_mut_ptr();
unsafe {
use std::slice::from_raw_parts_mut;
(
from_raw_parts_mut(ptr.offset(*sent_index as isize), *sent_index + 1)
[0].as_mut()
.unwrap()
.as_mut()
.unwrap(),
from_raw_parts_mut(ptr.offset(folder_index as isize), folder_index + 1)
[0].as_mut()
.unwrap()
.as_mut()
.unwrap(),
)
}
};
cur.insert_sent_folder(&sent);
}
}
}
*/
pub fn status(&mut self, folder_hash: FolderHash) -> result::Result<(), usize> {
match self.workers.get_mut(&folder_hash).unwrap() {
None => {