fix some issues with list and redraw
This commit is contained in:
+26
-11
@@ -89,7 +89,12 @@ impl App {
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|s| {
|
.map(|s| {
|
||||||
let name = if s.name.len() > max_name_len {
|
let name = if s.name.len() > max_name_len {
|
||||||
format!("{}...", &s.name[..max_name_len.saturating_sub(3)])
|
let truncated: String = s
|
||||||
|
.name
|
||||||
|
.chars()
|
||||||
|
.take(max_name_len.saturating_sub(3))
|
||||||
|
.collect();
|
||||||
|
format!("{}...", truncated)
|
||||||
} else {
|
} else {
|
||||||
s.name.clone()
|
s.name.clone()
|
||||||
};
|
};
|
||||||
@@ -135,12 +140,14 @@ impl App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_events(&mut self) -> io::Result<()> {
|
async fn handle_events(&mut self) -> io::Result<()> {
|
||||||
match event::read()? {
|
if event::poll(std::time::Duration::from_millis(100))? {
|
||||||
Event::Key(key_event) if key_event.kind == KeyEventKind::Press => {
|
match event::read()? {
|
||||||
self.handle_key_event(key_event).await
|
Event::Key(key_event) if key_event.kind == KeyEventKind::Press => {
|
||||||
|
self.handle_key_event(key_event).await;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
_ => {}
|
}
|
||||||
};
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,19 +187,27 @@ impl App {
|
|||||||
KeyCode::Char('q') => self.exit().await,
|
KeyCode::Char('q') => self.exit().await,
|
||||||
KeyCode::Down | KeyCode::Char('j') => {
|
KeyCode::Down | KeyCode::Char('j') => {
|
||||||
if let Some(i) = self.station_list_state.selected() {
|
if let Some(i) = self.station_list_state.selected() {
|
||||||
let next = (i + 1).min(self.stations.len().saturating_sub(1));
|
if !self.filtered_stations.is_empty() {
|
||||||
self.station_list_state.select(Some(next));
|
let next = (i + 1) % self.filtered_stations.len();
|
||||||
|
self.station_list_state.select(Some(next));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KeyCode::Up | KeyCode::Char('k') => {
|
KeyCode::Up | KeyCode::Char('k') => {
|
||||||
if let Some(i) = self.station_list_state.selected() {
|
if let Some(i) = self.station_list_state.selected() {
|
||||||
let prev = i.saturating_sub(1);
|
if !self.filtered_stations.is_empty() {
|
||||||
self.station_list_state.select(Some(prev));
|
let prev = if i == 0 {
|
||||||
|
self.filtered_stations.len() - 1
|
||||||
|
} else {
|
||||||
|
i - 1
|
||||||
|
};
|
||||||
|
self.station_list_state.select(Some(prev));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
KeyCode::Enter => {
|
KeyCode::Enter => {
|
||||||
if let Some(i) = self.station_list_state.selected() {
|
if let Some(i) = self.station_list_state.selected() {
|
||||||
if let Some(station) = self.stations.get(i) {
|
if let Some(station) = self.filtered_stations.get(i) {
|
||||||
self.play_station(station.url.clone()).await;
|
self.play_station(station.url.clone()).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user