Squashed commit of the following:
commit 2c3dc3a3c9
Author: 409 <bloecker.s@gmail.com>
Date: Sat Jun 29 12:37:17 2024 +0200
feat!: search playerctl players using simsearch
This commit is contained in:
23
Cargo.lock
generated
23
Cargo.lock
generated
@@ -59,6 +59,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"libpulse-binding",
|
"libpulse-binding",
|
||||||
|
"simsearch",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -105,6 +106,22 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "simsearch"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9c869b25830e4824ef7279015cfc298a0674aca6a54eeff2efce8d12bf3701fe"
|
||||||
|
dependencies = [
|
||||||
|
"strsim",
|
||||||
|
"triple_accel",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.10.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.109"
|
version = "1.0.109"
|
||||||
@@ -116,6 +133,12 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "triple_accel"
|
||||||
|
version = "0.3.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "622b09ce2fe2df4618636fb92176d205662f59803f39e70d1c333393082de96c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.86"
|
anyhow = "1.0.86"
|
||||||
pulse = { version = "2.0", package = "libpulse-binding" }
|
pulse = { version = "2.0", package = "libpulse-binding" }
|
||||||
|
simsearch = "0.2.5"
|
||||||
|
|||||||
@@ -1,20 +1,27 @@
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
|
use simsearch::{SearchOptions, SimSearch};
|
||||||
|
|
||||||
fn get_playerctl_player(target: &str) -> Result<String> {
|
fn get_playerctl_player(target: &str) -> Result<String> {
|
||||||
let get_players = Command::new("playerctl").arg("-l").output()?;
|
let get_players = Command::new("playerctl").arg("-l").output()?;
|
||||||
let get_players_output = String::from_utf8(get_players.stdout)?;
|
let get_players_output = String::from_utf8(get_players.stdout)?;
|
||||||
let players: Vec<&str> = get_players_output.split("\n").collect();
|
let players: Vec<&str> = get_players_output.split("\n").filter(|s| !s.is_empty()).collect();
|
||||||
|
|
||||||
let Some(player) = players
|
let search_options = SearchOptions::new().threshold(0.8);
|
||||||
.iter()
|
let mut engine: SimSearch<u32> = SimSearch::new_with(search_options);
|
||||||
.find(|p| p.to_lowercase().contains(&target.to_lowercase()))
|
|
||||||
else {
|
for (i, p) in players.iter().enumerate() {
|
||||||
|
engine.insert(i as u32, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
let results: Vec<u32> = engine.search(target);
|
||||||
|
|
||||||
|
let Some(player_index) = results.get(0) else {
|
||||||
return Err(anyhow!("Error getting player '{target}'"));
|
return Err(anyhow!("Error getting player '{target}'"));
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(player.to_string())
|
Ok(players.iter().nth(*player_index as usize).unwrap().to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn playerctl_play_pause(target: &str) -> Result<()> {
|
pub fn playerctl_play_pause(target: &str) -> Result<()> {
|
||||||
@@ -33,7 +40,6 @@ pub fn playerctl_next(target: &str) -> Result<()> {
|
|||||||
Command::new("playerctl")
|
Command::new("playerctl")
|
||||||
.args(vec!["-p", &player, "next"])
|
.args(vec!["-p", &player, "next"])
|
||||||
.spawn()?;
|
.spawn()?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user