forked from asklyphe-public/asklyphe
properly format bang urls
This commit is contained in:
parent
109e20c7b4
commit
245744a317
1 changed files with 30 additions and 23 deletions
|
@ -39,18 +39,20 @@ impl Bangs {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_bangs_or_whatever(query: &String) -> Option<String> {
|
#[derive(Debug, Clone)]
|
||||||
#[derive(Debug, Clone)]
|
struct BangLoc<'a> {
|
||||||
struct Bang<'a> {
|
pub url: &'a str,
|
||||||
pub name: &'a str,
|
|
||||||
pub start_idx: usize,
|
pub start_idx: usize,
|
||||||
pub end_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}
|
||||||
}
|
}
|
||||||
impl<'a> Bang<'_> {
|
}
|
||||||
fn init(name: &'a str, start_idx: usize, end_idx: usize) -> Bang {
|
|
||||||
Bang {name, start_idx, end_idx}
|
pub fn do_bangs_or_whatever(query: &String) -> Option<String> {
|
||||||
}
|
// TODO: make this a little more procedural and not as confusing
|
||||||
}
|
|
||||||
error!("Hello, World!, you searched \"{}\"", query);
|
error!("Hello, World!, you searched \"{}\"", query);
|
||||||
return match query.match_indices(BANG_PREFIX).map(|idx| {
|
return match query.match_indices(BANG_PREFIX).map(|idx| {
|
||||||
let bang_start_idx = idx.0;
|
let bang_start_idx = idx.0;
|
||||||
|
@ -67,7 +69,7 @@ pub fn do_bangs_or_whatever(query: &String) -> Option<String> {
|
||||||
Some(bang_text) => {
|
Some(bang_text) => {
|
||||||
let bang_end_idx = bang_start_idx + 1 + bang_text.len();
|
let bang_end_idx = bang_start_idx + 1 + bang_text.len();
|
||||||
match query.chars().nth(bang_end_idx).unwrap_or(' ').is_ascii_whitespace() {
|
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
|
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() {
|
}).filter(|bang| bang.is_some()).map(|bang| bang.unwrap()).collect::<Vec<_>>().first() {
|
||||||
Some(bang) => {
|
Some(bang) => {
|
||||||
let query_trimmed = format!(
|
debug!("Initial query: \"{}\"", query);
|
||||||
"{}{}",
|
let query_split = query.split_once(query.get(bang.start_idx..bang.end_idx).unwrap()).unwrap();
|
||||||
query.get(0..bang.start_idx).unwrap(),
|
debug!("Split query: {:?}", query_split);
|
||||||
if bang.end_idx == query.len() {
|
let query_trimmed = format!("{}{}", query_split.0, query_split.1);
|
||||||
""
|
debug!("Trimmed query: \"{}\"", query_trimmed);
|
||||||
} else {
|
|
||||||
query.get(bang.end_idx..query.len()).unwrap()
|
let bang_url_split = bang.url.split_once("{}").unwrap();
|
||||||
});
|
debug!("Split bang URL: {:?}", bang_url_split);
|
||||||
debug!("Old query: \"{}\"", query);
|
let bang_url = format!(
|
||||||
debug!("New query: \"{}\"", query_trimmed);
|
"{}{}{}",
|
||||||
None
|
bang_url_split.0,
|
||||||
|
query_trimmed,
|
||||||
|
bang_url_split.1
|
||||||
|
);
|
||||||
|
debug!("Final URL: \"{}\"", bang_url);
|
||||||
|
Some(bang_url)
|
||||||
},
|
},
|
||||||
None => None
|
None => None
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue