From 646e48a2089299677ae98fee8364af03957ec51a Mon Sep 17 00:00:00 2001 From: Thomas Eppers Date: Fri, 17 Feb 2023 19:26:24 +0100 Subject: [PATCH] created specific UiEvents; moved code from asnyc_tag_list to ui files --- src/ui/no_yaml_found.rs | 31 +++++++++++++++++-------------- src/ui/yaml_found.rs | 31 +++++++++++++++++-------------- src/widget/async_tag_list.rs | 25 +++---------------------- 3 files changed, 37 insertions(+), 50 deletions(-) diff --git a/src/ui/no_yaml_found.rs b/src/ui/no_yaml_found.rs index dbf44da..4d47000 100644 --- a/src/ui/no_yaml_found.rs +++ b/src/ui/no_yaml_found.rs @@ -50,7 +50,8 @@ impl std::iter::Iterator for State { pub enum UiEvent { NewRepo(String), - TagInput(termion::event::Key), + TagPrevious, + TagNext, Quit, } @@ -69,23 +70,25 @@ impl Ui { let mut ui = ui.lock().unwrap(); ui.tags = list; } - Ok(UiEvent::TagInput(key)) => { - let (fetch_new, mut tags) = { - let mut ui_data = ui.lock().unwrap(); - if (key == Key::Down || key == Key::Char('j')) - && ui_data.tags.at_end_of_list() - { - ui_data.info.set_text("Fetching more tags..."); - (true, ui_data.tags.clone()) + Ok(UiEvent::TagPrevious) => { + let mut ui = ui.lock().unwrap(); + ui.tags.previous(); + } + Ok(UiEvent::TagNext) => { + let (fetched_new_tags, mut tags) = { + let mut ui = ui.lock().unwrap(); + if ui.tags.at_end_of_list() { + ui.info.set_text("Fetching more tags..."); + (true, ui.tags.clone()) } else { - (false, ui_data.tags.clone()) + (false, ui.tags.clone()) } }; - tags.handle_input(key).await; + tags.next().await; let mut ui = ui.lock().unwrap(); ui.tags = tags; ui.details = ui.tags.create_detail_widget(); - if fetch_new { + if fetched_new_tags { ui.info.set_text("Fetching tags done"); } } @@ -178,11 +181,11 @@ impl Ui { ui_data.repo.handle_input(Key::Backspace); } Ok(Key::Up) | Ok(Key::Char('k')) if ui_data.state == State::SelectTag => { - sender.send(UiEvent::TagInput(Key::Up)).unwrap(); + sender.send(UiEvent::TagPrevious).unwrap(); ui_data.details = ui_data.tags.create_detail_widget(); } Ok(Key::Down) | Ok(Key::Char('j')) if ui_data.state == State::SelectTag => { - sender.send(UiEvent::TagInput(Key::Down)).unwrap(); + sender.send(UiEvent::TagNext).unwrap(); ui_data.details = ui_data.tags.create_detail_widget(); } Ok(Key::Char(key)) if ui_data.state == State::EditRepo => { diff --git a/src/ui/yaml_found.rs b/src/ui/yaml_found.rs index 1ad0b58..b467b39 100644 --- a/src/ui/yaml_found.rs +++ b/src/ui/yaml_found.rs @@ -56,7 +56,8 @@ impl std::iter::Iterator for State { pub enum UiEvent { NewRepo(String), - TagInput(termion::event::Key), + TagPrevious, + TagNext, Quit, } @@ -75,23 +76,25 @@ impl Ui { let mut ui = ui.lock().unwrap(); ui.tags = list; } - Ok(UiEvent::TagInput(key)) => { - let (fetch_new, mut tags) = { - let mut ui_data = ui.lock().unwrap(); - if (key == Key::Down || key == Key::Char('j')) - && ui_data.tags.at_end_of_list() - { - ui_data.info.set_text("Fetching more tags..."); - (true, ui_data.tags.clone()) + Ok(UiEvent::TagPrevious) => { + let mut ui = ui.lock().unwrap(); + ui.tags.previous(); + } + Ok(UiEvent::TagNext) => { + let (fetched_new_tags, mut tags) = { + let mut ui = ui.lock().unwrap(); + if ui.tags.at_end_of_list() { + ui.info.set_text("Fetching more tags..."); + (true, ui.tags.clone()) } else { - (false, ui_data.tags.clone()) + (false, ui.tags.clone()) } }; - tags.handle_input(key).await; + tags.next().await; let mut ui = ui.lock().unwrap(); ui.tags = tags; ui.details = ui.tags.create_detail_widget(); - if fetch_new { + if fetched_new_tags { ui.info.set_text("Fetching tags done"); } } @@ -255,10 +258,10 @@ impl Ui { } } Ok(Key::Up) | Ok(Key::Char('k')) if ui_data.state == State::SelectTag => { - sender.send(UiEvent::TagInput(Key::Up)).unwrap(); + sender.send(UiEvent::TagPrevious).unwrap(); } Ok(Key::Down) | Ok(Key::Char('j')) if ui_data.state == State::SelectTag => { - sender.send(UiEvent::TagInput(Key::Down)).unwrap(); + sender.send(UiEvent::TagNext).unwrap(); } Ok(Key::Char(key)) if ui_data.state == State::EditRepo => { ui_data.info.set_text("Editing Repository"); diff --git a/src/widget/async_tag_list.rs b/src/widget/async_tag_list.rs index a576c0d..bac4285 100644 --- a/src/widget/async_tag_list.rs +++ b/src/widget/async_tag_list.rs @@ -1,6 +1,5 @@ use std::fmt; -use termion::event::Key; use tui::style::{Color, Style}; use tui::widgets::{Block, Borders, List, ListState}; @@ -137,24 +136,6 @@ impl TagList { } } - pub async fn handle_input(&mut self, key: termion::event::Key) { - match key { - Key::Down => self.next().await, - Key::Up => self.previous(), - Key::Char('\n') => self.select().await, - _ => (), - } - } - - /// loads new tags when matching line is selected - async fn select(&mut self) { - if let Some(i) = self.state.selected() { - if let Line::NextPage(_) = &self.lines[i] { - self.load_next_page().await - } - } - } - pub fn get_selected(&mut self) -> Result { match self.state.selected() { None => Err(Error::NoneSelected), @@ -167,7 +148,7 @@ impl TagList { } /// load new tags from the next page - async fn load_next_page(&mut self) { + pub async fn load_next_page(&mut self) { match &self.tags { Some(tags) => match tags.next_page().await { None => (), @@ -200,7 +181,7 @@ impl TagList { } /// select next tag - async fn next(&mut self) { + pub async fn next(&mut self) { if let Some(Line::Status(_)) = self.lines.get(0) { return; } @@ -213,7 +194,7 @@ impl TagList { } /// select previous tag - fn previous(&mut self) { + pub fn previous(&mut self) { if let Some(Line::Status(_)) = self.lines.get(0) { return; }