diff --git a/src/providers/heavyfetish.rs b/src/providers/heavyfetish.rs index 40e2c82..64c6d1c 100644 --- a/src/providers/heavyfetish.rs +++ b/src/providers/heavyfetish.rs @@ -169,11 +169,10 @@ impl HeavyfetishProvider { Channel { id: "heavyfetish".to_string(), name: "HeavyFetish".to_string(), - description: - "HeavyFetish videos, categories, tags, models, and uploader archives.".to_string(), - premium: false, - favicon: "https://www.google.com/s2/favicons?sz=64&domain=heavyfetish.com" + description: "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(), status: "active".to_string(), categories: categories.iter().map(|value| value.title.clone()).collect(), options: vec![ @@ -321,11 +320,7 @@ impl HeavyfetishProvider { } fn parse_percent(text: &str) -> Option { - text.trim() - .trim_end_matches('%') - .trim() - .parse::() - .ok() + text.trim().trim_end_matches('%').trim().parse::().ok() } fn sort_param(sort: &str) -> Option<&'static str> { @@ -439,7 +434,11 @@ impl HeavyfetishProvider { let selector = Self::selector("a[href]")?; 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/")) { continue; } @@ -487,7 +486,11 @@ impl HeavyfetishProvider { let document = Html::parse_document(&html); 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 .value() .attr("title") @@ -530,7 +533,11 @@ impl HeavyfetishProvider { let document = Html::parse_document(&html); 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/")) { continue; } @@ -611,11 +618,17 @@ impl HeavyfetishProvider { } } - fn match_filter(options: &[FilterOption], query: &str, kind: TargetKind) -> Option { + fn match_filter( + options: &[FilterOption], + query: &str, + kind: TargetKind, + ) -> Option { let normalized_query = Self::normalize_title(query); options .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 { kind, value: value.id.clone(), @@ -854,7 +867,16 @@ impl HeavyfetishProvider { let order = ["2160p", "1440p", "1080p", "720p", "480p", "360p", "240p"]; 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) } @@ -887,8 +909,7 @@ impl HeavyfetishProvider { let info_span_selector = Self::selector(".block-details .info .item span")?; let category_selector = Self::selector(".block-details .info a[href*=\"/categories/\"]")?; let tag_selector = Self::selector(".block-details .info a[href*=\"/tags/\"]")?; - let model_selector = - Self::selector(".block-details .info a[href*=\"/fetish-models/\"]")?; + let model_selector = Self::selector(".block-details .info a[href*=\"/fetish-models/\"]")?; if let Some(title) = Self::extract_js_value(&flashvars, &title_regex) { if !title.is_empty() { @@ -1066,8 +1087,11 @@ impl HeavyfetishProvider { } } - let mut requester = - requester_or_default(options, "heavyfetish", "fetch_items_for_url.requester_missing"); + let mut requester = requester_or_default( + options, + "heavyfetish", + "fetch_items_for_url.requester_missing", + ); let html = requester .get(&url, None) .await