diff --git a/src/providers/pmvhaven.rs b/src/providers/pmvhaven.rs index 50000c1..3b59cd2 100644 --- a/src/providers/pmvhaven.rs +++ b/src/providers/pmvhaven.rs @@ -12,7 +12,7 @@ use htmlentity::entity::{ICodedDataTrait, decode}; use std::fmt::Write; use std::sync::{Arc, RwLock}; use std::vec; -use url::form_urlencoded::byte_serialize; +use url::form_urlencoded::Serializer; error_chain! { foreign_links { @@ -37,6 +37,13 @@ impl PmvhavenProvider { } } + fn encode_query_value(value: &str) -> String { + let mut serializer = Serializer::new(String::new()); + serializer.append_pair("v", value); + let encoded = serializer.finish(); + encoded.strip_prefix("v=").unwrap_or(&encoded).to_string() + } + fn build_channel(&self, clientversion: ClientVersion) -> Channel { let _ = clientversion; @@ -191,19 +198,19 @@ impl PmvhavenProvider { _ => "", }; - let encoded_search: String = byte_serialize(search.as_bytes()).collect(); + let encoded_search = Self::encode_query_value(&search); let mut extra_filters = String::new(); if let Ok(stars) = self.stars.read() { if let Some(star) = stars.iter().find(|s| s.eq_ignore_ascii_case(&search)) { - let encoded_star: String = byte_serialize(star.as_bytes()).collect(); + let encoded_star = Self::encode_query_value(star); extra_filters.push_str(&format!("&stars={encoded_star}")); } } if let Ok(cats) = self.categories.read() { if let Some(cat) = cats.iter().find(|c| c.eq_ignore_ascii_case(&search)) { - let encoded_cat: String = byte_serialize(cat.as_bytes()).collect(); + let encoded_cat = Self::encode_query_value(cat); extra_filters.push_str(&format!("&tagMode=OR&tags={encoded_cat}&expandTags=false")); } } @@ -223,14 +230,6 @@ impl PmvhavenProvider { "{}/api/videos/search?limit=100&page={page}{duration}{sort}{extra_filters}&query={encoded_search}", self.url )); - urls.push(format!( - "{}/api/videos?limit=100&page={page}{duration}{sort}{extra_filters}&q={encoded_search}", - self.url - )); - urls.push(format!( - "{}/api/videos?limit=100&page={page}{duration}{sort}{extra_filters}&search={encoded_search}", - self.url - )); } let mut requester = requester_or_default(&options, "pmvhaven", "query");