diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-01-15 12:41:31 +0200 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2020-01-20 16:03:06 +0200 |
commit | 20f86f2741cb1d78c983b723cfc5f927846e7354 (patch) | |
tree | 38459f623c681807879778c68af026fa242d04dc /ui/src/components | |
parent | 0ac10aa4d08143b3b5728d1e0f4c5528219edd56 (diff) |
ui/listing: add mailbox reload rate limit
Diffstat (limited to 'ui/src/components')
-rw-r--r-- | ui/src/components/mail/listing.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/ui/src/components/mail/listing.rs b/ui/src/components/mail/listing.rs index 420211a7..67c38233 100644 --- a/ui/src/components/mail/listing.rs +++ b/ui/src/components/mail/listing.rs @@ -238,6 +238,7 @@ pub struct Listing { dirty: bool, visible: bool, cursor_pos: (usize, usize), + startup_checks_rate: RateLimit, id: ComponentId, show_divider: bool, @@ -358,6 +359,34 @@ impl Component for Listing { self.dirty = false; } fn process_event(&mut self, event: &mut UIEvent, context: &mut Context) -> bool { + match event { + UIEvent::StartupCheck(ref f) => { + if context.accounts[self.component.coordinates().0] + .folders_order + .get(self.component.coordinates().1) + .map(|&folder_hash| *f == folder_hash) + .unwrap_or(false) + { + if !self.startup_checks_rate.tick() { + return false; + } + } + } + UIEvent::Timer(n) if *n == self.startup_checks_rate.id() => { + if self.startup_checks_rate.active { + self.startup_checks_rate.reset(); + if let Some(folder_hash) = context.accounts[self.component.coordinates().0] + .folders_order + .get(self.component.coordinates().1) + { + return self + .process_event(&mut UIEvent::StartupCheck(*folder_hash), context); + } + } + } + _ => {} + } + if self.component.process_event(event, context) { return true; } @@ -811,6 +840,7 @@ impl Listing { visible: true, dirty: true, cursor_pos: (0, 0), + startup_checks_rate: RateLimit::new(2, 1000), id: ComponentId::new_v4(), show_divider: false, menu_visibility: true, |