From 245744a3175b222e78c1d9d5fa716c80778635a8 Mon Sep 17 00:00:00 2001 From: Book-reader Date: Thu, 8 May 2025 15:46:18 +1200 Subject: [PATCH] properly format bang urls --- asklyphe-frontend/src/bangs.rs | 53 +++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/asklyphe-frontend/src/bangs.rs b/asklyphe-frontend/src/bangs.rs index 5055223..8307961 100644 --- a/asklyphe-frontend/src/bangs.rs +++ b/asklyphe-frontend/src/bangs.rs @@ -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 { - #[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 { 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 { } }).filter(|bang| bang.is_some()).map(|bang| bang.unwrap()).collect::>().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 }