mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-04-28 06:21:23 +00:00
feat: implemented loop support in pwsp-cli
This commit is contained in:
@@ -65,6 +65,8 @@ enum GetCommands {
|
|||||||
Input,
|
Input,
|
||||||
/// All audio inputs
|
/// All audio inputs
|
||||||
Inputs,
|
Inputs,
|
||||||
|
/// Is loop enabled (true or false)
|
||||||
|
Loop,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subcommand, Debug)]
|
#[derive(Subcommand, Debug)]
|
||||||
@@ -75,6 +77,8 @@ enum SetCommands {
|
|||||||
Position { position: f32 },
|
Position { position: f32 },
|
||||||
/// Audio input id (see pwsp-cli get inputs)
|
/// Audio input id (see pwsp-cli get inputs)
|
||||||
Input { name: String },
|
Input { name: String },
|
||||||
|
/// Enable or disable loop (true or false)
|
||||||
|
Loop { enabled: String },
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@@ -101,11 +105,13 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
GetCommands::CurrentFilePath => Request::get_current_file_path(),
|
GetCommands::CurrentFilePath => Request::get_current_file_path(),
|
||||||
GetCommands::Input => Request::get_input(),
|
GetCommands::Input => Request::get_input(),
|
||||||
GetCommands::Inputs => Request::get_inputs(),
|
GetCommands::Inputs => Request::get_inputs(),
|
||||||
|
GetCommands::Loop => Request::get_loop(),
|
||||||
},
|
},
|
||||||
Commands::Set { parameter } => match parameter {
|
Commands::Set { parameter } => match parameter {
|
||||||
SetCommands::Volume { volume } => Request::set_volume(volume),
|
SetCommands::Volume { volume } => Request::set_volume(volume),
|
||||||
SetCommands::Position { position } => Request::seek(position),
|
SetCommands::Position { position } => Request::seek(position),
|
||||||
SetCommands::Input { name } => Request::set_input(&name),
|
SetCommands::Input { name } => Request::set_input(&name),
|
||||||
|
SetCommands::Loop { enabled } => Request::set_loop(&enabled),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ pub struct SetCurrentInputCommand {
|
|||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct GetLoopCommand {}
|
||||||
|
|
||||||
|
pub struct SetLoopCommand {
|
||||||
|
pub enabled: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Executable for PingCommand {
|
impl Executable for PingCommand {
|
||||||
async fn execute(&self) -> Response {
|
async fn execute(&self) -> Response {
|
||||||
@@ -256,3 +262,26 @@ impl Executable for SetCurrentInputCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl Executable for GetLoopCommand {
|
||||||
|
async fn execute(&self) -> Response {
|
||||||
|
let audio_player = get_audio_player().await.lock().await;
|
||||||
|
Response::new(true, audio_player.looped.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl Executable for SetLoopCommand {
|
||||||
|
async fn execute(&self) -> Response {
|
||||||
|
let mut audio_player = get_audio_player().await.lock().await;
|
||||||
|
|
||||||
|
match self.enabled {
|
||||||
|
Some(enabled) => {
|
||||||
|
audio_player.looped = enabled;
|
||||||
|
Response::new(true, format!("Loop was set to {}", enabled))
|
||||||
|
}
|
||||||
|
None => Response::new(false, "Invalid enabled value"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -87,6 +87,14 @@ impl Request {
|
|||||||
pub fn set_input(name: &str) -> Self {
|
pub fn set_input(name: &str) -> Self {
|
||||||
Request::new("set_input", vec![("input_name", name)])
|
Request::new("set_input", vec![("input_name", name)])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_loop() -> Self {
|
||||||
|
Request::new("get_loop", vec![])
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_loop(enabled: &str) -> Self {
|
||||||
|
Request::new("set_loop", vec![("enabled", enabled)])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
|
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
|
||||||
|
|||||||
@@ -48,6 +48,16 @@ pub fn parse_command(request: &Request) -> Option<Box<dyn Executable + Send>> {
|
|||||||
let name = Some(request.args.get("input_name").unwrap_or(&String::new())).cloned();
|
let name = Some(request.args.get("input_name").unwrap_or(&String::new())).cloned();
|
||||||
Some(Box::new(SetCurrentInputCommand { name }))
|
Some(Box::new(SetCurrentInputCommand { name }))
|
||||||
}
|
}
|
||||||
|
"get_loop" => Some(Box::new(GetLoopCommand {})),
|
||||||
|
"set_loop" => {
|
||||||
|
let enabled = request
|
||||||
|
.args
|
||||||
|
.get("enabled")
|
||||||
|
.unwrap_or(&String::new())
|
||||||
|
.parse::<bool>()
|
||||||
|
.ok();
|
||||||
|
Some(Box::new(SetLoopCommand { enabled }))
|
||||||
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user