added fuzzy cutoff functionality
This commit is contained in:
parent
d6438e30f2
commit
fd3c041e28
|
|
@ -4,19 +4,20 @@ use string_builder::Builder;
|
||||||
|
|
||||||
use crate::structs::{config::{Field, Config}, data::Data};
|
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 fuzzy_cutoff(str: &str) -> usize{
|
||||||
fn cutoff(fields: &Vec<Field>, brk: Option<char>, strings: &mut HashMap<String, String>) {
|
str.rfind(char::is_whitespace).unwrap_or(usize::MAX)
|
||||||
for field in fields {
|
}
|
||||||
if !field.field.eq("xesam:userRating") && !field.field.eq("xesam:autoRating") {
|
|
||||||
let a = strings.get(&field.field);
|
fn cutoff(fields: &Vec<Field>, brk: Option<char>, fuzzy: bool, strings: &mut HashMap<String, String>) {
|
||||||
if a.is_some() && a.unwrap().len() >= field.num_chars as usize {
|
for field in fields {
|
||||||
let mut b = a.unwrap().clone();
|
if let Some(str) = strings.get_mut(&field.field) {
|
||||||
b.truncate(field.num_chars as usize);
|
if !field.field.eq("xesam:userRating") && str.len() >= field.num_chars as usize {
|
||||||
if let Some(c) = brk {
|
str.truncate(field.num_chars as usize);
|
||||||
b.push(c)
|
if fuzzy {str.truncate(fuzzy_cutoff(str))}
|
||||||
|
if let Some(c) = brk {
|
||||||
|
str.push(c);
|
||||||
}
|
}
|
||||||
strings.insert(field.field.clone(), b);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -54,10 +55,10 @@ fn build_string(cfg: &Config, data: &mut Data) -> String {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_text(cfg: &Config, data: &mut Data) {
|
pub fn print_text(cfg: &Config, data: &mut Data) {
|
||||||
if cfg.hide_output && data.current_player.is_none() {
|
if (cfg.hide_output && data.current_player.is_none()) || data.display_text.is_empty() || cfg.metadata_fields.is_empty() {
|
||||||
println!("");
|
println!("");
|
||||||
} else {
|
} else {
|
||||||
cutoff(&cfg.metadata_fields, cfg.break_character, &mut data.display_text);
|
cutoff(&cfg.metadata_fields, cfg.break_character, cfg.fuzzy, &mut data.display_text);
|
||||||
println!("{}", build_string(cfg, data));
|
println!("{}", build_string(cfg, data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -52,6 +52,7 @@ pub struct Config {
|
||||||
pub metadata_separator: char,
|
pub metadata_separator: char,
|
||||||
pub array_separator: char,
|
pub array_separator: char,
|
||||||
pub hide_output: bool,
|
pub hide_output: bool,
|
||||||
|
pub fuzzy: bool,
|
||||||
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>,
|
||||||
|
|
@ -69,6 +70,7 @@ impl Default for Config {
|
||||||
metadata_separator: '|',
|
metadata_separator: '|',
|
||||||
array_separator: '+',
|
array_separator: '+',
|
||||||
hide_output: true,
|
hide_output: true,
|
||||||
|
fuzzy: false,
|
||||||
render_prefix: true,
|
render_prefix: true,
|
||||||
metadata_fields: vec![Field::constructor("xesam:title", 40), Field::constructor("xesam:artist", 20)],
|
metadata_fields: vec![Field::constructor("xesam:title", 40), Field::constructor("xesam:artist", 20)],
|
||||||
rating_icons: Rating::default(),
|
rating_icons: Rating::default(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue