melib/maildir: send NewFlags events

memfd
Manos Pitsidianakis 2020-07-26 01:13:00 +03:00
parent 031e81ac8f
commit cc119c19b0
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 24 additions and 6 deletions

View File

@ -362,6 +362,7 @@ impl MailBackend for MaildirType {
debug!("watching {:?}", root_path); debug!("watching {:?}", root_path);
let hash_indexes = self.hash_indexes.clone(); let hash_indexes = self.hash_indexes.clone();
let mailbox_index = self.mailbox_index.clone(); let mailbox_index = self.mailbox_index.clone();
let root_mailbox_hash: MailboxHash = self.mailboxes.values().find(|m| m.parent.is_none()).map(|m| m.hash()).unwrap();
let mailbox_counts = self let mailbox_counts = self
.mailboxes .mailboxes
.iter() .iter()
@ -561,10 +562,10 @@ impl MailBackend for MaildirType {
let mut hash_indexes_lock = hash_indexes.lock().unwrap(); let mut hash_indexes_lock = hash_indexes.lock().unwrap();
let index_lock = hash_indexes_lock.entry(mailbox_hash).or_default(); let index_lock = hash_indexes_lock.entry(mailbox_hash).or_default();
// TODO: Represent index states with an enum: make illegal let old_flags = src.flags();
// states unrepresentable. let new_flags = dest.flags();
let was_seen: bool = src.flags().contains(Flag::SEEN); let was_seen: bool = old_flags.contains(Flag::SEEN);
let is_seen: bool = dest.flags().contains(Flag::SEEN); let is_seen: bool = new_flags.contains(Flag::SEEN);
if index_lock.contains_key(&old_hash) if index_lock.contains_key(&old_hash)
&& !index_lock[&old_hash].removed && !index_lock[&old_hash].removed
@ -585,6 +586,13 @@ impl MailBackend for MaildirType {
} else if was_seen && !is_seen { } else if was_seen && !is_seen {
*mailbox_counts[&mailbox_hash].0.lock().unwrap() += 1; *mailbox_counts[&mailbox_hash].0.lock().unwrap() += 1;
} }
if old_flags != new_flags {
sender.send(RefreshEvent {
account_hash,
mailbox_hash: get_path_hash!(dest),
kind: NewFlags(new_hash, (new_flags, vec![])),
});
}
mailbox_index.lock().unwrap().insert(new_hash,get_path_hash!(dest) ); mailbox_index.lock().unwrap().insert(new_hash,get_path_hash!(dest) );
index_lock.insert(new_hash, dest.into()); index_lock.insert(new_hash, dest.into());
continue; continue;
@ -651,6 +659,13 @@ impl MailBackend for MaildirType {
kind: Rename(old_hash, new_hash), kind: Rename(old_hash, new_hash),
}); });
debug!("contains_new_key"); debug!("contains_new_key");
if old_flags != new_flags {
sender.send(RefreshEvent {
account_hash,
mailbox_hash: get_path_hash!(dest),
kind: NewFlags(new_hash, (new_flags, vec![])),
});
}
} }
/* Maybe a re-read should be triggered here just to be safe. /* Maybe a re-read should be triggered here just to be safe.
@ -663,8 +678,11 @@ impl MailBackend for MaildirType {
} }
/* Trigger rescan of mailbox */ /* Trigger rescan of mailbox */
DebouncedEvent::Rescan => { DebouncedEvent::Rescan => {
/* Actually should rescan all mailboxes */ sender.send(RefreshEvent {
unreachable!("Unimplemented: rescan of all mailboxes in MaildirType") account_hash,
mailbox_hash: root_mailbox_hash,
kind: Rescan,
});
} }
_ => {} _ => {}
}, },