error fixes
This commit is contained in:
@@ -813,11 +813,8 @@ mod tests {
|
||||
let formats = item.formats.as_ref().expect("formats present");
|
||||
assert_eq!(formats.len(), 1);
|
||||
assert_eq!(formats[0].url, "https://coomer.st/data/abc/clip.mp4");
|
||||
let headers = formats[0]
|
||||
.http_headers
|
||||
.as_ref()
|
||||
.expect("http_headers present");
|
||||
assert_eq!(headers.get("Referer").map(String::as_str), Some(REFERER));
|
||||
let headers = formats[0].http_headers_pairs();
|
||||
assert!(headers.iter().any(|(k, v)| k == "Referer" && v == REFERER));
|
||||
assert_eq!(item.uploadedAt, Some(1735787045));
|
||||
}
|
||||
|
||||
|
||||
@@ -283,6 +283,8 @@ impl HentaimamaProvider {
|
||||
let document = Html::parse_document(html);
|
||||
let card_selector = Self::selector("article.se.episodes")?;
|
||||
let link_selector = Self::selector("div.season_m a")?;
|
||||
let series_title_selector = Self::selector("span.b")?;
|
||||
let episode_title_selector = Self::selector("span.c")?;
|
||||
let img_selector = Self::selector("img")?;
|
||||
let rating_selector = Self::selector("div.rating")?;
|
||||
let rating_re = Regex::new(r"([0-9]+(?:\.[0-9]+)?)").unwrap();
|
||||
@@ -298,7 +300,16 @@ impl HentaimamaProvider {
|
||||
let Some(url) = link.value().attr("href") else {
|
||||
continue;
|
||||
};
|
||||
let title = Self::decode_entities(&link.text().collect::<String>());
|
||||
// The series title and episode label are adjacent <span> siblings
|
||||
// with no whitespace between their text nodes.
|
||||
let series_title = link.select(&series_title_selector).next().map(|e| e.text().collect::<String>());
|
||||
let episode_title = link.select(&episode_title_selector).next().map(|e| e.text().collect::<String>());
|
||||
let title = match (series_title, episode_title) {
|
||||
(Some(series), Some(episode)) if !episode.trim().is_empty() => format!("{series} {episode}"),
|
||||
(Some(series), _) => series,
|
||||
_ => link.text().collect::<String>(),
|
||||
};
|
||||
let title = Self::decode_entities(&title);
|
||||
if title.is_empty() {
|
||||
continue;
|
||||
}
|
||||
@@ -379,7 +390,7 @@ impl HentaimamaProvider {
|
||||
|
||||
fn rtmp_p_regex() -> &'static Regex {
|
||||
static RE: std::sync::OnceLock<Regex> = std::sync::OnceLock::new();
|
||||
RE.get_or_init(|| Regex::new(r#"dt_embed=rtmp[^"]*?[?&]p=([A-Za-z0-9+/=]+)"#).expect("valid regex"))
|
||||
RE.get_or_init(|| Regex::new(r#"dt_embed=rtmp[^"]*?[;&?]p=([A-Za-z0-9+/=]+)"#).expect("valid regex"))
|
||||
}
|
||||
|
||||
fn iframe_src_regex() -> &'static Regex {
|
||||
@@ -416,9 +427,9 @@ impl HentaimamaProvider {
|
||||
}
|
||||
|
||||
fn format_from_jwplayer(embed_html: &str) -> Option<VideoFormat> {
|
||||
let src = &Self::jwplayer_file_regex().captures(embed_html)?[1];
|
||||
let src = Self::jwplayer_file_regex().captures(embed_html)?[1].replace("\\/", "/");
|
||||
let container = if src.to_lowercase().contains(".m3u8") { "m3u8" } else { "mp4" };
|
||||
Some(VideoFormat::new(src.to_string(), "auto".to_string(), container.to_string()))
|
||||
Some(VideoFormat::new(src, "auto".to_string(), container.to_string()))
|
||||
}
|
||||
|
||||
async fn fetch_player_iframe(
|
||||
|
||||
@@ -848,8 +848,8 @@ mod tests {
|
||||
let formats = item.formats.as_ref().expect("formats should be populated");
|
||||
assert_eq!(formats.len(), 1);
|
||||
assert!(formats[0].url.contains("get_file/6/abcdef/228000/228306/228306.mp4"));
|
||||
let headers = formats[0].http_headers.as_ref().expect("headers set");
|
||||
assert_eq!(headers.get("Referer").map(String::as_str), Some(REFERER));
|
||||
let headers = formats[0].http_headers_pairs();
|
||||
assert!(headers.iter().any(|(k, v)| k == "Referer" && v == REFERER));
|
||||
assert_eq!(
|
||||
item.preview.as_deref(),
|
||||
Some("https://notfans.com/contents/videos_screenshots/228000/228306/preview.jpg")
|
||||
|
||||
Reference in New Issue
Block a user