1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//! Helper functions for invoking system commands.

use errors::*;
use glib;
use prefs::Prefs;
use std::error::Error;
use std;



/// Execute an available volume control command asynchronously, starting with
/// the preferences and using some fallback values. If none of these
/// are valid executables in `$PATH`, then return `Err(err)`.
pub fn execute_vol_control_command(prefs: &Prefs) -> Result<()> {
    let m_cmd = prefs.get_avail_vol_control_cmd();

    match m_cmd {
        Some(ref cmd) => execute_command(cmd.as_str()),
        None => bail!("No command found"),
    }
}


/// Try to execute the given command asynchronously via gtk.
pub fn execute_command(cmd: &str) -> Result<()> {
    return glib::spawn_command_line_async(cmd)
               .map_err(|e| {
                            std::io::Error::new(std::io::ErrorKind::Other,
                                                e.description())
                        })
               .from_err();
}