mirror of
https://github.com/figsoda/mmtc
synced 2025-02-16 21:38:38 +00:00
rewrite State::select and State::reselect
This commit is contained in:
parent
910bb229df
commit
89afb75493
2 changed files with 17 additions and 28 deletions
11
src/app.rs
11
src/app.rs
|
@ -89,12 +89,13 @@ pub enum Command {
|
|||
}
|
||||
|
||||
impl State {
|
||||
pub fn select(&mut self) {
|
||||
self.liststate.select(Some(self.selected));
|
||||
pub fn select(&mut self, x: usize) {
|
||||
self.selected = x;
|
||||
self.liststate.select(Some(x));
|
||||
}
|
||||
|
||||
pub fn reselect(&mut self) {
|
||||
self.selected = self.status.song.as_ref().map_or(0, |song| song.pos);
|
||||
self.select(self.status.song.as_ref().map_or(0, |song| song.pos));
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
|
@ -113,9 +114,8 @@ impl State {
|
|||
self.filtered.push(i);
|
||||
}
|
||||
}
|
||||
self.selected = 0;
|
||||
self.liststate.select(None);
|
||||
self.liststate.select(Some(0));
|
||||
self.select(0);
|
||||
}
|
||||
|
||||
pub fn quit_search(&mut self) {
|
||||
|
@ -123,7 +123,6 @@ impl State {
|
|||
if !self.query.is_empty() {
|
||||
self.query.clear();
|
||||
self.reselect();
|
||||
self.liststate.select(Some(self.selected));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
34
src/main.rs
34
src/main.rs
|
@ -92,7 +92,7 @@ async fn run() -> Result<()> {
|
|||
let status = cl.status().await?;
|
||||
let (queue, mut queue_strings) = idle_cl.queue(status.queue_len, &cfg.search_fields).await?;
|
||||
let mut s = State {
|
||||
selected: status.song.as_ref().map_or(0, |song| song.pos),
|
||||
selected: 0,
|
||||
status,
|
||||
queue,
|
||||
liststate: ListState::default(),
|
||||
|
@ -100,7 +100,7 @@ async fn run() -> Result<()> {
|
|||
query: String::with_capacity(32),
|
||||
filtered: Vec::new(),
|
||||
};
|
||||
s.select();
|
||||
s.reselect();
|
||||
|
||||
enable_raw_mode().context("Failed to enable raw mode")?;
|
||||
let mut stdout = stdout();
|
||||
|
@ -351,7 +351,6 @@ async fn run() -> Result<()> {
|
|||
}
|
||||
Command::Reselect => {
|
||||
s.reselect();
|
||||
s.select();
|
||||
0b001
|
||||
}
|
||||
Command::Down => {
|
||||
|
@ -360,14 +359,11 @@ async fn run() -> Result<()> {
|
|||
s.reselect();
|
||||
} else if s.selected == len - 1 {
|
||||
if cycle {
|
||||
s.selected = 0;
|
||||
} else {
|
||||
continue;
|
||||
s.select(0);
|
||||
}
|
||||
} else {
|
||||
s.selected += 1;
|
||||
s.select(s.selected + 1);
|
||||
}
|
||||
s.select();
|
||||
0b001
|
||||
}
|
||||
Command::Up => {
|
||||
|
@ -376,14 +372,11 @@ async fn run() -> Result<()> {
|
|||
s.reselect();
|
||||
} else if s.selected == 0 {
|
||||
if cycle {
|
||||
s.selected = len - 1;
|
||||
} else {
|
||||
continue;
|
||||
s.select(len - 1);
|
||||
}
|
||||
} else {
|
||||
s.selected -= 1;
|
||||
s.select(s.selected - 1);
|
||||
}
|
||||
s.select();
|
||||
0b001
|
||||
}
|
||||
Command::JumpDown => {
|
||||
|
@ -391,11 +384,10 @@ async fn run() -> Result<()> {
|
|||
if s.selected >= len {
|
||||
s.reselect();
|
||||
} else if cycle {
|
||||
s.selected = (s.selected + jump_lines) % len;
|
||||
s.select((s.selected + jump_lines) % len);
|
||||
} else {
|
||||
s.selected = min(s.selected + jump_lines, len - 1);
|
||||
s.select(min(s.selected + jump_lines, len - 1));
|
||||
};
|
||||
s.select();
|
||||
0b001
|
||||
}
|
||||
Command::JumpUp => {
|
||||
|
@ -407,12 +399,12 @@ async fn run() -> Result<()> {
|
|||
s.selected += len;
|
||||
}
|
||||
s.selected -= jump_lines;
|
||||
s.liststate.select(Some(s.selected));
|
||||
} else if s.selected < jump_lines {
|
||||
s.selected = 0;
|
||||
s.select(0);
|
||||
} else {
|
||||
s.selected -= jump_lines;
|
||||
s.select(s.selected - jump_lines);
|
||||
};
|
||||
s.select();
|
||||
0b001
|
||||
}
|
||||
Command::InputSearch(c) => {
|
||||
|
@ -432,7 +424,6 @@ async fn run() -> Result<()> {
|
|||
s.update_search(&queue_strings);
|
||||
} else if c.is_some() {
|
||||
s.reselect();
|
||||
s.select();
|
||||
}
|
||||
0b001
|
||||
}
|
||||
|
@ -464,9 +455,8 @@ async fn run() -> Result<()> {
|
|||
// conditionally update queue
|
||||
if updates & 0b010 == 0b010 {
|
||||
(s.queue, queue_strings) = cl.queue(s.status.queue_len, &cfg.search_fields).await?;
|
||||
s.reselect();
|
||||
s.liststate.select(None);
|
||||
s.select();
|
||||
s.reselect();
|
||||
if !s.query.is_empty() {
|
||||
s.update_search(&queue_strings);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue