use log::trace;
use regex::Regex;
use std::sync::LazyLock;
static RE_IMAGE_NAME: LazyLock<Regex> = LazyLock::new(|| {
Regex::new(r"^((MOV|VID|mov|vid|IMG|img|NO_?DATE|no_?date)?[-_]*)*(.*?)[-_]*?\.([A-Za-z0-9]+)$")
.expect("Failed to compile regex")
});
static RE_REMOVE_EXT: LazyLock<Regex> =
LazyLock::new(|| Regex::new(r"\.[A-Za-z]+$").expect("Failed to compile regex"));
static RE_REMOVE_NODATE: LazyLock<Regex> =
LazyLock::new(|| Regex::new(r"(NO_?DATE|no_?date)").expect("Failed to compile regex"));
pub fn clean_image_name(name: &str) -> String {
let caps = RE_IMAGE_NAME.captures(name);
let result = match caps {
None => RE_REMOVE_EXT.replace(name, "").to_string(),
Some(caps) => {
if let (Some(cap_name), Some(_cap_ext)) = (caps.get(3), caps.get(4)) {
RE_REMOVE_NODATE.replace(cap_name.as_str(), "").to_string()
} else {
RE_REMOVE_NODATE
.replace(RE_REMOVE_EXT.replace(name, "").as_ref(), "")
.to_string()
}
}
};
trace!("Cleaned name: {name:?} -> {result:?}");
result
}