aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs32
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);
}
}