made rating_icons an optional value in Config

This commit is contained in:
Djairo Hougee 2023-05-10 16:18:03 +02:00
parent bb8f359f6d
commit 5fe9ef131b
2 changed files with 12 additions and 5 deletions

View File

@ -55,7 +55,7 @@ pub struct Config {
pub render_prefix: bool, pub render_prefix: bool,
pub break_character: Option<char>, pub break_character: Option<char>,
pub player_priorities: Vec<String>, pub player_priorities: Vec<String>,
pub rating_icons: Rating, pub rating_icons: Option<Rating>,
pub metadata_fields: Vec<Field>, pub metadata_fields: Vec<Field>,
pub player_prefixes: HashMap<String, char>, pub player_prefixes: HashMap<String, char>,
} }
@ -70,7 +70,7 @@ impl Default for Config {
fuzzy: false, fuzzy: false,
render_prefix: true, render_prefix: true,
metadata_fields: Config::default_metadata_fields(), metadata_fields: Config::default_metadata_fields(),
rating_icons: Rating::default(), rating_icons: Some(Rating::default()),
player_priorities: Config::default_player_priorities(), player_priorities: Config::default_player_priorities(),
break_character: Some('-'), break_character: Some('-'),
player_prefixes: Config::default_player_prefixes(), player_prefixes: Config::default_player_prefixes(),

View File

@ -28,12 +28,19 @@ fn value_to_string(v: &MetadataValue, sep: char) -> String {
} }
} }
fn rating_to_string(r: Option<&MetadataValue>, map: &Rating) -> Option<String> { fn rating_to_string(r: Option<&MetadataValue>, opt: Option<&Rating>) -> Option<String> {
let def = Rating::default();
let map: &Rating;
match opt {
Some(m) => map = m,
None => map = &def,
}
match r { match r {
Some(rating) => { Some(rating) => {
if let Some(f) = rating.as_f64() { if let Some(f) = rating.as_f64() {
let i = (f * 10_f64).round() as i64; let i = (f * 10_f64).round() as i64;
match i { match i { //TODO: refactor this
0 => Some(Rating::repeat(map.nil, 5)), 0 => Some(Rating::repeat(map.nil, 5)),
1 => Some(format!("{}{}", Rating::repeat(map.half, 1), Rating::repeat(map.nil, 4))), 1 => Some(format!("{}{}", Rating::repeat(map.half, 1), Rating::repeat(map.nil, 4))),
2 => Some(format!("{}{}", Rating::repeat(map.full, 1), Rating::repeat(map.nil, 4))), 2 => Some(format!("{}{}", Rating::repeat(map.full, 1), Rating::repeat(map.nil, 4))),
@ -63,7 +70,7 @@ pub fn update_message(cfg: &Config, data: &mut Data) {
for field in &cfg.metadata_fields { for field in &cfg.metadata_fields {
let key = field.field.clone(); let key = field.field.clone();
if field.field.eq("xesam:userRating") { if field.field.eq("xesam:userRating") {
if let Some(rating_string) = rating_to_string(meta.get(&key), &cfg.rating_icons) { if let Some(rating_string) = rating_to_string(meta.get(&key), cfg.rating_icons.as_ref()) {
data.display_text.insert(key, rating_string); data.display_text.insert(key, rating_string);
} else { } else {
data.display_text.remove(&key); data.display_text.remove(&key);