Added (unimplemented) log level option

monolith
hheik 2024-08-19 15:40:58 +03:00
parent 6f851a0d7b
commit 160c44e6ef
3 changed files with 53 additions and 16 deletions

View File

@ -1,4 +1,4 @@
use std::path::PathBuf;
use std::{path::PathBuf, str::FromStr};
use serde::{Deserialize, Serialize};
@ -64,6 +64,26 @@ impl Default for PlaylistParams {
}
}
#[derive(Clone, Copy, Debug, Default)]
pub enum LogLevel {
Quiet = 0,
Error = 1,
#[default]
All = 2,
}
impl FromStr for LogLevel {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"quiet" => Ok(Self::Quiet),
"error" => Ok(Self::Error),
"all" => Ok(Self::All),
_ => Err(()),
}
}
}
pub mod server {
use std::{fmt::Debug, path::PathBuf};

View File

@ -45,6 +45,10 @@ pub struct CliArgs {
/// whether unicode symbols are used to improve the overall look of the app
#[argh(option, default = "true")]
enhanced_graphics: bool,
/// server-side log level (quiet, error, all)
#[argh(option)]
log_level: Option<String>,
}
fn main() {

View File

@ -4,7 +4,7 @@ use rmp::{
os,
protocol::{Message, MessageType},
server::ServerError,
PlaylistParams, ServerState,
LogLevel, PlaylistParams, ServerState,
};
use std::{
fs,
@ -19,34 +19,47 @@ use self::playback::{playback_manager, Playback};
pub mod decoder;
pub mod playback;
pub struct Server {
pub state: ServerState,
pub playback: Playback,
#[derive(Debug, Default)]
pub struct ServerConfig {
pub log_level: LogLevel,
}
impl Server {
pub fn from_state(state: ServerState) -> Self {
impl ServerConfig {
pub fn from_args(args: CliArgs) -> Self {
Self {
state,
playback: Default::default(),
log_level: args
.log_level
.and_then(|level| level.parse().ok())
.unwrap_or_default(),
}
}
}
#[derive(Default)]
pub struct Server {
pub state: ServerState,
pub config: ServerConfig,
pub playback: Playback,
}
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::from_state(ServerState {
playlist_params: PlaylistParams {
shuffle: args.shuffle,
next: args.next,
repeat: args.repeat,
let server = Arc::new(Mutex::new(Server {
state: ServerState {
playlist_params: PlaylistParams {
shuffle: args.shuffle,
next: args.next,
repeat: args.repeat,
},
player: None,
},
player: None,
})));
config: ServerConfig::from_args(args),
..Default::default()
}));
let server_clone = server.clone();
std::thread::Builder::new()