adaptions format for paradise hill

This commit is contained in:
Simon
2025-09-19 11:39:34 +00:00
parent 584abfd431
commit 913472ebfb
3 changed files with 132 additions and 53 deletions

View File

@@ -2,8 +2,6 @@ use std::collections::HashMap;
use crate::util::requester::Requester;
#[derive(serde::Serialize, serde::Deserialize, Debug)]
pub struct VideosRequest {
//"versionInstallDate":"2025-06-03T18:20:20Z","languageCode":"en","appInstallDate":"2025-06-03T18:20:20Z","server":"spacemoehre","sexu
@@ -11,37 +9,37 @@ pub struct VideosRequest {
pub blockedKeywords: Option<String>, // "kittens",
pub countryCode: Option<String>, // "DE",
pub clientVersion: Option<String>, // "2.1.4-22b",
pub timestamp: Option<String>, // "1748976686",
pub timestamp: Option<String>, // "1748976686",
pub blockedUploaders: Option<String>, // "",
pub anonId: Option<String>, // "1AB8A060-A47D-47EF-B9CB-63980ED84C8A",
pub debugTools: Option<bool>, // false,
pub anonId: Option<String>, // "1AB8A060-A47D-47EF-B9CB-63980ED84C8A",
pub debugTools: Option<bool>, // false,
pub versionInstallDate: Option<String>, // "2025-06-03T18:20:20Z",
pub languageCode: Option<String>, // "en",
pub appInstallDate: Option<String>, // "2025-06-03T18:20:20Z",
pub server: Option<String>, // "spacemoehre",
pub sexuality: Option<String>, // "straight",
pub channel: Option<String>, //"youtube",
pub sort: Option<String>, //"new",
pub query: Option<String>, //"kittens",
pub page: Option<String>, //1,
pub perPage: Option<String>, //10,
// Your server's global options will be sent in the videos request
// pub flavor: "mint chocolate chip"
pub server: Option<String>, // "spacemoehre",
pub sexuality: Option<String>, // "straight",
pub channel: Option<String>, //"youtube",
pub sort: Option<String>, //"new",
pub query: Option<String>, //"kittens",
pub page: Option<String>, //1,
pub perPage: Option<String>, //10,
// Your server's global options will be sent in the videos request
// pub flavor: "mint chocolate chip"
pub featured: Option<String>, // "featured",
pub category: Option<String>, // "pmv"
pub sites: Option<String>, //
pub filter: Option<String>, //
pub language: Option<String>, //
pub sites: Option<String>, //
pub filter: Option<String>, //
pub language: Option<String>, //
}
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct ServerOptions{
pub struct ServerOptions {
pub featured: Option<String>, // "featured",
pub category: Option<String>, // "pmv"
pub sites: Option<String>, //
pub sites: Option<String>, //
pub filter: Option<String>,
pub language: Option<String>, // "en"
pub requester: Option<Requester>
pub requester: Option<Requester>,
}
#[derive(serde::Serialize, Debug)]
@@ -50,30 +48,26 @@ pub struct PageInfo {
pub resultsPerPage: u32, // 10
}
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct VideoEmbed{
pub struct VideoEmbed {
pub html: String,
pub source: String,
}
impl VideoEmbed {
pub fn new(html: String, source: String) -> Self {
VideoEmbed {
html,
source,
}
VideoEmbed { html, source }
}
}
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
pub struct VideoItem {
pub duration: u32, // 110,
pub duration: u32, // 110,
#[serde(skip_serializing_if = "Option::is_none")]
pub views: Option<u32>, // 14622653,
pub views: Option<u32>, // 14622653,
#[serde(skip_serializing_if = "Option::is_none")]
pub rating: Option<f32>, // 0.0,
pub id: String, // "c85017ca87477168d648727753c4ded8a35f173e22ef93743e707b296becb299",
pub rating: Option<f32>, // 0.0,
pub id: String, // "c85017ca87477168d648727753c4ded8a35f173e22ef93743e707b296becb299",
pub title: String, // "20 Minutes of Adorable Kittens BEST Compilation",
pub url: String, // "https://www.youtube.com/watch?v=y0sF5xhGreA",
pub url: String, // "https://www.youtube.com/watch?v=y0sF5xhGreA",
pub channel: String, // "youtube",
pub thumb: String, // "https://i.ytimg.com/vi/y0sF5xhGreA/hqdefault.jpg",
#[serde(skip_serializing_if = "Option::is_none")]
@@ -93,7 +87,7 @@ pub struct VideoItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub preview: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aspectRation: Option<f32>
pub aspectRation: Option<f32>,
}
#[allow(dead_code)]
impl VideoItem {
@@ -106,9 +100,9 @@ impl VideoItem {
duration: u32,
) -> Self {
VideoItem {
duration: duration, // Placeholder, adjust as needed
views: None, // Placeholder, adjust as needed
rating: None, // Placeholder, adjust as needed
duration: duration, // Placeholder, adjust as needed
views: None, // Placeholder, adjust as needed
rating: None, // Placeholder, adjust as needed
id,
title,
url,
@@ -120,9 +114,9 @@ impl VideoItem {
tags: None, // Placeholder, adjust as needed
uploadedAt: None,
formats: None, // Placeholder for formats
embed: None, // Placeholder for embed information
embed: None, // Placeholder for embed information
preview: None,
aspectRation: None
aspectRation: None,
}
}
pub fn tags(mut self, tags: Vec<String>) -> Self {
@@ -157,7 +151,7 @@ impl VideoItem {
self.formats = Some(formats);
self
}
pub fn add_format(mut self, format: VideoFormat){
pub fn add_format(mut self, format: VideoFormat) {
if let Some(formats) = self.formats.as_mut() {
formats.push(format);
} else {
@@ -172,7 +166,7 @@ impl VideoItem {
self.preview = Some(preview);
self
}
pub fn aspect_ratio(mut self, aspect_ratio: f32) -> Self {
self.aspectRation = Some(aspect_ratio);
self
@@ -228,7 +222,6 @@ pub struct VideoFormat {
resolution: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
http_headers: Option<HashMap<String, String>>,
}
impl VideoFormat {
pub fn new(url: String, quality: String, format: String) -> Self {
@@ -269,6 +262,94 @@ impl VideoFormat {
headers.insert(key, value);
}
}
pub fn format_id(mut self, format_id: String) -> Self {
self.format_id = Some(format_id);
self
}
pub fn format_note(mut self, format_note: String) -> Self {
self.format_note = Some(format_note);
self
}
pub fn filesize(mut self, filesize: u32) -> Self {
self.filesize = Some(filesize);
self
}
pub fn asr(mut self, asr: u32) -> Self {
self.asr = Some(asr);
self
}
pub fn fps(mut self, fps: u32) -> Self {
self.fps = Some(fps);
self
}
pub fn width(mut self, width: u32) -> Self {
self.width = Some(width);
self
}
pub fn height(mut self, height: u32) -> Self {
self.height = Some(height);
self
}
pub fn tbr(mut self, tbr: u32) -> Self {
self.tbr = Some(tbr);
self
}
pub fn language(mut self, language: String) -> Self {
self.language = Some(language);
self
}
pub fn language_preference(mut self, language_preference: u32) -> Self {
self.language_preference = Some(language_preference);
self
}
pub fn ext(mut self, ext: String) -> Self {
self.ext = Some(ext);
self
}
pub fn vcodec(mut self, vcodec: String) -> Self {
self.vcodec = Some(vcodec);
self
}
pub fn acodec(mut self, acodec: String) -> Self {
self.acodec = Some(acodec);
self
}
pub fn dynamic_range(mut self, dynamic_range: String) -> Self {
self.dynamic_range = Some(dynamic_range);
self
}
pub fn abr(mut self, abr: u32) -> Self {
self.abr = Some(abr);
self
}
pub fn vbr(mut self, vbr: u32) -> Self {
self.vbr = Some(vbr);
self
}
pub fn container(mut self, container: String) -> Self {
self.container = Some(container);
self
}
pub fn protocol(mut self, protocol: String) -> Self {
self.protocol = Some(protocol);
self
}
pub fn audio_ext(mut self, audio_ext: String) -> Self {
self.audio_ext = Some(audio_ext);
self
}
pub fn video_ext(mut self, video_ext: String) -> Self {
self.video_ext = Some(video_ext);
self
}
pub fn resolution(mut self, resolution: String) -> Self {
self.resolution = Some(resolution);
self
}
pub fn http_headers(mut self, http_headers: HashMap<String, String>) -> Self {
self.http_headers = Some(http_headers);
self
}
}
#[derive(serde::Serialize, Debug)]
pub struct Videos {