diff --git a/src/app.rs b/src/app.rs index 6df47ab..baea0a2 100755 --- a/src/app.rs +++ b/src/app.rs @@ -35,6 +35,11 @@ pub struct App { // Determines if the database should be updated or not pub should_update_song_list: bool, + + // States + pub queue_state: TableState, + pub browser_state: TableState, + pub playlists_state: ListState, } #[derive(Debug, PartialEq, Clone)] @@ -58,6 +63,10 @@ impl App { let browser = FileBrowser::new(); + let queue_state = TableState::new(); + let browser_state = TableState::new(); + let playlists_state = ListState::default(); + Ok(Self { running: true, conn, @@ -73,6 +82,9 @@ impl App { playlist_popup: false, append_list, should_update_song_list: false, + queue_state, + browser_state, + playlists_state, }) } diff --git a/src/ui.rs b/src/ui.rs index 973d021..f565f63 100755 --- a/src/ui.rs +++ b/src/ui.rs @@ -101,7 +101,6 @@ fn draw_directory_browser(frame: &mut Frame, app: &mut App, size: Rect) { } }); - let mut state = TableState::new(); let header = ["Artist", "Track", "Title", "Album", "Time"] .into_iter() .map(Cell::from) @@ -140,8 +139,8 @@ fn draw_directory_browser(frame: &mut Frame, app: &mut App, size: Rect) { .header(header) .flex(layout::Flex::Legacy); - state.select(Some(app.browser.selected)); - frame.render_stateful_widget(table, size, &mut state); + app.browser_state.select(Some(app.browser.selected)); + frame.render_stateful_widget(table, size, &mut app.browser_state); } /// draws playing queue @@ -196,7 +195,6 @@ fn draw_queue(frame: &mut Frame, app: &mut App, size: Rect) { } }); - let mut state = TableState::new(); let header = ["Artist", "Track", "Title", "Album", "Time"] .into_iter() .map(Cell::from) @@ -234,8 +232,8 @@ fn draw_queue(frame: &mut Frame, app: &mut App, size: Rect) { .header(header) .flex(layout::Flex::Legacy); - state.select(Some(app.queue_list.index)); - frame.render_stateful_widget(table, size, &mut state); + app.queue_state.select(Some(app.queue_list.index)); + frame.render_stateful_widget(table, size, &mut app.queue_state); } // Draw search bar @@ -336,7 +334,6 @@ fn draw_playlist_viewer(frame: &mut Frame, app: &mut App, area: Rect) { .split(area); // Draw list of playlists - let mut state = ListState::default(); let title = Block::default().title(Title::from("Playlist".green().bold())); let list = List::new(app.pl_list.list.clone()) .block(title.borders(Borders::ALL)) @@ -348,8 +345,8 @@ fn draw_playlist_viewer(frame: &mut Frame, app: &mut App, area: Rect) { .add_modifier(Modifier::REVERSED), ) .repeat_highlight_symbol(true); - state.select(Some(app.pl_list.index)); - frame.render_stateful_widget(list, layouts[0], &mut state); + app.playlists_state.select(Some(app.pl_list.index)); + frame.render_stateful_widget(list, layouts[0], &mut app.playlists_state); // Playlist viewer diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..390c3a2 --- /dev/null +++ b/todo.md @@ -0,0 +1,2 @@ +- [ ] create new playlist +- [ ] add to new playlist