diff options
Diffstat (limited to 'src/player.rs')
-rw-r--r-- | src/player.rs | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/src/player.rs b/src/player.rs deleted file mode 100644 index 8dd3a51..0000000 --- a/src/player.rs +++ /dev/null @@ -1,97 +0,0 @@ -use std::collections::VecDeque; - -use tokio::{ - sync::{mpsc::Receiver, watch::Sender}, - task::{AbortHandle, JoinHandle, JoinSet}, -}; -use zbus::{names::OwnedBusName, Connection}; - -use crate::{ - components::Component, - dbus::player::{PlaybackStatus, PlayerProxy}, - printer::Status, - Result, -}; - -const BLACK: &str = "#1d2021"; -const YELLOW: &str = "#fabd2f"; -const CYAN: &str = "#8ec07c"; - -pub enum Command { - Shift, - Raise(String), -} - -#[derive(Debug)] -pub struct Player { - pub name: OwnedBusName, - pub handle: JoinHandle<Result<()>>, - pub tx: Sender<(u8, usize)>, -} - -#[derive(Debug, Clone)] -pub enum Event { - Add(OwnedBusName), - Remove(OwnedBusName), - Shift, -} - -pub async fn listener( - conn: Connection, - mut rx: Receiver<Event>, - wtx: Sender<Status>, -) -> Result<()> { - let mut players: VecDeque<OwnedBusName> = VecDeque::new(); - let mut active: Option<OwnedBusName> = Default::default(); - let mut listener: Option<AbortHandle> = None; - let mut printer: Option<AbortHandle> = None; - let mut join_set = JoinSet::new(); - - while let Some(value) = rx.recv().await { - match value { - Event::Add(name) => { - let player_proxy = PlayerProxy::builder(&conn) - .destination(name.clone())? - .build() - .await?; - - match player_proxy.playback_status().await? { - PlaybackStatus::Playing => players.push_front(name), - PlaybackStatus::Paused => players.push_back(name), - PlaybackStatus::Stopped => players.push_back(name), - } - } - Event::Remove(name) => { - if let Some(index) = players.iter().position(|p| *p == name) { - players.remove(index); - } - } - Event::Shift if !players.is_empty() => players.rotate_left(1), - _ => {} - }; - - if players.front() != active.as_ref() { - if active.is_some() { - if let Some(h) = listener.take() { - h.abort(); - } - - if let Some(h) = printer.take() { - h.abort(); - } - active = None; - } - - if let Some(name) = players.front().cloned() { - let proxy = PlayerProxy::builder(&conn) - .destination(name.clone())? - .build() - .await?; - - listener = Some(join_set.spawn(crate::printer::printer(proxy, wtx.clone()))); - } - } - } - - Ok(()) -} |