| 1 | use ratatui::prelude::*; |
| 2 | use rmptui::app::App; |
| 3 | use rmptui::app::AppResult; |
| 4 | use rmptui::event::event::Event; |
| 5 | use rmptui::event::event::EventHandler; |
| 6 | use rmptui::event::handler; |
| 7 | use rmptui::tui; |
| 8 | use std::env; |
| 9 | use std::io; |
| 10 | |
| 11 | fn main() -> AppResult<()> { |
| 12 | // Connection |
| 13 | let env_host = env::var("MPD_HOST").unwrap_or_else(|_| "127.0.0.1".to_string()); |
| 14 | let env_port = env::var("MPD_PORT").unwrap_or_else(|_| "6600".to_string()); |
| 15 | let url = format!("{}:{}", env_host, env_port); |
| 16 | let mut app = App::builder(&url)?; |
| 17 | |
| 18 | // UI |
| 19 | let backend = CrosstermBackend::new(io::stderr()); |
| 20 | let terminal = Terminal::new(backend)?; |
| 21 | let events = EventHandler::new(1000); |
| 22 | let mut tui = tui::Tui::new(terminal, events); |
| 23 | tui.init()?; |
| 24 | |
| 25 | // initial directory read |
| 26 | app.browser.update_directory(&mut app.conn)?; |
| 27 | |
| 28 | // initially set the queue's highlighted item to the current playing item |
| 29 | if let Ok(item) = app.conn.conn.currentsong() { |
| 30 | app.queue_list.index = item.unwrap_or_default().place.unwrap_or_default().pos as usize; |
| 31 | } |
| 32 | |
| 33 | while app.running { |
| 34 | tui.draw(&mut app)?; |
| 35 | match tui.events.next()? { |
| 36 | Event::Tick => app.tick(), |
| 37 | Event::Key(key_event) => handler::handle_key_events(key_event, &mut app)?, |
| 38 | Event::Mouse(_) => {} |
| 39 | Event::Resize(_, _) => {} |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | Ok(()) |
| 44 | } |