ui/listings: Show errors when filtering

Errors were not shown properly because the data_columns grids were being
overwritten by redraw_list(). Call redraw_list() only if filtering was
succesful.
jmap
Manos Pitsidianakis 2019-11-05 16:39:46 +02:00
parent 78955e3199
commit 498f8e8e21
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
2 changed files with 16 additions and 18 deletions

View File

@ -350,9 +350,12 @@ impl ListingTrait for CompactListing {
return; return;
} }
self.order.clear();
self.selection.clear();
self.length = 0;
self.filtered_selection.clear(); self.filtered_selection.clear();
self.filtered_order.clear(); self.filtered_order.clear();
self.filter_term.clear(); self.filter_term = filter_term.to_string();
self.row_updates.clear(); self.row_updates.clear();
for v in self.selection.values_mut() { for v in self.selection.values_mut() {
*v = false; *v = false;
@ -360,7 +363,7 @@ impl ListingTrait for CompactListing {
let account = &context.accounts[self.cursor_pos.0]; let account = &context.accounts[self.cursor_pos.0];
let folder_hash = account[self.cursor_pos.1].unwrap().folder.hash(); let folder_hash = account[self.cursor_pos.1].unwrap().folder.hash();
match account.search(filter_term, self.sort, folder_hash) { match account.search(&self.filter_term, self.sort, folder_hash) {
Ok(results) => { Ok(results) => {
let threads = &account.collection.threads[&folder_hash]; let threads = &account.collection.threads[&folder_hash];
for env_hash in results { for env_hash in results {
@ -396,16 +399,17 @@ impl ListingTrait for CompactListing {
self.data_columns.columns[0] = self.data_columns.columns[0] =
CellBuffer::new_with_context(0, 0, Cell::with_char(' '), context); CellBuffer::new_with_context(0, 0, Cell::with_char(' '), context);
} }
self.redraw_list(context);
} }
Err(e) => { Err(e) => {
self.cursor_pos.2 = 0; self.cursor_pos.2 = 0;
self.new_cursor_pos.2 = 0; self.new_cursor_pos.2 = 0;
let message = format!( let message = format!(
"Encountered an error while searching for `{}`: {}.", "Encountered an error while searching for `{}`: {}.",
filter_term, e &self.filter_term, e
); );
log( log(
format!("Failed to search for term {}: {}", filter_term, e), format!("Failed to search for term {}: {}", &self.filter_term, e),
ERROR, ERROR,
); );
self.data_columns.columns[0] = self.data_columns.columns[0] =
@ -421,8 +425,6 @@ impl ListingTrait for CompactListing {
); );
} }
} }
self.filter_term = filter_term.to_string();
self.redraw_list(context);
} }
fn set_movement(&mut self, mvm: PageMovement) { fn set_movement(&mut self, mvm: PageMovement) {
@ -618,12 +620,6 @@ impl CompactListing {
self.order.insert(root_idx, idx); self.order.insert(root_idx, idx);
self.selection.insert(root_idx, false); self.selection.insert(root_idx, false);
} }
let CompactListing {
ref mut selection,
ref order,
..
} = self;
selection.retain(|e, _| order.contains_key(e));
min_width.0 = self.length.saturating_sub(1).to_string().len(); min_width.0 = self.length.saturating_sub(1).to_string().len();

View File

@ -341,9 +341,12 @@ impl ListingTrait for ConversationsListing {
return; return;
} }
self.order.clear();
self.selection.clear();
self.length = 0;
self.filtered_selection.clear(); self.filtered_selection.clear();
self.filtered_order.clear(); self.filtered_order.clear();
self.filter_term.clear(); self.filter_term = filter_term.to_string();
self.row_updates.clear(); self.row_updates.clear();
for v in self.selection.values_mut() { for v in self.selection.values_mut() {
*v = false; *v = false;
@ -351,7 +354,7 @@ impl ListingTrait for ConversationsListing {
let account = &context.accounts[self.cursor_pos.0]; let account = &context.accounts[self.cursor_pos.0];
let folder_hash = account[self.cursor_pos.1].unwrap().folder.hash(); let folder_hash = account[self.cursor_pos.1].unwrap().folder.hash();
match account.search(filter_term, self.sort, folder_hash) { match account.search(&self.filter_term, self.sort, folder_hash) {
Ok(results) => { Ok(results) => {
let threads = &account.collection.threads[&folder_hash]; let threads = &account.collection.threads[&folder_hash];
for env_hash in results { for env_hash in results {
@ -387,16 +390,17 @@ impl ListingTrait for ConversationsListing {
self.content = self.content =
CellBuffer::new_with_context(0, 0, Cell::with_char(' '), context); CellBuffer::new_with_context(0, 0, Cell::with_char(' '), context);
} }
self.redraw_list(context);
} }
Err(e) => { Err(e) => {
self.cursor_pos.2 = 0; self.cursor_pos.2 = 0;
self.new_cursor_pos.2 = 0; self.new_cursor_pos.2 = 0;
let message = format!( let message = format!(
"Encountered an error while searching for `{}`: {}.", "Encountered an error while searching for `{}`: {}.",
filter_term, e self.filter_term, e
); );
log( log(
format!("Failed to search for term {}: {}", filter_term, e), format!("Failed to search for term {}: {}", self.filter_term, e),
ERROR, ERROR,
); );
self.content = self.content =
@ -412,8 +416,6 @@ impl ListingTrait for ConversationsListing {
); );
} }
} }
self.filter_term = filter_term.to_string();
self.redraw_list(context);
} }
fn set_movement(&mut self, mvm: PageMovement) { fn set_movement(&mut self, mvm: PageMovement) {