diff --git a/src/print_text.rs b/src/print_text.rs index 24d3daf..7af9c15 100644 --- a/src/print_text.rs +++ b/src/print_text.rs @@ -6,49 +6,58 @@ use crate::structs::{config::{Field, Config}, data::Data}; // TODO: update this function to apply a 'fuzzy' mode instead (possibly add config option). // This would find the space character nearest the num_chars index and cut off there, allowing for cleaner truncation. -fn cutoff(fields: &Vec, brk: char, strings: &mut HashMap) { +fn cutoff(fields: &Vec, brk: Option, strings: &mut HashMap) { for field in fields { if !field.field.eq("xesam:userRating") && !field.field.eq("xesam:autoRating") { let a = strings.get(&field.field); if a.is_some() && a.unwrap().len() >= field.num_chars as usize { let mut b = a.unwrap().clone(); b.truncate(field.num_chars as usize); - b.push(brk); + if let Some(c) = brk { + b.push(c) + } strings.insert(field.field.clone(), b); } } } } +fn append_prefix(b: &mut Builder, data: &Data) { + b.append(data.display_prefix.clone()); + b.append(" "); +} + +fn append_fields(b: &mut Builder, cfg: &Config, data: &Data) { + let mut idx = 0; let len = data.display_text.len() as i32; + for string in &cfg.metadata_fields { + if let Some(string) = data.display_text.get(&string.field) { + idx += 1; + b.append(string.clone()); + if idx < len {b.append(format!(" {} ", cfg.metadata_separator))}; + } else { + info!("failed to get {} value!", string.field); + } + } +} + fn build_string(cfg: &Config, data: &mut Data) -> String { let mut b = Builder::default(); - - if cfg.hide_output && data.current_player.is_none() { - b.append(' '); - } else { - cutoff(&cfg.metadata_fields, cfg.break_character, &mut data.display_text); - if cfg.render_prefix { - b.append(data.display_prefix.clone()); - b.append(" "); - } - b.append(format!("%{{T{}}}", cfg.font_index)); - let mut idx = 0; let len = cfg.metadata_fields.len() as i32; - for string in &cfg.metadata_fields { - if let Some(string) = data.display_text.get(&string.field) { - idx += 1; - b.append(string.clone()); - if idx < len {b.append(format!(" {} ", cfg.metadata_separator))}; - // TODO: fix the above its a mess and outputs incorrectly sometimes - } else { - info!("failed to get {} value!", string.field); - } - } - b.append("%{T-}"); + + if cfg.render_prefix { + append_prefix(&mut b, data); } - b.string().unwrap_or("Failed to unwrap stringBuilder!".to_owned()) + b.append(format!("%{{T{}}}", cfg.font_index)); + append_fields(&mut b, cfg, data); + b.append("%{T-}"); + + b.string().unwrap_or("Failed to unwrap string!".to_owned()) } pub fn print_text(cfg: &Config, data: &mut Data) { - println!("{}", build_string(cfg, data)); - + if cfg.hide_output && data.current_player.is_none() { + println!(""); + } else { + cutoff(&cfg.metadata_fields, cfg.break_character, &mut data.display_text); + println!("{}", build_string(cfg, data)); + } } \ No newline at end of file