From 388f0bb7d8877d16261d8e1fe2613a5c92ea6d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Mon, 26 Apr 2021 22:38:50 +0200 Subject: wip state --- src/main.rs | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index e4d4a4b..1aa4922 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,20 @@ use termion::input::TermRead; use termion::raw::IntoRawMode; use termion::screen::AlternateScreen; +struct ShowThreads<'d, 'q> { + threads: Vec>, +} + +impl<'d, 'q> ShowThreads<'d, 'q> { + fn tick(self) -> State<'d, 'q> { + State::ShowThreads(self) + } +} + +enum State<'d, 'q> { + ShowThreads(ShowThreads<'d, 'q>), +} + fn main() { let stdin = stdin(); let screen = AlternateScreen::from(stdout().into_raw_mode().unwrap()); @@ -20,18 +34,26 @@ fn main() { let query = db.create_query("tag:inbox").unwrap(); let threads = query.search_threads().unwrap().collect(); + let mut state = State::ShowThreads(ShowThreads { + threads + }); + let mut i: isize = 0; - show_threads(&mut screen, &threads, i as usize); + // show_threads(&mut screen, &threads, i as usize); for c in stdin.keys() { + // Global keybinds match c.unwrap() { - Key::Char('j') => i += 1, - Key::Char('k') => i -= 1, Key::Char('q') => break, _ => () } - i = i.rem_euclid(threads.len() as isize); - show_threads(&mut screen, &threads, i as usize); + + // Pass to current state + state = match state { + State::ShowThreads(s) => s.tick(), + }; + // i = i.rem_euclid(threads.len() as isize); + // show_threads(&mut screen, &threads, i as usize); } } -- cgit v1.2.1