From 0a536702c830ba78dd3098c677db8da0ed93fd9f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 24 Jul 2020 18:53:01 +0200 Subject: Rewrite on_submit() impl to not use unwrap() but show errors Signed-off-by: Matthias Beyer --- src/main_view.rs | 61 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/src/main_view.rs b/src/main_view.rs index c406246..63e54f0 100644 --- a/src/main_view.rs +++ b/src/main_view.rs @@ -15,6 +15,7 @@ use cursive::views::EditView; use cursive::views::NamedView; use cursive::views::ResizedView; use cursive::views::TextView; +use cursive::traits::Resizable; use crate::configuration::Configuration; use crate::maillist_view::MaillistView; @@ -119,34 +120,40 @@ impl MainView { fn add_notmuch_query_layer(siv: &mut Cursive) { let edit_view = EditView::new() .on_submit(move |siv: &mut Cursive, query: &str| { - let database_path = siv.call_on_name(MAIN_VIEW_NAME, move |main_view: &mut MainView| { - main_view.config().notmuch_database_path().clone() - }); - - if let Some(database_path) = database_path { - let tab_name = format!("{}-view", query); - let tab = MaillistView::create_for(&database_path, query, query.to_string()) - .unwrap() // TODO: FIXME - .with_name(tab_name); - - let tab = ResizedView::new(cursive::view::SizeConstraint::Full, - cursive::view::SizeConstraint::Full, - tab); - - siv.call_on_name(MAIN_VIEW_NAME, move |main_view: &mut MainView| { - main_view.add_tab(query.to_string(), tab); + siv.call_on_name(MAIN_VIEW_NAME, move |main_view: &mut MainView| { + main_view.config().notmuch_database_path().clone() + }) + .map(|dbpath| { + use cursive::view::SizeConstraint as SC; + + let t = MaillistView::create_for(&dbpath, query, query.to_string())? + .full_screen() + .with_name(format!("{}-view", query)); + + siv.call_on_name(MAIN_VIEW_NAME, move |main_view: &mut MainView| { + main_view.add_tab(query.to_string(), t); + }); + + siv.pop_layer(); + Ok(()) + }) + .unwrap_or_else(|| { + siv.pop_layer(); + siv.add_layer({ + Dialog::around({ + TextView::new("Failed to get database connection set up") + }) + }); + Ok(()) + }) + .unwrap_or_else(|e: anyhow::Error| { + siv.pop_layer(); + siv.add_layer({ + Dialog::around({ + TextView::new(format!("{}", e.to_string())) + }) + }); }); - - siv.pop_layer(); - } else { - siv.pop_layer(); - siv.add_layer({ - Dialog::around({ - TextView::new("Failed to get database connection set up") - }) - }); - } - }) .with_name("query"); -- cgit v1.2.3