mirror of
https://github.com/Hopiu/lychee.git
synced 2026-05-14 08:43:13 +00:00
Add support for multiple matching quirks
This commit is contained in:
parent
1e7c1709ff
commit
749e700757
2 changed files with 10 additions and 10 deletions
|
|
@ -249,11 +249,10 @@ impl Client {
|
|||
let mut final_url = url.to_owned();
|
||||
let mut additional_headers = None;
|
||||
|
||||
let quirk = self.quirks.rewrite(url);
|
||||
if let Some(quirk) = quirk {
|
||||
for quirk in self.quirks.matching(url) {
|
||||
println!("Applying quirk: {:?}", quirk);
|
||||
if let Some(url_func) = quirk.url {
|
||||
final_url = url_func(url.to_owned());
|
||||
if let Some(rewrite) = quirk.rewrite {
|
||||
final_url = rewrite(url.to_owned());
|
||||
}
|
||||
additional_headers = quirk.headers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ pub struct Quirk {
|
|||
pub pattern: Regex,
|
||||
pub method: Option<reqwest::Method>,
|
||||
pub headers: Option<HeaderMap>,
|
||||
pub url: Option<fn(Url) -> Url>,
|
||||
pub rewrite: Option<fn(Url) -> Url>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
|
@ -49,14 +49,14 @@ impl Quirks {
|
|||
.parse()
|
||||
.unwrap(),
|
||||
)),
|
||||
url: None,
|
||||
rewrite: None,
|
||||
},
|
||||
Quirk {
|
||||
// https://stackoverflow.com/a/19377429/270334
|
||||
pattern: Regex::new(r"^(https?://)?(www\.)?(youtube\.com|youtu\.?be)").unwrap(),
|
||||
method: Some(Method::HEAD),
|
||||
headers: None,
|
||||
url: Some(|orig_url| {
|
||||
rewrite: Some(|orig_url| {
|
||||
let mut url = Url::parse("https://www.youtube.com/oembed?").unwrap();
|
||||
url.set_query(Some(&format!("url={}", orig_url.as_str())));
|
||||
url
|
||||
|
|
@ -67,12 +67,13 @@ impl Quirks {
|
|||
Self { quirks }
|
||||
}
|
||||
|
||||
pub fn rewrite(&self, url: &Url) -> Option<Quirk> {
|
||||
pub fn matching(&self, url: &Url) -> Vec<Quirk> {
|
||||
let mut matching = vec![];
|
||||
for quirk in &self.quirks {
|
||||
if quirk.pattern.is_match(url.as_str()) {
|
||||
return Some(quirk.clone());
|
||||
matching.push(quirk.clone());
|
||||
}
|
||||
}
|
||||
None
|
||||
matching
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue