summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock7
-rw-r--r--Cargo.toml1
-rw-r--r--src/main.rs40
3 files changed, 25 insertions, 23 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 788fc19..a6a3ef7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -58,6 +58,7 @@ version = "0.1.0"
dependencies = [
"clap",
"mpris",
+ "unwrap-retry",
]
[[package]]
@@ -385,6 +386,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
[[package]]
+name = "unwrap-retry"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1884fdb570a7bba8d8a68565e16a57682cdb2c6628b86c2c466ec92ff0e4a8d8"
+
+[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 7bb881d..aa00c55 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,3 +6,4 @@ edition = "2024"
[dependencies]
clap = { version = "4.5.51", features = ["derive"] }
mpris = "2.0.1"
+unwrap-retry = "0.3.0"
diff --git a/src/main.rs b/src/main.rs
index 82ee310..f350b4e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,6 +5,7 @@ use std::{
use clap::Parser;
use mpris::{DBusError, FindingError, PlaybackStatus, Player, PlayerFinder};
+use unwrap_retry::{RetryableOptionFn, RetryableResultFn};
const PLAYER_IDENTITY: &str = "Spotify";
const BROWSER_IDENTITY: &str = "Mozilla zen";
@@ -42,19 +43,10 @@ fn get_browser() -> Option<Player> {
}
fn find_player(name: &str) -> Option<Player> {
- match PlayerFinder::new()
+ PlayerFinder::new()
.expect("Failed to create PlayerFinder")
.find_by_name(name)
- {
- Ok(p) => Some(p),
- Err(e) => {
- if let FindingError::DBusError(e) = e {
- panic!("DBus err: {e}")
- } else {
- None
- }
- }
- }
+ .ok()
}
fn normalize_volume(volume: f64) -> u8 {
@@ -67,11 +59,7 @@ fn denormal_volume(volume: u8) -> f64 {
fn set_volume(player: &Player, volume: u8) -> Vec<Result<(), DBusError>> {
let mut res = Vec::new();
- let current_volume = normalize_volume(
- player
- .get_volume()
- .unwrap_or_else(|e| panic!("Failed to retrieve {player:#?} volume: {e}")),
- );
+ let current_volume = normalize_volume((|| player.get_volume()).unwrap_blocking());
if volume == current_volume {
return res;
@@ -140,15 +128,21 @@ fn daemon() -> ! {
}
fn set_lower(player: &Player) {
- set_volume(player, LOWER_VOLUME)
- .into_iter()
- .for_each(|r| r.unwrap_or_else(|e| eprintln!("Failed to set volume: {e}")));
+ set_volume(
+ player,
+ LOWER_VOLUME,
+ )
+ .into_iter()
+ .for_each(|r| r.unwrap_or_else(|e| eprintln!("Failed to set volume: {e} for player {player:#?}")));
}
fn set_normal(player: &Player) {
- set_volume(player, NORMAL_VOLUME)
- .into_iter()
- .for_each(|r| r.unwrap_or_else(|e| eprintln!("Failed to set volume: {e}")));
+ set_volume(
+ player,
+ NORMAL_VOLUME,
+ )
+ .into_iter()
+ .for_each(|r| r.unwrap_or_else(|e| eprintln!("Failed to set volume: {e} for player {player:#?}")));
}
fn main() {
@@ -158,7 +152,7 @@ fn main() {
daemon()
}
- let player = get_player().unwrap_or_else(|| panic!("Player {PLAYER_IDENTITY} not found"));
+ let player = (|| get_player()).unwrap_blocking();
if args.lower {
set_lower(&player);