Cerate load_config_and_parse_args
This commit is contained in:
parent
302c06d1d8
commit
339c11253f
4 changed files with 113 additions and 12 deletions
44
Cargo.lock
generated
44
Cargo.lock
generated
|
@ -240,8 +240,8 @@ checksum = "e37668cb35145dcfaa1931a5f37fde375eeae8068b4c0d2f289da28a270b2d2c"
|
|||
dependencies = [
|
||||
"directories",
|
||||
"serde",
|
||||
"serde_yaml",
|
||||
"thiserror",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -808,6 +808,12 @@ version = "0.2.139"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.1.4"
|
||||
|
@ -1323,6 +1329,12 @@ dependencies = [
|
|||
"windows-sys 0.42.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
|
||||
|
||||
[[package]]
|
||||
name = "scoped_threadpool"
|
||||
version = "0.1.9"
|
||||
|
@ -1372,6 +1384,18 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_yaml"
|
||||
version = "0.8.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"ryu",
|
||||
"serde",
|
||||
"yaml-rust",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha1"
|
||||
version = "0.10.5"
|
||||
|
@ -1588,15 +1612,6 @@ version = "0.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.5.1"
|
||||
|
@ -1936,6 +1951,15 @@ version = "0.42.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
|
||||
|
||||
[[package]]
|
||||
name = "yaml-rust"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||
dependencies = [
|
||||
"linked-hash-map",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zbus"
|
||||
version = "3.8.0"
|
||||
|
|
|
@ -6,7 +6,6 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
confy = "0.5.1"
|
||||
serde = "1.0.152"
|
||||
id3 = "1.6.0"
|
||||
lrc = { version = "0.1.7", optional = true }
|
||||
|
@ -19,6 +18,11 @@ typed-builder = "0.12.0"
|
|||
version = "4.1.4"
|
||||
features = ["wrap_help", "cargo", "usage", "derive", "suggestions", "color"]
|
||||
|
||||
[dependencies.confy]
|
||||
version = "0.5.1"
|
||||
default-features = false
|
||||
features = ["yaml_conf"]
|
||||
|
||||
[features]
|
||||
lyrics = ["lrc"]
|
||||
|
||||
|
|
|
@ -177,3 +177,74 @@ impl Default for Arguments {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Arguments {
|
||||
pub fn load_config_and_parse_args() -> Self {
|
||||
// load config file
|
||||
let cfg: Self = match confy::load("cmus-notify", "config") {
|
||||
Ok(cfg) => cfg,
|
||||
Err(err) => {
|
||||
eprintln!("Failed to load config: {}", err);
|
||||
Self::default()
|
||||
}
|
||||
};
|
||||
|
||||
// parse the args
|
||||
let mut args = Arguments::parse();
|
||||
|
||||
// Combine the config and args(the args will override the config)
|
||||
if args.timeout == NOTIFICATION_TIMEOUT {
|
||||
args.timeout = cfg.timeout;
|
||||
}
|
||||
if args.persistent == false {
|
||||
args.persistent = cfg.persistent;
|
||||
}
|
||||
if args.show_track_cover == true {
|
||||
args.show_track_cover = cfg.show_track_cover;
|
||||
}
|
||||
args.notification_static_icon = args.notification_static_icon.or(cfg.notification_static_icon);
|
||||
args.cover_path = args.cover_path.or(cfg.cover_path);
|
||||
#[cfg(feature = "lyrics")]
|
||||
if args.lyrics_path == None {
|
||||
args.lyrics_path = cfg.lyrics_path;
|
||||
}
|
||||
|
||||
if args.depth == DEFAULT_MAX_DEPTH {
|
||||
args.depth = cfg.depth;
|
||||
}
|
||||
if args.app_name == NOTIFICATION_APP_NAME {
|
||||
args.app_name = cfg.app_name;
|
||||
}
|
||||
if args.summary == NOTIFICATION_SUMMARY {
|
||||
args.summary = cfg.summary;
|
||||
}
|
||||
if args.body == NOTIFICATION_BODY {
|
||||
args.body = cfg.body;
|
||||
}
|
||||
args.cmus_remote_bin_path = args.cmus_remote_bin_path.or(cfg.cmus_remote_bin_path);
|
||||
args.cmus_socket_address = args.cmus_socket_address.or(cfg.cmus_socket_address);
|
||||
args.cmus_socket_password = args.cmus_socket_password.or(cfg.cmus_socket_password);
|
||||
if args.interval == DEFAULT_INTERVAL_TIME {
|
||||
args.interval = cfg.interval;
|
||||
}
|
||||
if args.link == false {
|
||||
args.link = cfg.link;
|
||||
}
|
||||
if args.force_use_external_cover == false {
|
||||
args.force_use_external_cover = cfg.force_use_external_cover;
|
||||
}
|
||||
#[cfg(feature = "lyrics")]
|
||||
if args.force_use_external_lyrics == false {
|
||||
args.force_use_external_lyrics = cfg.force_use_external_lyrics;
|
||||
}
|
||||
if args.no_use_external_cover == false {
|
||||
args.no_use_external_cover = cfg.no_use_external_cover;
|
||||
}
|
||||
#[cfg(feature = "lyrics")]
|
||||
if args.no_use_external_lyrics == false {
|
||||
args.no_use_external_lyrics = cfg.no_use_external_lyrics;
|
||||
}
|
||||
|
||||
args
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ use cmus_notify::{
|
|||
arguments,
|
||||
cmus::{self, query::CmusQueryResponse, CmusError},
|
||||
};
|
||||
use cmus_notify::arguments::Arguments;
|
||||
|
||||
macro_rules! sleep {
|
||||
($time: expr) => {
|
||||
|
@ -12,7 +13,8 @@ macro_rules! sleep {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
let args = arguments::Arguments::parse();
|
||||
// Load the configs
|
||||
let settings = Arguments::load_config_and_parse_args();
|
||||
|
||||
// Build the command, or use the default. (to speed up the main loop, because we don't need to build it every time)
|
||||
let mut query_command = cmus::build_query_command(
|
||||
|
|
Loading…
Reference in a new issue