rmp/src/server.rs

83 lines
2.0 KiB
Rust

use rmp::{os, server::ServerError, ServerState, TrackChangeOptions};
use std::sync::{Arc, Mutex};
use crate::CliArgs;
pub mod decoder;
pub mod playback;
#[derive(Default)]
pub struct Server {
pub state: ServerState,
}
pub fn run(args: CliArgs) -> Result<(), ServerError> {
if let Err(err) = os::server::reserve_pid() {
let exit_code = handle_error(err);
std::process::exit(exit_code);
}
let server = Arc::new(Mutex::new(Server {
state: ServerState {
track_change_options: TrackChangeOptions {
shuffle: args.shuffle,
next: args.next,
repeat: args.repeat,
},
player: None,
},
..Default::default()
}));
Ok(())
}
pub fn kill() {
if let Err(err) = os::server::kill() {
let exit_code = handle_error(err);
std::process::exit(exit_code);
}
}
pub fn is_running() -> Result<bool, ServerError> {
match os::server::is_running() {
Ok(is_running) => Ok(is_running),
Err(err) => {
let exit_code = handle_error(err);
std::process::exit(exit_code);
}
}
}
pub fn run_in_background() {
if let Err(err) = os::server::run_in_background() {
let exit_code = handle_error(err);
std::process::exit(exit_code);
}
}
fn handle_error(err: ServerError) -> i32 {
match &err {
ServerError::Other(msg) => {
eprintln!("Unknown error: {msg}");
1
}
ServerError::Io(err) => {
eprintln!("IO error: {err}");
2
}
ServerError::AlreadyRunning => {
eprintln!("Server already running");
100
}
ServerError::NotRunning => {
eprintln!("Server is not running");
101
}
ServerError::MissingRuntimeDir(path) => {
eprintln!("Missing runtime directory: {}", path.to_string_lossy());
200
}
}
}