big overhaul
This commit is contained in:
1 parent
3be9b6ccea
commit
ecfbe8f147
7 files changed
+87
-72
No files matched your search
+15
-44
@@ -1,22 +1,7 @@
|
||||
use log::{debug, trace};
|
||||
use mpris::{PlayerFinder, MetadataValue};
|
||||
use mpris::{MetadataValue};
|
||||
|
||||
use crate::structs::{config::{Rating, Config}, data::Data};
|
||||
|
||||
|
||||
fn update_prefix(cfg: &Config, data: &mut Data) {
|
||||
if data.current_player.is_some() {
|
||||
let c = cfg.player_prefixes.get(&data.current_player.as_ref().unwrap().to_ascii_lowercase());
|
||||
if let Some(char) = c {
|
||||
data.display_prefix = char.clone();
|
||||
trace!("updated prefix to {}", data.display_prefix);
|
||||
} else {
|
||||
data.display_prefix = cfg.player_prefixes.get("default").unwrap_or(&'>').clone();
|
||||
trace!("set prefix to default ({})", data.display_prefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn value_to_string(v: &MetadataValue, sep: char) -> String {
|
||||
match v {
|
||||
MetadataValue::String(v) => v.to_string(),
|
||||
@@ -72,36 +57,22 @@ fn rating_to_string(r: Option<&MetadataValue>, map: &Rating) -> Option<String> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_message(pf: &PlayerFinder, cfg: &Config, data: &mut Data) {
|
||||
if data.current_player.is_some() {
|
||||
update_prefix(cfg, data);
|
||||
let name = &data.current_player.as_ref().unwrap();
|
||||
if let Ok(player) = pf.find_by_name(name) {
|
||||
debug!("found player!");
|
||||
if let Ok(m) = player.get_metadata() {
|
||||
debug!("got metadata!");
|
||||
for field in &cfg.metadata_fields {
|
||||
if field.field.eq("xesam:userRating") || field.field.eq("xesam:autoRating") {
|
||||
let key = field.field.clone();
|
||||
let string = rating_to_string(m.get(&key), &cfg.rating_icons);
|
||||
if let Some(str) = string {
|
||||
data.display_text.insert(key, str);
|
||||
} else {
|
||||
data.display_text.remove(&key);
|
||||
}
|
||||
pub fn update_message(cfg: &Config, data: &mut Data) {
|
||||
if let Some(player) = &data.current_player {
|
||||
if let Ok(meta) = player.get_metadata() {
|
||||
for field in &cfg.metadata_fields {
|
||||
let key = field.field.clone();
|
||||
if field.field.eq("xesam:userRating") {
|
||||
if let Some(rating_string) = rating_to_string(meta.get(&key), &cfg.rating_icons) {
|
||||
data.display_text.insert(key, rating_string);
|
||||
} else {
|
||||
let key = field.field.clone();
|
||||
match m.get(&key) {
|
||||
Some(value) => {
|
||||
debug!("inserting {}: '{}'", key, value_to_string(value, cfg.array_separator));
|
||||
data.display_text.insert(key, value_to_string(value, cfg.array_separator));
|
||||
},
|
||||
None => {
|
||||
debug!("field {} is empty!", key);
|
||||
data.display_text.insert(key, format!("No {}", field.field.clone().trim_start_matches("xesam:")));
|
||||
},
|
||||
}
|
||||
data.display_text.remove(&key);
|
||||
}
|
||||
} else {
|
||||
match meta.get(&key) {
|
||||
Some(value) => data.display_text.insert(key, value_to_string(value, cfg.array_separator)),
|
||||
None => data.display_text.insert(key, format!("No {}", field.field.clone().trim_start_matches("xesam:"))),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||