diff --git a/src/print_text.rs b/src/print_text.rs index 806de21..24d3daf 100644 --- a/src/print_text.rs +++ b/src/print_text.rs @@ -23,7 +23,7 @@ fn cutoff(fields: &Vec, brk: char, strings: &mut HashMap) fn build_string(cfg: &Config, data: &mut Data) -> String { let mut b = Builder::default(); - if cfg.hide_output && data.current_player.is_none() { + if cfg.hide_output && data.current_player.is_none() { b.append(' '); } else { cutoff(&cfg.metadata_fields, cfg.break_character, &mut data.display_text); diff --git a/src/update_message.rs b/src/update_message.rs index 7d0f05d..7142205 100644 --- a/src/update_message.rs +++ b/src/update_message.rs @@ -46,25 +46,28 @@ fn value_to_string(v: &MetadataValue, sep: char) -> String { fn rating_to_string(r: Option<&MetadataValue>, map: &Rating) -> Option { match r { Some(rating) => { - let f = (rating.as_f64().unwrap() * 10_f64).round() as i64; - match f { //todo: refactor - 0 => Some(Rating::repeat(map.nil, 5)), - 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))), - 3 => Some(format!("{}{}{}", Rating::repeat(map.full, 1), Rating::repeat(map.half, 1), Rating::repeat(map.nil, 3))), - 4 => Some(format!("{}{}", Rating::repeat(map.full, 2), Rating::repeat(map.nil, 3))), - 5 => Some(format!("{}{}{}", Rating::repeat(map.full, 2), Rating::repeat(map.half, 1), Rating::repeat(map.nil, 2))), - 6 => Some(format!("{}{}", Rating::repeat(map.full, 3), Rating::repeat(map.nil, 2))), - 7 => Some(format!("{}{}{}", Rating::repeat(map.full, 3), Rating::repeat(map.half, 1), Rating::repeat(map.nil, 1))), - 8 => Some(format!("{}{}", Rating::repeat(map.full, 4), Rating::repeat(map.nil, 1))), - 9 => Some(format!("{}{}", Rating::repeat(map.full, 4), Rating::repeat(map.half, 1))), - 10.. => Some(Rating::repeat(map.full, 5)), - _ => Some(format!("Invalid rating!")) + if let Some(f) = rating.as_f64() { + let i = (f * 10_f64.round()) as i64; + match i { + 0 => Some(Rating::repeat(map.nil, 5)), + 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))), + 3 => Some(format!("{}{}{}", Rating::repeat(map.full, 1), Rating::repeat(map.half, 1), Rating::repeat(map.nil, 3))), + 4 => Some(format!("{}{}", Rating::repeat(map.full, 2), Rating::repeat(map.nil, 3))), + 5 => Some(format!("{}{}{}", Rating::repeat(map.full, 2), Rating::repeat(map.half, 1), Rating::repeat(map.nil, 2))), + 6 => Some(format!("{}{}", Rating::repeat(map.full, 3), Rating::repeat(map.nil, 2))), + 7 => Some(format!("{}{}{}", Rating::repeat(map.full, 3), Rating::repeat(map.half, 1), Rating::repeat(map.nil, 1))), + 8 => Some(format!("{}{}", Rating::repeat(map.full, 4), Rating::repeat(map.nil, 1))), + 9 => Some(format!("{}{}", Rating::repeat(map.full, 4), Rating::repeat(map.half, 1))), + 10.. => Some(Rating::repeat(map.full, 5)), + _ => Some(format!("Invalid rating!")) + } + } else { + None } }, None => { None - // Rating::repeat(map.nil, 5) }, } } diff --git a/src/update_players.rs b/src/update_players.rs index fc82221..51180c8 100644 --- a/src/update_players.rs +++ b/src/update_players.rs @@ -10,32 +10,19 @@ pub fn update_players( if players.is_empty() { data.current_player = None; } else { - let mut active: Vec> = vec![Vec::new(), Vec::new(), Vec::new()]; + let mut active: Vec<(i32, String)> = Vec::new(); for player in players { - if cfg.player_priorities.contains(&player.identity().to_owned().to_ascii_lowercase()) { + if let Ok(mpris::PlaybackStatus::Playing) = player.get_playback_status() { let name = player.identity(); let idx = cfg.find_player_priorities_idx(name); - if let Ok(status) = player.get_playback_status() { - match status { - mpris::PlaybackStatus::Playing => active[0].push((idx, name.to_owned())), - mpris::PlaybackStatus::Paused => active[1].push((idx, name.to_owned())), - mpris::PlaybackStatus::Stopped => active[2].push((idx, name.to_owned())), - }; - } + active.push((idx, name.to_owned())); } } - if !active[0].is_empty() { - data.current_player = Some(get_lowest(&active[0])); - } else if !active[1].is_empty() { - data.current_player = Some(get_lowest(&active[1])); - } else if !active[2].is_empty() { - data.current_player = Some(get_lowest(&active[2])); + + if !active.is_empty() { + data.current_player = Some(get_lowest(&active)); } else { - if let Ok(player) = pf.find_active() { - data.current_player = Some(player.identity().to_owned()); - } else { - data.current_player = None; - } + data.current_player = None; } } }