diff --git a/src/browser.rs b/src/browser.rs index 7e60ecc..c69dfc6 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -1,7 +1,7 @@ use serde::Deserialize; use std::io; use std::io::BufReader; -use std::io::Read; +use std::io::{Read, Write}; use crate::error::FF2MpvError; @@ -10,6 +10,11 @@ pub struct FF2MpvMessage { pub url: String, } +pub fn send_reply() -> Result<(), io::Error> { + // "ok" formatted as a JSON string + send_message("\"ok\"") +} + pub fn get_mpv_message() -> Result { let message = read_message()?; let ff2mpv_message = serde_json::from_str(&message)?; @@ -28,3 +33,13 @@ fn read_message() -> Result { reader.read_to_string(&mut string)?; Ok(string) } + +fn send_message(message: &str) -> Result<(), io::Error> { + let length = (message.len() as u32).to_ne_bytes(); + let message = message.as_bytes(); + + let mut stdout = io::stdout(); + stdout.write_all(&length)?; + stdout.write_all(message)?; + Ok(()) +} diff --git a/src/command.rs b/src/command.rs index c255711..042e9ae 100644 --- a/src/command.rs +++ b/src/command.rs @@ -64,12 +64,15 @@ impl Command { let config = Config::build(); let ff2mpv_message = browser::get_mpv_message()?; Command::launch_mpv(config.player_command, config.player_args, &ff2mpv_message.url)?; + browser::send_reply()?; Ok(()) } fn launch_mpv(command: String, args: Vec, url: &str) -> Result<(), io::Error> { process::Command::new(command) + .stdout(process::Stdio::null()) + .stderr(process::Stdio::null()) .args(args) .arg(url) .spawn()?;