From 3fe6280f27e38395f2ba871eba19e405fb5e6608 Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 15 Feb 2026 11:25:01 +0000 Subject: [PATCH] freshporno was removed --- src/api.rs | 38 ------- src/providers/freshporno.rs | 202 ------------------------------------ src/providers/mod.rs | 2 - 3 files changed, 242 deletions(-) delete mode 100644 src/providers/freshporno.rs diff --git a/src/api.rs b/src/api.rs index c0171c2..95cb3a1 100644 --- a/src/api.rs +++ b/src/api.rs @@ -692,41 +692,6 @@ async fn status(req: HttpRequest) -> Result { cacheDuration: Some(1800), }); - // freshporno - status.add_channel(Channel { - id: "freshporno".to_string(), - name: "Freshporno".to_string(), - description: "Only Fresh Free HD Porn Videos Online".to_string(), - premium: false, - favicon: "https://www.google.com/s2/favicons?sz=64&domain=freshporno.net".to_string(), - status: "active".to_string(), - categories: vec![], - options: vec![ChannelOption { - id: "sort".to_string(), - title: "Sort".to_string(), - description: "Sort the Videos".to_string(), //"Sort the videos by Date or Name.".to_string(), - systemImage: "list.number".to_string(), - colorName: "blue".to_string(), - options: vec![ - FilterOption { - id: "new".to_string(), - title: "New".to_string(), - }, - FilterOption { - id: "popular".to_string(), - title: "Popular".to_string(), - }, - FilterOption { - id: "top-rated".to_string(), - title: "Top Rated".to_string(), - }, - ], - multiSelect: false, - }], - nsfw: true, - cacheDuration: Some(1800), - }); - // paradisehill status.add_channel(Channel { id: "paradisehill".to_string(), @@ -1179,9 +1144,6 @@ pub fn get_provider(channel: &str) -> Option { "xxthots" => Some(Arc::new(crate::providers::xxthots::XxthotsProvider::new())), "sxyprn" => Some(Arc::new(crate::providers::sxyprn::SxyprnProvider::new())), "porn00" => Some(Arc::new(crate::providers::porn00::Porn00Provider::new())), - "freshporno" => Some(Arc::new( - crate::providers::freshporno::FreshpornoProvider::new(), - )), "youjizz" => Some(Arc::new(crate::providers::youjizz::YoujizzProvider::new())), "paradisehill" => Some(Arc::new( crate::providers::paradisehill::ParadisehillProvider::new(), diff --git a/src/providers/freshporno.rs b/src/providers/freshporno.rs deleted file mode 100644 index 539ec41..0000000 --- a/src/providers/freshporno.rs +++ /dev/null @@ -1,202 +0,0 @@ -use crate::api::ClientVersion; -use crate::status::Channel; -use crate::DbPool; -use crate::providers::Provider; -use crate::util::cache::VideoCache; -use crate::videos::{ServerOptions, VideoItem}; -use async_trait::async_trait; -use error_chain::error_chain; -use htmlentity::entity::{ICodedDataTrait, decode}; -use std::vec; - -error_chain! { - foreign_links { - Io(std::io::Error); - HttpRequest(wreq::Error); - } -} - -#[derive(Debug, Clone)] -pub struct FreshpornoProvider { - url: String, -} - -impl FreshpornoProvider { - pub fn new() -> Self { - FreshpornoProvider { - url: "https://freshporno.net".to_string(), - } - } - async fn get( - &self, - cache: VideoCache, - page: u8, - sort: &str, - options: ServerOptions, - ) -> Result> { - let sort_string = match sort { - "popular" => "/most-popular", - "top-rated" => "/top-rated", - _ => "", - }; - let video_url = format!("{}{}/{}/", self.url, sort_string, page); - let old_items = match cache.get(&video_url) { - Some((time, items)) => { - if time.elapsed().unwrap_or_default().as_secs() < 60 * 5 { - return Ok(items.clone()); - } else { - items.clone() - } - } - None => { - vec![] - } - }; - - let mut requester = options.requester.clone().unwrap(); - - let text = requester.get(&video_url, None).await.unwrap(); - let video_items: Vec = self.get_video_items_from_html(text.clone()); - if !video_items.is_empty() { - cache.remove(&video_url); - cache.insert(video_url.clone(), video_items.clone()); - } else { - return Ok(old_items); - } - Ok(video_items) - } - - async fn query( - &self, - cache: VideoCache, - page: u8, - query: &str, - options: ServerOptions, - ) -> Result> { - let search_string = query.to_lowercase().trim().replace(" ", "-"); - let video_url = format!("{}/search/{}/{}/", self.url, search_string, page); - // Check our Video Cache. If the result is younger than 1 hour, we return it. - let old_items = match cache.get(&video_url) { - Some((time, items)) => { - if time.elapsed().unwrap_or_default().as_secs() < 60 * 5 { - return Ok(items.clone()); - } else { - let _ = cache.check().await; - return Ok(items.clone()); - } - } - None => { - vec![] - } - }; - - let mut requester = options.requester.clone().unwrap(); - - let text = requester.get(&video_url, None).await.unwrap(); - let video_items: Vec = self.get_video_items_from_html(text.clone()); - if !video_items.is_empty() { - cache.remove(&video_url); - cache.insert(video_url.clone(), video_items.clone()); - } else { - return Ok(old_items); - } - Ok(video_items) - } - - fn get_video_items_from_html(&self, html: String) -> Vec { - if html.is_empty() { - println!("HTML is empty"); - return vec![]; - } - let mut items: Vec = Vec::new(); - let raw_videos = html.split("class=\"pagination\"").collect::>()[0] - .split("class=\"page-content item\"") - .collect::>()[1..] - .to_vec(); - for video_segment in &raw_videos { - // let vid = video_segment.split("\n").collect::>(); - // for (index, line) in vid.iter().enumerate() { - // println!("Line {}: {}", index, line); - // } - let video_url: String = video_segment.split(">()[1] - .split("\"") - .collect::>()[0].to_string(); - let mut title = video_segment.split("\" title=\"").collect::>()[1] - .split("\"") - .collect::>()[0] - .to_string(); - // html decode - title = decode(title.as_bytes()).to_string().unwrap_or(title); - let id = video_url.split("/").collect::>()[4].to_string(); - - let thumb = video_segment.split(">()[1] - .split("data-original=\"").collect::>()[1] - .split("\"") - .collect::>()[0] - .to_string(); - - let preview = video_segment - .split("data-preview=\"").collect::>()[1] - .split("\"") - .collect::>()[0] - .to_string(); - - let video_item = VideoItem::new( - id, - title, - video_url.to_string(), - "freshporno".to_string(), - thumb, - 0, - ) - .preview(preview) - ; - items.push(video_item); - } - return items; - } - - -} - -#[async_trait] -impl Provider for FreshpornoProvider { - async fn get_videos( - &self, - cache: VideoCache, - pool: DbPool, - sort: String, - query: Option, - page: String, - per_page: String, - options: ServerOptions, - ) -> Vec { - let _ = per_page; - let _ = pool; - let videos: std::result::Result, Error> = match query { - Some(q) => { - self.query(cache, page.parse::().unwrap_or(1), &q,options) - .await - } - None => { - self.get(cache, page.parse::().unwrap_or(1), &sort, options) - .await - } - }; - match videos { - Ok(v) => v, - Err(e) => { - println!("Error fetching videos: {}", e); - vec![] - } - } - } - - fn get_channel(&self,clientversion:ClientVersion) -> Option { - println!("Getting channel for placeholder with client version: {:?}",clientversion); - let _ = clientversion; - Some(Channel { - id:"placeholder".to_string(),name:"PLACEHOLDER".to_string(),description:"PLACEHOLDER FOR PARENT CLASS".to_string(),premium:false,favicon:"https://www.google.com/s2/favicons?sz=64&domain=missav.ws".to_string(),status:"active".to_string(),categories:vec![],options:vec![],nsfw:true,cacheDuration:None, - }) - } -} diff --git a/src/providers/mod.rs b/src/providers/mod.rs index 3b7e4e4..33f5f19 100644 --- a/src/providers/mod.rs +++ b/src/providers/mod.rs @@ -25,8 +25,6 @@ pub mod missav; pub mod porn00; pub mod sxyprn; pub mod xxthots; -// pub mod noodlemagazine; -pub mod freshporno; pub mod omgxxx; pub mod paradisehill; pub mod pornzog;