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] = &[
|
const PROVIDERS: &[ProviderDef] = &[
|
||||||
|
ProviderDef {
|
||||||
|
id: "pornxp",
|
||||||
|
module: "pornxp",
|
||||||
|
ty: "PornxpProvider",
|
||||||
|
},
|
||||||
ProviderDef {
|
ProviderDef {
|
||||||
id: "all",
|
id: "all",
|
||||||
module: "all",
|
module: "all",
|
||||||
@@ -261,6 +266,11 @@ const PROVIDERS: &[ProviderDef] = &[
|
|||||||
module: "chaturbate",
|
module: "chaturbate",
|
||||||
ty: "ChaturbateProvider",
|
ty: "ChaturbateProvider",
|
||||||
},
|
},
|
||||||
|
ProviderDef {
|
||||||
|
id: "archivebate",
|
||||||
|
module: "archivebate",
|
||||||
|
ty: "ArchivebateProvider",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@@ -360,7 +370,7 @@ fn main() {
|
|||||||
|
|
||||||
let selection = match selected.as_deref() {
|
let selection = match selected.as_deref() {
|
||||||
Some(selected_id) => format!(
|
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(),
|
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 |
|
| Provider | Group | `/api/uploaders` | Uses local `/proxy` | Notes |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
| `all` | `meta-search` | no | no | Aggregates all compiled providers. |
|
| `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. |
|
| `beeg` | `mainstream-tube` | no | no | Basic mainstream tube pattern. |
|
||||||
| `chaturbate` | `live-cams` | no | no | Live cam channel. |
|
| `chaturbate` | `live-cams` | no | no | Live cam channel. |
|
||||||
| `freepornvideosxxx` | `studio-network` | no | no | Studio-style scraper. |
|
| `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.
|
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 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 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 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)`.
|
- 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.
|
- 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
|
- page 2
|
||||||
- at least one tag/uploader shortcut if implemented
|
- at least one tag/uploader shortcut if implemented
|
||||||
6. Verify thumbnails load.
|
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.
|
8. If a proxy route exists, verify it directly with `curl -I` or equivalent.
|
||||||
|
|
||||||
Testing commands to run:
|
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 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 assume page URLs are playable media URLs.
|
||||||
- Do not expose status filters that you did not implement in `get_videos`.
|
- 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 finish without checking at least one returned media URL with `yt-dlp`.
|
||||||
- Do not claim pagination works unless page 2 was verified.
|
- 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 async_trait::async_trait;
|
||||||
use error_chain::error_chain;
|
use error_chain::error_chain;
|
||||||
use htmlentity::entity::{ICodedDataTrait, decode};
|
use htmlentity::entity::{ICodedDataTrait, decode};
|
||||||
// use std::sync::{Arc, RwLock};
|
|
||||||
// use std::thread;
|
|
||||||
use std::vec;
|
use std::vec;
|
||||||
|
|
||||||
error_chain! {
|
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)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct PornxpProvider {
|
pub struct PornxpProvider {
|
||||||
url: String,
|
url: String,
|
||||||
|
|||||||
@@ -174,6 +174,7 @@ impl Requester {
|
|||||||
|
|
||||||
#[cfg(any(
|
#[cfg(any(
|
||||||
not(hottub_single_provider),
|
not(hottub_single_provider),
|
||||||
|
hottub_provider = "archivebate",
|
||||||
hottub_provider = "hypnotube",
|
hottub_provider = "hypnotube",
|
||||||
hottub_provider = "vjav",
|
hottub_provider = "vjav",
|
||||||
))]
|
))]
|
||||||
@@ -381,6 +382,7 @@ impl Requester {
|
|||||||
|
|
||||||
#[cfg(any(
|
#[cfg(any(
|
||||||
not(hottub_single_provider),
|
not(hottub_single_provider),
|
||||||
|
hottub_provider = "archivebate",
|
||||||
hottub_provider = "hypnotube",
|
hottub_provider = "hypnotube",
|
||||||
hottub_provider = "freeuseporn",
|
hottub_provider = "freeuseporn",
|
||||||
hottub_provider = "vjav",
|
hottub_provider = "vjav",
|
||||||
|
|||||||
Reference in New Issue
Block a user