diff options
Diffstat (limited to 'src/listener.rs')
-rw-r--r-- | src/listener.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/listener.rs b/src/listener.rs index 208c161..6414fb3 100644 --- a/src/listener.rs +++ b/src/listener.rs @@ -1,4 +1,4 @@ -use std::{ops::ControlFlow, time::Duration}; +use std::{ops::ControlFlow, sync::LazyLock, time::Duration}; use tokio::task::JoinHandle; use tokio_stream::StreamExt; @@ -12,6 +12,15 @@ use crate::{ const TICK_RATE: Duration = Duration::from_millis(500); +/// Colors to use for PlaybackStatus +static COLORS: LazyLock<[String; 3]> = LazyLock::new(|| { + [ + std::env::var("BASE16_COLOR_00_HEX").unwrap_or("1d2021".into()), // black + std::env::var("BASE16_COLOR_0C_HEX").unwrap_or("8ec07c".into()), // cyan + std::env::var("BASE16_COLOR_0A_HEX").unwrap_or("fabd2f".into()), // yellow + ] +}); + pub async fn listeners(blocks: Blocks) -> Result<(), Error> { let conn = Connection::session().await?; @@ -20,10 +29,6 @@ pub async fn listeners(blocks: Blocks) -> Result<(), Error> { .build() .await?; - let black = std::env::var("BASE16_COLOR_00_HEX").ok(); - let cyan = std::env::var("BASE16_COLOR_0C_HEX").ok(); - let yellow = std::env::var("BASE16_COLOR_0A_HEX").ok(); - let mut rotator: Option<JoinHandle<Result<(), Error>>> = None; let mut old_title = String::new(); @@ -37,7 +42,7 @@ pub async fn listeners(blocks: Blocks) -> Result<(), Error> { tokio::select! { Some(prop) = metadata.next() => handle_metadata(prop, blocks.clone(), &mut old_title, &mut rotator).await, Some(prop) = prev.next() => handle_prev_next(prop, blocks.clone(), '', "mpris-prev").await, - Some(prop) = play.next() => handle_play(prop, blocks.clone(), black.clone(), cyan.clone(), yellow.clone()).await, + Some(prop) = play.next() => handle_play(prop, blocks.clone()).await, Some(prop) = next.next() => handle_prev_next(prop, blocks.clone(), '', "mpris-next").await, Some(prop) = volume.next() => handle_volume(prop, blocks.clone()).await, else => { @@ -131,13 +136,10 @@ async fn handle_prev_next( async fn handle_play( prop: PropertyChanged<'_, PlaybackStatus>, blocks: Blocks, - black: Option<String>, - cyan: Option<String>, - yellow: Option<String>, ) -> ControlFlow<Result<(), Error>> { let (icon, color, bg) = match prop.get().await { - Ok(PlaybackStatus::Playing) => ('', black.clone(), cyan.clone()), - Ok(PlaybackStatus::Paused) => ('', black.clone(), yellow.clone()), + Ok(PlaybackStatus::Playing) => ('', Some(COLORS[0].clone()), Some(COLORS[1].clone())), + Ok(PlaybackStatus::Paused) => ('', Some(COLORS[0].clone()), Some(COLORS[2].clone())), Ok(PlaybackStatus::Stopped) => ('', None, None), Err(_) => return ControlFlow::Continue(()), }; |