archivebate work and pornxp returned
This commit is contained in:
12
build.rs
12
build.rs
@@ -11,6 +11,11 @@ struct ProviderDef {
|
||||
}
|
||||
|
||||
const PROVIDERS: &[ProviderDef] = &[
|
||||
ProviderDef {
|
||||
id: "pornxp",
|
||||
module: "pornxp",
|
||||
ty: "PornxpProvider",
|
||||
},
|
||||
ProviderDef {
|
||||
id: "all",
|
||||
module: "all",
|
||||
@@ -261,6 +266,11 @@ const PROVIDERS: &[ProviderDef] = &[
|
||||
module: "chaturbate",
|
||||
ty: "ChaturbateProvider",
|
||||
},
|
||||
ProviderDef {
|
||||
id: "archivebate",
|
||||
module: "archivebate",
|
||||
ty: "ArchivebateProvider",
|
||||
},
|
||||
];
|
||||
|
||||
fn main() {
|
||||
@@ -360,7 +370,7 @@ fn main() {
|
||||
|
||||
let selection = match selected.as_deref() {
|
||||
Some(selected_id) => format!(
|
||||
"pub const COMPILE_TIME_SELECTED_PROVIDER: Option<&str> = Some(\"{selected_id}\");"
|
||||
"pub const COMPILE_TIME_SELECTED_PROVIDER: Option<&str> = Some(\"{selected_id}\");",
|
||||
),
|
||||
None => "pub const COMPILE_TIME_SELECTED_PROVIDER: Option<&str> = None;".to_string(),
|
||||
};
|
||||
|
||||
@@ -7,6 +7,7 @@ This is the current implementation inventory as of this snapshot of the repo. Us
|
||||
| Provider | Group | `/api/uploaders` | Uses local `/proxy` | Notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `all` | `meta-search` | no | no | Aggregates all compiled providers. |
|
||||
| `archivebate` | `live-cams` | no | no | Livewire-backed cam archive listings with platform/gender/profile shortcuts. |
|
||||
| `beeg` | `mainstream-tube` | no | no | Basic mainstream tube pattern. |
|
||||
| `chaturbate` | `live-cams` | no | no | Live cam channel. |
|
||||
| `freepornvideosxxx` | `studio-network` | no | no | Studio-style scraper. |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Implement a new Hottub provider for `<SITE_NAME>` at `<BASE_URL>`.
|
||||
Implement a new Hottub provider for `archivebate1` at `https://archivebate1.com`.
|
||||
|
||||
You are working inside the Hottub Rust server. Your job is to add a functioning provider module that can survive handoff to another model with minimal guesswork. Do not stop at code generation. Carry the work through code, validation, and documentation updates.
|
||||
|
||||
@@ -70,6 +70,7 @@ Implementation requirements:
|
||||
- If uploader support is implemented, use a namespaced `uploaderId` such as `<channel>:<site-local-id>` so `/api/uploaders` can route directly.
|
||||
- If the query matches a known tag/uploader shortcut, use the direct archive URL instead of generic search.
|
||||
- If the site exposes real media URLs or HLS manifests, populate `formats`.
|
||||
- If the video page URL can be directly downloaded by yt-dlp, set `video.url` to the page URL and do not populate `formats`, as yt-dlp will extract formats dynamically.
|
||||
- If direct playback needs a referer/cookie transform, use a local `/proxy/...` route built with `build_proxy_url(&options, "...", target)`.
|
||||
- Keep the first version small and reliable. Add extra filters only after the default feed, search, and pagination are working.
|
||||
|
||||
@@ -85,7 +86,7 @@ Validation requirements:
|
||||
- page 2
|
||||
- at least one tag/uploader shortcut if implemented
|
||||
6. Verify thumbnails load.
|
||||
7. Verify `yt-dlp` can resolve `video.url` or one of `formats[*].url`.
|
||||
7. Verify `yt-dlp` can resolve `video.url` (if formats are not populated) or one of `formats[*].url` (if formats are populated).
|
||||
8. If a proxy route exists, verify it directly with `curl -I` or equivalent.
|
||||
|
||||
Testing commands to run:
|
||||
@@ -115,6 +116,7 @@ Important Hottub-specific rules:
|
||||
- Do not create a brand-new requester in normal provider fetches unless you have a strong reason.
|
||||
- Do not assume page URLs are playable media URLs.
|
||||
- Do not expose status filters that you did not implement in `get_videos`.
|
||||
- Do not populate `formats` if the page URL is yt-dlp compatible; instead, set `video.url` to the page URL.
|
||||
- Do not finish without checking at least one returned media URL with `yt-dlp`.
|
||||
- Do not claim pagination works unless page 2 was verified.
|
||||
|
||||
|
||||
1067
src/providers/archivebate.rs
Normal file
1067
src/providers/archivebate.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,6 @@ use crate::videos::{ServerOptions, VideoItem};
|
||||
use async_trait::async_trait;
|
||||
use error_chain::error_chain;
|
||||
use htmlentity::entity::{ICodedDataTrait, decode};
|
||||
// use std::sync::{Arc, RwLock};
|
||||
// use std::thread;
|
||||
use std::vec;
|
||||
|
||||
error_chain! {
|
||||
@@ -19,6 +17,12 @@ error_chain! {
|
||||
}
|
||||
}
|
||||
|
||||
pub const CHANNEL_METADATA: crate::providers::ProviderChannelMetadata =
|
||||
crate::providers::ProviderChannelMetadata {
|
||||
group_id: "mainstream-tube",
|
||||
tags: &["tube", "mainstream"],
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct PornxpProvider {
|
||||
url: String,
|
||||
|
||||
@@ -174,6 +174,7 @@ impl Requester {
|
||||
|
||||
#[cfg(any(
|
||||
not(hottub_single_provider),
|
||||
hottub_provider = "archivebate",
|
||||
hottub_provider = "hypnotube",
|
||||
hottub_provider = "vjav",
|
||||
))]
|
||||
@@ -381,6 +382,7 @@ impl Requester {
|
||||
|
||||
#[cfg(any(
|
||||
not(hottub_single_provider),
|
||||
hottub_provider = "archivebate",
|
||||
hottub_provider = "hypnotube",
|
||||
hottub_provider = "freeuseporn",
|
||||
hottub_provider = "vjav",
|
||||
|
||||
Reference in New Issue
Block a user