summaryrefslogtreecommitdiffstats
path: root/src/player.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/player.rs')
-rw-r--r--src/player.rs97
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(())
-}