heavyfetish testing

This commit is contained in:
Simon
2026-04-26 09:53:00 +00:00
committed by ForgeCode
parent 4400f21b79
commit 698644c5f8

View File

@@ -169,11 +169,10 @@ impl HeavyfetishProvider {
Channel { Channel {
id: "heavyfetish".to_string(), id: "heavyfetish".to_string(),
name: "HeavyFetish".to_string(), name: "HeavyFetish".to_string(),
description: description: "HeavyFetish videos, categories, tags, models, and uploader archives."
"HeavyFetish videos, categories, tags, models, and uploader archives.".to_string(),
premium: false,
favicon: "https://www.google.com/s2/favicons?sz=64&domain=heavyfetish.com"
.to_string(), .to_string(),
premium: false,
favicon: "https://www.google.com/s2/favicons?sz=64&domain=heavyfetish.com".to_string(),
status: "active".to_string(), status: "active".to_string(),
categories: categories.iter().map(|value| value.title.clone()).collect(), categories: categories.iter().map(|value| value.title.clone()).collect(),
options: vec![ options: vec![
@@ -321,11 +320,7 @@ impl HeavyfetishProvider {
} }
fn parse_percent(text: &str) -> Option<f32> { fn parse_percent(text: &str) -> Option<f32> {
text.trim() text.trim().trim_end_matches('%').trim().parse::<f32>().ok()
.trim_end_matches('%')
.trim()
.parse::<f32>()
.ok()
} }
fn sort_param(sort: &str) -> Option<&'static str> { fn sort_param(sort: &str) -> Option<&'static str> {
@@ -439,7 +434,11 @@ impl HeavyfetishProvider {
let selector = Self::selector("a[href]")?; let selector = Self::selector("a[href]")?;
for element in document.select(&selector) { for element in document.select(&selector) {
let href = element.value().attr("href").unwrap_or_default().trim_end_matches('/'); let href = element
.value()
.attr("href")
.unwrap_or_default()
.trim_end_matches('/');
if !href.starts_with(&format!("{base_url}/tags/")) { if !href.starts_with(&format!("{base_url}/tags/")) {
continue; continue;
} }
@@ -487,7 +486,11 @@ impl HeavyfetishProvider {
let document = Html::parse_document(&html); let document = Html::parse_document(&html);
for element in document.select(&selector) { for element in document.select(&selector) {
let href = element.value().attr("href").unwrap_or_default().trim_end_matches('/'); let href = element
.value()
.attr("href")
.unwrap_or_default()
.trim_end_matches('/');
let title = element let title = element
.value() .value()
.attr("title") .attr("title")
@@ -530,7 +533,11 @@ impl HeavyfetishProvider {
let document = Html::parse_document(&html); let document = Html::parse_document(&html);
for element in document.select(&selector) { for element in document.select(&selector) {
let href = element.value().attr("href").unwrap_or_default().trim_end_matches('/'); let href = element
.value()
.attr("href")
.unwrap_or_default()
.trim_end_matches('/');
if !href.starts_with(&format!("{base_url}/members/")) { if !href.starts_with(&format!("{base_url}/members/")) {
continue; continue;
} }
@@ -611,11 +618,17 @@ impl HeavyfetishProvider {
} }
} }
fn match_filter(options: &[FilterOption], query: &str, kind: TargetKind) -> Option<QueryTarget> { fn match_filter(
options: &[FilterOption],
query: &str,
kind: TargetKind,
) -> Option<QueryTarget> {
let normalized_query = Self::normalize_title(query); let normalized_query = Self::normalize_title(query);
options options
.iter() .iter()
.find(|value| value.id != "all" && Self::normalize_title(&value.title) == normalized_query) .find(|value| {
value.id != "all" && Self::normalize_title(&value.title) == normalized_query
})
.map(|value| QueryTarget { .map(|value| QueryTarget {
kind, kind,
value: value.id.clone(), value: value.id.clone(),
@@ -854,7 +867,16 @@ impl HeavyfetishProvider {
let order = ["2160p", "1440p", "1080p", "720p", "480p", "360p", "240p"]; let order = ["2160p", "1440p", "1080p", "720p", "480p", "360p", "240p"];
let mut formats = Vec::new(); let mut formats = Vec::new();
for quality in order {
let Some(url) = seen.get(quality) else {
continue;
};
let format = VideoFormat::new(page_url.to_string().clone(), quality.to_string(), "mp4".to_string())
.format_id(quality.to_string())
.http_header("Referer".to_string(), page_url.to_string())
.http_header("User-Agent".to_string(), BROWSER_UA.to_string());
formats.push(format);
}
Ok(formats) Ok(formats)
} }
@@ -887,8 +909,7 @@ impl HeavyfetishProvider {
let info_span_selector = Self::selector(".block-details .info .item span")?; let info_span_selector = Self::selector(".block-details .info .item span")?;
let category_selector = Self::selector(".block-details .info a[href*=\"/categories/\"]")?; let category_selector = Self::selector(".block-details .info a[href*=\"/categories/\"]")?;
let tag_selector = Self::selector(".block-details .info a[href*=\"/tags/\"]")?; let tag_selector = Self::selector(".block-details .info a[href*=\"/tags/\"]")?;
let model_selector = let model_selector = Self::selector(".block-details .info a[href*=\"/fetish-models/\"]")?;
Self::selector(".block-details .info a[href*=\"/fetish-models/\"]")?;
if let Some(title) = Self::extract_js_value(&flashvars, &title_regex) { if let Some(title) = Self::extract_js_value(&flashvars, &title_regex) {
if !title.is_empty() { if !title.is_empty() {
@@ -1066,8 +1087,11 @@ impl HeavyfetishProvider {
} }
} }
let mut requester = let mut requester = requester_or_default(
requester_or_default(options, "heavyfetish", "fetch_items_for_url.requester_missing"); options,
"heavyfetish",
"fetch_items_for_url.requester_missing",
);
let html = requester let html = requester
.get(&url, None) .get(&url, None)
.await .await