Krolyxon
Commit 044101b

rmptuisrcapp.rs

76 lines · 2.0 KB · Rust

1use crate::connection::Connection;
2use crate::list::ContentList;
3use mpd::Client;
4use std::collections::VecDeque;
5
6// Application result type
7pub type AppResult<T> = std::result::Result<T, Box<dyn std::error::Error>>;
8
9/// Application
10#[derive(Debug)]
11pub struct App {
12 /// check if app is running
13 pub running: bool,
14 pub conn: Connection,
15 pub song_list: ContentList<String>,
16 pub queue_list: ContentList<String>,
17 pub pl_list: ContentList<String>,
18}
19
20impl App {
21 pub fn builder(addrs: &str) -> AppResult<Self> {
22 let mut conn = Connection::new(addrs).unwrap();
23 let mut queue_list = ContentList::new();
24 let mut pl_list = ContentList::new();
25 pl_list.list = Self::get_playlist(&mut conn.conn)?;
26
27 Self::get_queue(&mut conn, &mut queue_list.list);
28
29 let mut song_list = ContentList::new();
30 song_list.list = conn.songs_filenames.clone();
31
32 Ok(Self {
33 running: true,
34 conn,
35 song_list,
36 queue_list,
37 pl_list,
38 })
39 }
40
41 pub fn tick(&self) {}
42
43 pub fn quit(&mut self) {
44 self.running = false;
45 }
46
47 pub fn get_queue(conn: &mut Connection, vec: &mut Vec<String>) {
48 conn.conn.queue().unwrap().into_iter().for_each(|x| {
49 if let Some(title) = x.title {
50 if let Some(artist) = x.artist {
51 vec.push(format!("{} - {}", artist, title));
52 } else {
53 vec.push(title)
54 }
55 } else {
56 vec.push(x.file)
57 }
58 });
59 }
60
61 pub fn update_queue(&mut self) {
62 self.queue_list.list.clear();
63 Self::get_queue(&mut self.conn, &mut self.queue_list.list);
64 }
65
66 pub fn get_playlist(conn: &mut Client) -> AppResult<Vec<String>> {
67 let list: Vec<String> = conn.playlists()?.iter().map(|p| p.clone().name).collect();
68
69 Ok(list)
70 }
71
72 pub fn update_playlist(&mut self) -> AppResult<()> {
73 Self::get_playlist(&mut self.conn.conn)?;
74 Ok(())
75 }
76}