debugging and single provider compime
This commit is contained in:
@@ -14,52 +14,8 @@ use crate::{
|
||||
videos::{ServerOptions, VideoItem},
|
||||
};
|
||||
|
||||
pub mod all;
|
||||
pub mod hanime;
|
||||
pub mod homoxxx;
|
||||
pub mod okporn;
|
||||
pub mod okxxx;
|
||||
pub mod perfectgirls;
|
||||
pub mod perverzija;
|
||||
pub mod pmvhaven;
|
||||
pub mod pornhat;
|
||||
pub mod pornhub;
|
||||
pub mod redtube;
|
||||
pub mod rule34video;
|
||||
pub mod spankbang;
|
||||
// pub mod hentaimoon;
|
||||
pub mod beeg;
|
||||
pub mod missav;
|
||||
pub mod omgxxx;
|
||||
pub mod paradisehill;
|
||||
pub mod porn00;
|
||||
pub mod porn4fans;
|
||||
pub mod porndish;
|
||||
pub mod pornzog;
|
||||
pub mod shooshtime;
|
||||
pub mod sxyprn;
|
||||
pub mod tnaflix;
|
||||
pub mod tokyomotion;
|
||||
pub mod viralxxxporn;
|
||||
pub mod vrporn;
|
||||
pub mod xfree;
|
||||
pub mod xxthots;
|
||||
pub mod yesporn;
|
||||
pub mod youjizz;
|
||||
// pub mod pornxp;
|
||||
pub mod chaturbate;
|
||||
pub mod freepornvideosxxx;
|
||||
pub mod heavyfetish;
|
||||
pub mod hentaihaven;
|
||||
pub mod hqporner;
|
||||
pub mod hsex;
|
||||
pub mod hypnotube;
|
||||
pub mod javtiful;
|
||||
pub mod noodlemagazine;
|
||||
pub mod pimpbunny;
|
||||
pub mod rule34gen;
|
||||
pub mod xxdbx;
|
||||
// pub mod tube8;
|
||||
include!(concat!(env!("OUT_DIR"), "/provider_selection.rs"));
|
||||
include!(concat!(env!("OUT_DIR"), "/provider_modules.rs"));
|
||||
|
||||
// convenient alias
|
||||
pub type DynProvider = Arc<dyn Provider>;
|
||||
@@ -72,180 +28,30 @@ pub struct ProviderChannelMetadata {
|
||||
|
||||
pub static ALL_PROVIDERS: Lazy<HashMap<&'static str, DynProvider>> = Lazy::new(|| {
|
||||
let mut m = HashMap::default();
|
||||
m.insert("all", Arc::new(all::AllProvider::new()) as DynProvider);
|
||||
m.insert(
|
||||
"perverzija",
|
||||
Arc::new(perverzija::PerverzijaProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"hanime",
|
||||
Arc::new(hanime::HanimeProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"pornhub",
|
||||
Arc::new(pornhub::PornhubProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"spankbang",
|
||||
Arc::new(spankbang::SpankbangProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"rule34video",
|
||||
Arc::new(rule34video::Rule34videoProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"redtube",
|
||||
Arc::new(redtube::RedtubeProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"okporn",
|
||||
Arc::new(okporn::OkpornProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"pornhat",
|
||||
Arc::new(pornhat::PornhatProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"perfectgirls",
|
||||
Arc::new(perfectgirls::PerfectgirlsProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"okxxx",
|
||||
Arc::new(okxxx::OkxxxProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"homoxxx",
|
||||
Arc::new(homoxxx::HomoxxxProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"missav",
|
||||
Arc::new(missav::MissavProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"xxthots",
|
||||
Arc::new(xxthots::XxthotsProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"yesporn",
|
||||
Arc::new(yesporn::YespornProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"sxyprn",
|
||||
Arc::new(sxyprn::SxyprnProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"porn00",
|
||||
Arc::new(porn00::Porn00Provider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"youjizz",
|
||||
Arc::new(youjizz::YoujizzProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"paradisehill",
|
||||
Arc::new(paradisehill::ParadisehillProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"porn4fans",
|
||||
Arc::new(porn4fans::Porn4fansProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"porndish",
|
||||
Arc::new(porndish::PorndishProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"shooshtime",
|
||||
Arc::new(shooshtime::ShooshtimeProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"pornzog",
|
||||
Arc::new(pornzog::PornzogProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"omgxxx",
|
||||
Arc::new(omgxxx::OmgxxxProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert("beeg", Arc::new(beeg::BeegProvider::new()) as DynProvider);
|
||||
m.insert(
|
||||
"tnaflix",
|
||||
Arc::new(tnaflix::TnaflixProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"tokyomotion",
|
||||
Arc::new(tokyomotion::TokyomotionProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"viralxxxporn",
|
||||
Arc::new(viralxxxporn::ViralxxxpornProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"vrporn",
|
||||
Arc::new(vrporn::VrpornProvider::new()) as DynProvider,
|
||||
);
|
||||
// m.insert("pornxp", Arc::new(pornxp::PornxpProvider::new()) as DynProvider);
|
||||
m.insert(
|
||||
"rule34gen",
|
||||
Arc::new(rule34gen::Rule34genProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"xxdbx",
|
||||
Arc::new(xxdbx::XxdbxProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"xfree",
|
||||
Arc::new(xfree::XfreeProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"hqporner",
|
||||
Arc::new(hqporner::HqpornerProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"pmvhaven",
|
||||
Arc::new(pmvhaven::PmvhavenProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"noodlemagazine",
|
||||
Arc::new(noodlemagazine::NoodlemagazineProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"pimpbunny",
|
||||
Arc::new(pimpbunny::PimpbunnyProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"javtiful",
|
||||
Arc::new(javtiful::JavtifulProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"hypnotube",
|
||||
Arc::new(hypnotube::HypnotubeProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"freepornvideosxxx",
|
||||
Arc::new(freepornvideosxxx::FreepornvideosxxxProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"heavyfetish",
|
||||
Arc::new(heavyfetish::HeavyfetishProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert("hsex", Arc::new(hsex::HsexProvider::new()) as DynProvider);
|
||||
m.insert(
|
||||
"hentaihaven",
|
||||
Arc::new(hentaihaven::HentaihavenProvider::new()) as DynProvider,
|
||||
);
|
||||
m.insert(
|
||||
"chaturbate",
|
||||
Arc::new(chaturbate::ChaturbateProvider::new()) as DynProvider,
|
||||
);
|
||||
// m.insert("tube8", Arc::new(tube8::Tube8Provider::new()) as DynProvider);
|
||||
// add more here as you migrate them
|
||||
include!(concat!(env!("OUT_DIR"), "/provider_registry.rs"));
|
||||
m
|
||||
});
|
||||
|
||||
pub fn init_providers_now() {
|
||||
// Idempotent & thread-safe: runs the Lazy init exactly once.
|
||||
crate::flow_debug!(
|
||||
"provider init selection={:?}",
|
||||
compile_time_selected_provider()
|
||||
);
|
||||
Lazy::force(&ALL_PROVIDERS);
|
||||
}
|
||||
|
||||
pub fn compile_time_selected_provider() -> Option<&'static str> {
|
||||
COMPILE_TIME_SELECTED_PROVIDER
|
||||
}
|
||||
|
||||
pub fn resolve_provider_for_build<'a>(channel: &'a str) -> &'a str {
|
||||
match compile_time_selected_provider() {
|
||||
Some(selected) if channel == "all" => selected,
|
||||
_ => channel,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn panic_payload_to_string(payload: Box<dyn std::any::Any + Send>) -> String {
|
||||
if let Some(s) = payload.downcast_ref::<&str>() {
|
||||
return (*s).to_string();
|
||||
@@ -260,10 +66,29 @@ pub async fn run_provider_guarded<F>(provider_name: &str, context: &str, fut: F)
|
||||
where
|
||||
F: Future<Output = Vec<VideoItem>>,
|
||||
{
|
||||
crate::flow_debug!(
|
||||
"provider guard enter provider={} context={}",
|
||||
provider_name,
|
||||
context
|
||||
);
|
||||
match AssertUnwindSafe(fut).catch_unwind().await {
|
||||
Ok(videos) => videos,
|
||||
Ok(videos) => {
|
||||
crate::flow_debug!(
|
||||
"provider guard exit provider={} context={} videos={}",
|
||||
provider_name,
|
||||
context,
|
||||
videos.len()
|
||||
);
|
||||
videos
|
||||
}
|
||||
Err(payload) => {
|
||||
let panic_msg = panic_payload_to_string(payload);
|
||||
crate::flow_debug!(
|
||||
"provider guard panic provider={} context={} panic={}",
|
||||
provider_name,
|
||||
context,
|
||||
&panic_msg
|
||||
);
|
||||
let _ = send_discord_error_report(
|
||||
format!("Provider panic: {}", provider_name),
|
||||
None,
|
||||
@@ -307,8 +132,21 @@ pub fn requester_or_default(
|
||||
context: &str,
|
||||
) -> Requester {
|
||||
match options.requester.clone() {
|
||||
Some(requester) => requester,
|
||||
Some(requester) => {
|
||||
crate::flow_debug!(
|
||||
"provider requester existing provider={} context={} trace={}",
|
||||
provider_name,
|
||||
context,
|
||||
requester.debug_trace_id().unwrap_or("none")
|
||||
);
|
||||
requester
|
||||
}
|
||||
None => {
|
||||
crate::flow_debug!(
|
||||
"provider requester fallback provider={} context={}",
|
||||
provider_name,
|
||||
context
|
||||
);
|
||||
report_provider_error_background(
|
||||
provider_name,
|
||||
context,
|
||||
@@ -343,52 +181,7 @@ pub fn build_proxy_url(options: &ServerOptions, proxy: &str, target: &str) -> St
|
||||
}
|
||||
|
||||
fn channel_metadata_for(id: &str) -> Option<ProviderChannelMetadata> {
|
||||
match id {
|
||||
"all" | "hottub" => Some(all::CHANNEL_METADATA),
|
||||
"pornhub" => Some(pornhub::CHANNEL_METADATA),
|
||||
"spankbang" => Some(spankbang::CHANNEL_METADATA),
|
||||
"rule34video" => Some(rule34video::CHANNEL_METADATA),
|
||||
"redtube" => Some(redtube::CHANNEL_METADATA),
|
||||
"okporn" => Some(okporn::CHANNEL_METADATA),
|
||||
"pornhat" => Some(pornhat::CHANNEL_METADATA),
|
||||
"perfectgirls" => Some(perfectgirls::CHANNEL_METADATA),
|
||||
"okxxx" => Some(okxxx::CHANNEL_METADATA),
|
||||
"homoxxx" => Some(homoxxx::CHANNEL_METADATA),
|
||||
"missav" => Some(missav::CHANNEL_METADATA),
|
||||
"xxthots" => Some(xxthots::CHANNEL_METADATA),
|
||||
"yesporn" => Some(yesporn::CHANNEL_METADATA),
|
||||
"sxyprn" => Some(sxyprn::CHANNEL_METADATA),
|
||||
"porn00" => Some(porn00::CHANNEL_METADATA),
|
||||
"youjizz" => Some(youjizz::CHANNEL_METADATA),
|
||||
"paradisehill" => Some(paradisehill::CHANNEL_METADATA),
|
||||
"porn4fans" => Some(porn4fans::CHANNEL_METADATA),
|
||||
"porndish" => Some(porndish::CHANNEL_METADATA),
|
||||
"shooshtime" => Some(shooshtime::CHANNEL_METADATA),
|
||||
"pornzog" => Some(pornzog::CHANNEL_METADATA),
|
||||
"omgxxx" => Some(omgxxx::CHANNEL_METADATA),
|
||||
"beeg" => Some(beeg::CHANNEL_METADATA),
|
||||
"tnaflix" => Some(tnaflix::CHANNEL_METADATA),
|
||||
"tokyomotion" => Some(tokyomotion::CHANNEL_METADATA),
|
||||
"viralxxxporn" => Some(viralxxxporn::CHANNEL_METADATA),
|
||||
"vrporn" => Some(vrporn::CHANNEL_METADATA),
|
||||
"rule34gen" => Some(rule34gen::CHANNEL_METADATA),
|
||||
"xxdbx" => Some(xxdbx::CHANNEL_METADATA),
|
||||
"xfree" => Some(xfree::CHANNEL_METADATA),
|
||||
"hqporner" => Some(hqporner::CHANNEL_METADATA),
|
||||
"pmvhaven" => Some(pmvhaven::CHANNEL_METADATA),
|
||||
"noodlemagazine" => Some(noodlemagazine::CHANNEL_METADATA),
|
||||
"pimpbunny" => Some(pimpbunny::CHANNEL_METADATA),
|
||||
"javtiful" => Some(javtiful::CHANNEL_METADATA),
|
||||
"hypnotube" => Some(hypnotube::CHANNEL_METADATA),
|
||||
"freepornvideosxxx" => Some(freepornvideosxxx::CHANNEL_METADATA),
|
||||
"heavyfetish" => Some(heavyfetish::CHANNEL_METADATA),
|
||||
"hsex" => Some(hsex::CHANNEL_METADATA),
|
||||
"hentaihaven" => Some(hentaihaven::CHANNEL_METADATA),
|
||||
"hanime" => Some(hanime::CHANNEL_METADATA),
|
||||
"perverzija" => Some(perverzija::CHANNEL_METADATA),
|
||||
"chaturbate" => Some(chaturbate::CHANNEL_METADATA),
|
||||
_ => None,
|
||||
}
|
||||
include!(concat!(env!("OUT_DIR"), "/provider_metadata_fn.rs"))
|
||||
}
|
||||
|
||||
fn channel_group_title(group_id: &str) -> &'static str {
|
||||
@@ -536,6 +329,11 @@ pub fn build_status_response(status: Status) -> StatusResponse {
|
||||
.collect::<Vec<_>>();
|
||||
assign_channel_sort_order(&mut channels);
|
||||
let channelGroups = build_channel_groups(&channels);
|
||||
crate::flow_debug!(
|
||||
"status response build channels={} groups={}",
|
||||
channels.len(),
|
||||
channelGroups.len()
|
||||
);
|
||||
|
||||
StatusResponse {
|
||||
id: status.id,
|
||||
@@ -590,7 +388,7 @@ pub trait Provider: Send + Sync {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[cfg(all(test, not(hottub_single_provider)))]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::status::ChannelOption;
|
||||
|
||||
Reference in New Issue
Block a user