properly format bang urls

This commit is contained in:
Book-reader 2025-05-08 15:46:18 +12:00
parent 109e20c7b4
commit 245744a317

View file

@ -39,18 +39,20 @@ impl Bangs {
}
#[derive(Debug, Clone)]
struct BangLoc<'a> {
pub url: &'a str,
pub start_idx: usize,
pub end_idx: usize,
}
impl<'a> BangLoc<'_> {
fn init(url: &'a str, start_idx: usize, end_idx: usize) -> BangLoc {
BangLoc {url, start_idx, end_idx}
}
}
pub fn do_bangs_or_whatever(query: &String) -> Option<String> {
#[derive(Debug, Clone)]
struct Bang<'a> {
pub name: &'a str,
pub start_idx: usize,
pub end_idx: usize,
}
impl<'a> Bang<'_> {
fn init(name: &'a str, start_idx: usize, end_idx: usize) -> Bang {
Bang {name, start_idx, end_idx}
}
}
// TODO: make this a little more procedural and not as confusing
error!("Hello, World!, you searched \"{}\"", query);
return match query.match_indices(BANG_PREFIX).map(|idx| {
let bang_start_idx = idx.0;
@ -67,7 +69,7 @@ pub fn do_bangs_or_whatever(query: &String) -> Option<String> {
Some(bang_text) => {
let bang_end_idx = bang_start_idx + 1 + bang_text.len();
match query.chars().nth(bang_end_idx).unwrap_or(' ').is_ascii_whitespace() {
true => Some(Bang::init(bang_full.1.0, bang_start_idx, bang_end_idx)),
true => Some(BangLoc::init(bang_full.1.0, bang_start_idx, bang_end_idx + 1)),
false => None
}
}
@ -89,17 +91,22 @@ pub fn do_bangs_or_whatever(query: &String) -> Option<String> {
}
}).filter(|bang| bang.is_some()).map(|bang| bang.unwrap()).collect::<Vec<_>>().first() {
Some(bang) => {
let query_trimmed = format!(
"{}{}",
query.get(0..bang.start_idx).unwrap(),
if bang.end_idx == query.len() {
""
} else {
query.get(bang.end_idx..query.len()).unwrap()
});
debug!("Old query: \"{}\"", query);
debug!("New query: \"{}\"", query_trimmed);
None
debug!("Initial query: \"{}\"", query);
let query_split = query.split_once(query.get(bang.start_idx..bang.end_idx).unwrap()).unwrap();
debug!("Split query: {:?}", query_split);
let query_trimmed = format!("{}{}", query_split.0, query_split.1);
debug!("Trimmed query: \"{}\"", query_trimmed);
let bang_url_split = bang.url.split_once("{}").unwrap();
debug!("Split bang URL: {:?}", bang_url_split);
let bang_url = format!(
"{}{}{}",
bang_url_split.0,
query_trimmed,
bang_url_split.1
);
debug!("Final URL: \"{}\"", bang_url);
Some(bang_url)
},
None => None
}