dynamic base url
This commit is contained in:
@@ -172,12 +172,18 @@ impl SpankbangProvider {
|
||||
format!("{}/{}", self.url, url.trim_start_matches("./"))
|
||||
}
|
||||
|
||||
fn proxy_url(&self, url: &str) -> String {
|
||||
fn proxy_url(&self, proxy_base_url: &str, url: &str) -> String {
|
||||
let path = url
|
||||
.strip_prefix(&self.url)
|
||||
.unwrap_or(url)
|
||||
.trim_start_matches('/');
|
||||
format!("https://hottub.spacemoehre.de/proxy/spankbang/{path}")
|
||||
if proxy_base_url.is_empty() {
|
||||
return format!("/proxy/spankbang/{path}");
|
||||
}
|
||||
format!(
|
||||
"{}/proxy/spankbang/{path}",
|
||||
proxy_base_url.trim_end_matches('/')
|
||||
)
|
||||
}
|
||||
|
||||
fn decode_html(text: &str) -> String {
|
||||
@@ -258,6 +264,7 @@ impl SpankbangProvider {
|
||||
views_selector: &Selector,
|
||||
rating_selector: &Selector,
|
||||
meta_link_selector: &Selector,
|
||||
proxy_base_url: &str,
|
||||
) -> Option<VideoItem> {
|
||||
let card_html = card.html();
|
||||
let card_text = Self::collapse_whitespace(&card.text().collect::<Vec<_>>().join(" "));
|
||||
@@ -312,7 +319,7 @@ impl SpankbangProvider {
|
||||
let mut item = VideoItem::new(
|
||||
id,
|
||||
title,
|
||||
self.proxy_url(&href),
|
||||
self.proxy_url(proxy_base_url, &href),
|
||||
"spankbang".to_string(),
|
||||
thumb,
|
||||
duration,
|
||||
@@ -344,7 +351,7 @@ impl SpankbangProvider {
|
||||
Some(item)
|
||||
}
|
||||
|
||||
fn get_video_items_from_html(&self, html: String) -> Vec<VideoItem> {
|
||||
fn get_video_items_from_html(&self, html: String, proxy_base_url: &str) -> Vec<VideoItem> {
|
||||
let document = Html::parse_document(&html);
|
||||
let video_list_selector = Selector::parse(r#"[data-testid="video-list"]"#).unwrap();
|
||||
let card_selector = Selector::parse(r#"[data-testid="video-item"]"#).unwrap();
|
||||
@@ -378,6 +385,7 @@ impl SpankbangProvider {
|
||||
&views_selector,
|
||||
&rating_selector,
|
||||
&meta_link_selector,
|
||||
proxy_base_url,
|
||||
) {
|
||||
items.push(item);
|
||||
}
|
||||
@@ -432,7 +440,8 @@ impl SpankbangProvider {
|
||||
return Ok(old_items);
|
||||
}
|
||||
|
||||
let video_items = self.get_video_items_from_html(text);
|
||||
let proxy_base_url = options.public_url_base.as_deref().unwrap_or_default();
|
||||
let video_items = self.get_video_items_from_html(text, proxy_base_url);
|
||||
if !video_items.is_empty() {
|
||||
cache.remove(&video_url);
|
||||
cache.insert(video_url.clone(), video_items.clone());
|
||||
@@ -489,7 +498,8 @@ impl SpankbangProvider {
|
||||
return Ok(old_items);
|
||||
}
|
||||
|
||||
let video_items = self.get_video_items_from_html(text);
|
||||
let proxy_base_url = options.public_url_base.as_deref().unwrap_or_default();
|
||||
let video_items = self.get_video_items_from_html(text, proxy_base_url);
|
||||
if !video_items.is_empty() {
|
||||
cache.remove(&video_url);
|
||||
cache.insert(video_url.clone(), video_items.clone());
|
||||
@@ -634,13 +644,13 @@ mod tests {
|
||||
</div>
|
||||
"#;
|
||||
|
||||
let items = provider.get_video_items_from_html(html.to_string());
|
||||
let items = provider.get_video_items_from_html(html.to_string(), "https://example.com");
|
||||
assert_eq!(items.len(), 1);
|
||||
assert_eq!(items[0].id, "6597754");
|
||||
assert_eq!(items[0].title, "Adriana's Fleshlight Insertion");
|
||||
assert_eq!(
|
||||
items[0].url,
|
||||
"https://hottub.spacemoehre.de/proxy/spankbang/3xeuy/video/adriana+s+fleshlight+insertion"
|
||||
"https://example.com/proxy/spankbang/3xeuy/video/adriana+s+fleshlight+insertion"
|
||||
);
|
||||
assert_eq!(
|
||||
items[0].thumb,
|
||||
@@ -691,7 +701,7 @@ mod tests {
|
||||
</div>
|
||||
"#;
|
||||
|
||||
let items = provider.get_video_items_from_html(html.to_string());
|
||||
let items = provider.get_video_items_from_html(html.to_string(), "https://example.com");
|
||||
assert_eq!(items.len(), 1);
|
||||
assert_eq!(items[0].id, "2");
|
||||
assert_eq!(items[0].title, "Free video");
|
||||
@@ -728,7 +738,7 @@ mod tests {
|
||||
</div>
|
||||
"#;
|
||||
|
||||
let items = provider.get_video_items_from_html(html.to_string());
|
||||
let items = provider.get_video_items_from_html(html.to_string(), "https://example.com");
|
||||
assert_eq!(items.len(), 1);
|
||||
assert_eq!(items[0].id, "222");
|
||||
assert_eq!(items[0].title, "Right result");
|
||||
|
||||
Reference in New Issue
Block a user