diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-07-24 18:53:01 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-07-24 18:53:01 +0200 |
commit | 0a536702c830ba78dd3098c677db8da0ed93fd9f (patch) | |
tree | 4fb0d64b08275e9961e2d5d23d69516df4cfbfca | |
parent | 4f72c47b781fed4b7b33a06c6a6d712bdcd32684 (diff) |
Rewrite on_submit() impl to not use unwrap() but show errors
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/main_view.rs | 61 |
1 files 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"); |