diff --git a/src/meta_plugin/program.rs b/src/meta_plugin/program.rs index 4ad225f..e4db53d 100644 --- a/src/meta_plugin/program.rs +++ b/src/meta_plugin/program.rs @@ -17,6 +17,7 @@ pub struct MetaPluginProgram { pub supported: bool, pub meta_name: String, pub is_default: bool, + buffer: Vec, } impl MetaPluginProgram { @@ -30,6 +31,7 @@ impl MetaPluginProgram { supported, meta_name, is_default, + buffer: Vec::new(), } } } @@ -69,12 +71,20 @@ impl MetaPlugin for MetaPluginProgram { debug!("META: Executing command for finalize: {:?} {:?}", program, args); - let output = Command::new(program) + let mut process = Command::new(program) .args(args) - .stdin(Stdio::null()) + .stdin(Stdio::piped()) .stdout(Stdio::piped()) .stderr(Stdio::piped()) - .output()?; + .spawn() + .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Failed to spawn process: {}", e)))?; + + let stdin = process.stdin.as_mut().unwrap(); + stdin.write_all(&self.buffer) + .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Failed to write to stdin: {}", e)))?; + + let output = process.wait_with_output() + .map_err(|e| io::Error::new(io::ErrorKind::Other, format!("Failed to wait for process: {}", e)))?; if output.status.success() { let stdout = String::from_utf8_lossy(&output.stdout); @@ -88,8 +98,8 @@ impl MetaPlugin for MetaPluginProgram { } } - fn update(&mut self, _data: &[u8]) { - // This is handled by the ProgramWriter implementation + fn update(&mut self, data: &[u8]) { + self.buffer.extend_from_slice(data); } fn meta_name(&mut self) -> String {