diff options
| -rw-r--r-- | src/main.rs | 32 |
1 files changed, 27 insertions, 5 deletions
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<Thread<'d, 'q>>, +} + +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); } } |
