summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-07-24 18:53:01 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-07-24 18:53:01 +0200
commit0a536702c830ba78dd3098c677db8da0ed93fd9f (patch)
tree4fb0d64b08275e9961e2d5d23d69516df4cfbfca
parent4f72c47b781fed4b7b33a06c6a6d712bdcd32684 (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.rs61
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");