98 lines
2.9 KiB
Rust
98 lines
2.9 KiB
Rust
use crate::{
|
|
providers::{
|
|
hanime::HanimeProvider, perverzija::PerverzijaProvider, pmvhaven::PmvhavenProvider, pornhub::PornhubProvider, rule34video::Rule34videoProvider, spankbang::SpankbangProvider
|
|
}, util::cache::VideoCache, videos::VideoItem, DbPool
|
|
};
|
|
|
|
pub mod hanime;
|
|
pub mod perverzija;
|
|
pub mod pmvhaven;
|
|
pub mod pornhub;
|
|
pub mod spankbang;
|
|
pub mod rule34video;
|
|
|
|
pub trait Provider {
|
|
async fn get_videos(
|
|
&self,
|
|
cache: VideoCache,
|
|
pool: DbPool,
|
|
channel: String,
|
|
sort: String,
|
|
query: Option<String>,
|
|
page: String,
|
|
per_page: String,
|
|
featured: String,
|
|
category: String,
|
|
) -> Vec<VideoItem>;
|
|
}
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub enum AnyProvider {
|
|
Perverzija(PerverzijaProvider),
|
|
Hanime(HanimeProvider),
|
|
Spankbang(SpankbangProvider),
|
|
Pornhub(PornhubProvider),
|
|
Pmvhaven(PmvhavenProvider),
|
|
Rule34video(Rule34videoProvider),
|
|
}
|
|
impl Provider for AnyProvider {
|
|
async fn get_videos(
|
|
&self,
|
|
cache: VideoCache,
|
|
pool: DbPool,
|
|
channel: String,
|
|
sort: String,
|
|
query: Option<String>,
|
|
page: String,
|
|
per_page: String,
|
|
featured: String,
|
|
category: String,
|
|
) -> Vec<VideoItem> {
|
|
println!(
|
|
"/api/videos: channel={:?}, sort={:?}, query={:?}, page={:?}, per_page={:?}, featured={:?}",
|
|
channel, sort, query, page, per_page, featured
|
|
);
|
|
match self {
|
|
AnyProvider::Perverzija(p) => {
|
|
p.get_videos(
|
|
cache.clone(),
|
|
pool.clone(),
|
|
channel.clone(),
|
|
sort.clone(),
|
|
query.clone(),
|
|
page.clone(),
|
|
per_page.clone(),
|
|
featured.clone(),
|
|
category.clone(),
|
|
)
|
|
.await
|
|
}
|
|
AnyProvider::Hanime(p) => {
|
|
p.get_videos(cache, pool, channel, sort, query, page, per_page, featured,
|
|
category.clone(),)
|
|
.await
|
|
}
|
|
AnyProvider::Spankbang(p) => {
|
|
p.get_videos(cache, pool, channel, sort, query, page, per_page, featured,
|
|
category.clone(),)
|
|
.await
|
|
}
|
|
AnyProvider::Pornhub(p) => {
|
|
p.get_videos(cache, pool, channel, sort, query, page, per_page, featured,
|
|
category.clone(),)
|
|
.await
|
|
}
|
|
AnyProvider::Pmvhaven(p) => {
|
|
p.get_videos(cache, pool, channel, sort, query, page, per_page, featured,
|
|
category.clone(),)
|
|
.await
|
|
}
|
|
AnyProvider::Rule34video(p) => {
|
|
p.get_videos(cache, pool, channel, sort, query, page, per_page, featured,
|
|
category.clone(),)
|
|
.await
|
|
}
|
|
}
|
|
}
|
|
}
|