From 160c44e6efe8619f442aa1bd54388b84718145ba Mon Sep 17 00:00:00 2001 From: hheik <4469778+hheik@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:40:58 +0300 Subject: [PATCH] Added (unimplemented) log level option --- src/lib.rs | 22 +++++++++++++++++++++- src/main.rs | 4 ++++ src/server.rs | 43 ++++++++++++++++++++++++++++--------------- 3 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a73abde..8fe5859 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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 { + match s { + "quiet" => Ok(Self::Quiet), + "error" => Ok(Self::Error), + "all" => Ok(Self::All), + _ => Err(()), + } + } +} + pub mod server { use std::{fmt::Debug, path::PathBuf}; diff --git a/src/main.rs b/src/main.rs index c81022e..3040118 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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, } fn main() { diff --git a/src/server.rs b/src/server.rs index bcefaa0..f42045a 100644 --- a/src/server.rs +++ b/src/server.rs @@ -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()