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 33 34 35 36 37 38 39 40 41
mod data; pub mod output; use crate::error::prelude::*; use std::convert::TryFrom; use std::process::Command; use data::CmusData; use output::StatusOutput; pub fn print_cmus_status() -> MyResult<()> { let cmus_status = get_cmus_status()?; println!("{}", cmus_status); Ok(()) } pub fn get_cmus_status() -> MyResult<StatusOutput> { let output = get_cmus_remote_output()?; let cmus_data = CmusData::try_from(output)?; let config = crate::config::get_config()?; StatusOutput::builder() .data(cmus_data) .format(config.format) .build() } fn get_cmus_remote_output() -> MyResult<String> { match Command::new("cmus-remote").arg("-Q").output() { Ok(output) => { if output.status.success() { Ok(String::from_utf8(output.stdout).unwrap()) } else { Err(Error::CmusError { status: output.status, stderr: String::from_utf8(output.stderr).unwrap(), }) } } Err(_) => Err(Error::CmusNotInstalled), } }