summaryrefslogtreecommitdiffstats
path: root/src/main.rs
blob: 2eb311fe60aab1ee9eba96bdf3f3659388bcad69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#[macro_use] extern crate anyhow;
#[macro_use] extern crate log;

use std::path::PathBuf;
use anyhow::Result;
use cursive::CursiveExt;

mod mailstore;
mod sidebar;
mod main_view;
mod loader;

fn main() -> Result<()> {
    cursive::logger::init();

    let maildir_path = std::env::args()
        .skip(1)
        .next()
        .map(PathBuf::from)
        .ok_or_else(|| anyhow!("No path to maildir passed"))?;

    let pathes = walkdir::WalkDir::new(maildir_path.clone())
        .max_depth(1)
        .follow_links(false)
        .same_file_system(true)
        .into_iter()
        .filter_map(Result::ok)
        .filter(|de| de.file_type().is_dir())
        .map(|de| de.path().to_path_buf())
        .collect();

    let sidebar = sidebar::Sidebar::new(pathes);

    let mainview = main_view::MainView::new();

    let mut layout = cursive::views::LinearLayout::horizontal();
    layout.add_child(sidebar);
    layout.add_child(mainview);

    let mut siv = cursive::Cursive::default();
    siv.add_layer(layout);
    siv.add_global_callback('q', |s| s.quit());
    siv.add_global_callback('~', cursive::Cursive::toggle_debug_console);

    debug!("Starting cursive");
    siv.run();

    Ok(())
}