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 = [
|
dependencies = [
|
||||||
"directories",
|
"directories",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_yaml",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"toml",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -808,6 +808,12 @@ version = "0.2.139"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
|
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linked-hash-map"
|
||||||
|
version = "0.5.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linux-raw-sys"
|
name = "linux-raw-sys"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
|
@ -1323,6 +1329,12 @@ dependencies = [
|
||||||
"windows-sys 0.42.0",
|
"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]]
|
[[package]]
|
||||||
name = "scoped_threadpool"
|
name = "scoped_threadpool"
|
||||||
version = "0.1.9"
|
version = "0.1.9"
|
||||||
|
@ -1372,6 +1384,18 @@ dependencies = [
|
||||||
"syn",
|
"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]]
|
[[package]]
|
||||||
name = "sha1"
|
name = "sha1"
|
||||||
version = "0.10.5"
|
version = "0.10.5"
|
||||||
|
@ -1588,15 +1612,6 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
|
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "toml"
|
|
||||||
version = "0.5.11"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_datetime"
|
name = "toml_datetime"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
|
@ -1936,6 +1951,15 @@ version = "0.42.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
|
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]]
|
[[package]]
|
||||||
name = "zbus"
|
name = "zbus"
|
||||||
version = "3.8.0"
|
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
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
confy = "0.5.1"
|
|
||||||
serde = "1.0.152"
|
serde = "1.0.152"
|
||||||
id3 = "1.6.0"
|
id3 = "1.6.0"
|
||||||
lrc = { version = "0.1.7", optional = true }
|
lrc = { version = "0.1.7", optional = true }
|
||||||
|
@ -19,6 +18,11 @@ typed-builder = "0.12.0"
|
||||||
version = "4.1.4"
|
version = "4.1.4"
|
||||||
features = ["wrap_help", "cargo", "usage", "derive", "suggestions", "color"]
|
features = ["wrap_help", "cargo", "usage", "derive", "suggestions", "color"]
|
||||||
|
|
||||||
|
[dependencies.confy]
|
||||||
|
version = "0.5.1"
|
||||||
|
default-features = false
|
||||||
|
features = ["yaml_conf"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
lyrics = ["lrc"]
|
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,
|
arguments,
|
||||||
cmus::{self, query::CmusQueryResponse, CmusError},
|
cmus::{self, query::CmusQueryResponse, CmusError},
|
||||||
};
|
};
|
||||||
|
use cmus_notify::arguments::Arguments;
|
||||||
|
|
||||||
macro_rules! sleep {
|
macro_rules! sleep {
|
||||||
($time: expr) => {
|
($time: expr) => {
|
||||||
|
@ -12,7 +13,8 @@ macro_rules! sleep {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
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)
|
// 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(
|
let mut query_command = cmus::build_query_command(
|
||||||
|
|
Loading…
Reference in a new issue