feat: add detach option on run
This commit is contained in:
parent
11509109be
commit
1a5bb96e41
4 changed files with 23 additions and 4 deletions
|
|
@ -33,7 +33,9 @@ impl DeviceConfig {
|
||||||
let mut r = Vec::new();
|
let mut r = Vec::new();
|
||||||
if let Some(ev) = v {
|
if let Some(ev) = v {
|
||||||
for e in ev {
|
for e in ev {
|
||||||
r.push( e.run(Event::new().make_env(None, false)?.to_map(e.envconf.as_ref()))? ) ;
|
if let Some(v) = e.run(Event::new().make_env(None, false)?.to_map(e.envconf.as_ref()))? {
|
||||||
|
r.push(v);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(r)
|
Ok(r)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::process::Command;
|
use std::process::{Command, ExitStatus};
|
||||||
|
|
||||||
use super::serializer::RunConfigSerializer;
|
use super::serializer::RunConfigSerializer;
|
||||||
use super::EventEnvMap;
|
use super::EventEnvMap;
|
||||||
|
|
@ -8,15 +8,24 @@ use super::EventEnvMap;
|
||||||
pub struct RunConfig {
|
pub struct RunConfig {
|
||||||
pub args: Vec<String>,
|
pub args: Vec<String>,
|
||||||
pub envconf: Option<EventEnvMap>,
|
pub envconf: Option<EventEnvMap>,
|
||||||
|
pub detach: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RunConfig {
|
impl RunConfig {
|
||||||
pub fn run(&self, env: HashMap<&str, String>) -> Result<std::process::ExitStatus, std::io::Error> {
|
pub fn run(&self, env: HashMap<&str, String>) -> Result<Option<ExitStatus>, std::io::Error> {
|
||||||
let mut c = Command::new(&self.args[0]);
|
let mut c = Command::new(&self.args[0]);
|
||||||
if self.args.len() > 1 {
|
if self.args.len() > 1 {
|
||||||
c.args(&self.args[1..]);
|
c.args(&self.args[1..]);
|
||||||
}
|
}
|
||||||
c.envs(env).status()
|
c.envs(env);
|
||||||
|
if self.detach {
|
||||||
|
std::thread::spawn(move || {
|
||||||
|
c.status()
|
||||||
|
});
|
||||||
|
Ok(None)
|
||||||
|
} else {
|
||||||
|
c.status().map(|v| Some(v))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -36,6 +45,7 @@ impl TryFrom<RunConfigSerializer> for RunConfig {
|
||||||
RunConfig {
|
RunConfig {
|
||||||
args,
|
args,
|
||||||
envconf: v.envconf,
|
envconf: v.envconf,
|
||||||
|
detach: v.detach.unwrap_or(false),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,5 @@ pub struct RunConfigSerializer {
|
||||||
pub args: Option<Vec<String>>,
|
pub args: Option<Vec<String>>,
|
||||||
pub cmd: Option<String>,
|
pub cmd: Option<String>,
|
||||||
pub envconf: Option<EventEnvSerializer>,
|
pub envconf: Option<EventEnvSerializer>,
|
||||||
|
pub detach: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,12 @@ devices:
|
||||||
channel: 0
|
channel: 0
|
||||||
run:
|
run:
|
||||||
- cmd: "echo [$channel] NoteOn $id $value $raw"
|
- cmd: "echo [$channel] NoteOn $id $value $raw"
|
||||||
|
- type: NoteOff
|
||||||
|
id: 30-127
|
||||||
|
channel: 0
|
||||||
|
run:
|
||||||
|
- cmd: "for I in $(seq 1 3) ; do echo wait $I ; sleep 1; done"
|
||||||
|
detach: true
|
||||||
- type: PitchBend
|
- type: PitchBend
|
||||||
remap: 0-100
|
remap: 0-100
|
||||||
float: true
|
float: true
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue