summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2019-05-26 02:41:29 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2019-06-10 19:40:49 +0300
commit51c913d4500a28c36d1e9219d77d07075ba1ea75 (patch)
tree88800b3f9eeace1e52729da8aa4f76a5ea501eaf
parent7de075df49faca5018b1051b7ef15d75bdafa2b9 (diff)
ui: add event queue for folders in Account
-rw-r--r--ui/src/conf/accounts.rs60
1 files changed, 12 insertions, 48 deletions
diff --git a/ui/src/conf/accounts.rs b/ui/src/conf/accounts.rs
index 88b8f177..02e4e258 100644
--- a/ui/src/conf/accounts.rs
+++ b/ui/src/conf/accounts.rs
@@ -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,55 +396,7 @@ 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() {