diff --git a/src/core/file_utils.rs b/src/core/file_utils.rs index cbdf9cb..3576adc 100644 --- a/src/core/file_utils.rs +++ b/src/core/file_utils.rs @@ -44,6 +44,7 @@ pub static TEMP_FILES_CACHE: Lazy> = Lazy::new(|| { .build() }); + pub async fn upload_file( file: Bytes, filename: String, @@ -69,6 +70,7 @@ pub async fn upload_file( } } + pub async fn download_file(chat_id: i64, message_id: i32) -> Result, Box> { let bot = ROUND_ROBIN_BOT.get_bot(); @@ -106,4 +108,31 @@ pub async fn download_file(chat_id: i64, message_id: i32) -> Result }; Ok(Some(File::open(path).await?)) -} \ No newline at end of file +} + + +pub async fn clean_files() -> Result<(), Box> { + let bots_folder = "/var/lib/telegram-bot-api/"; + let documents_folder_name = "documents"; + + let mut bots_folder = tokio::fs::read_dir(bots_folder).await.unwrap(); + + while let Some(entry) = bots_folder.next_entry().await? { + if !entry.metadata().await.unwrap().is_dir() { + continue; + } + + let documents_folder_path = entry.path().join(documents_folder_name); + let mut document_folder = tokio::fs::read_dir(documents_folder_path).await.unwrap(); + + while let Some(file) = document_folder.next_entry().await? { + let metadata = file.metadata().await.unwrap(); + + if metadata.created()?.elapsed().unwrap().as_secs() > 3600 { + let _ = tokio::fs::remove_file(file.path()).await; + } + } + } + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 458a9db..ee0ef5d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ mod config; mod core; +use core::file_utils::clean_files; use std::{net::SocketAddr, str::FromStr}; use sentry::{integrations::debug_images::DebugImagesIntegration, types::Dsn, ClientOptions}; use sentry_tracing::EventFilter; @@ -9,6 +10,29 @@ use tracing_subscriber::{filter, layer::SubscriberExt, util::SubscriberInitExt}; use crate::core::views::get_router; +async fn start_app() { + let addr = SocketAddr::from(([0, 0, 0, 0], 8080)); + + let app = get_router().await; + + println!("Start webserver..."); + let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); + axum::serve(listener, app).await.unwrap(); + println!("Webserver shutdown..."); +} + + +async fn cron_jobs() { + let mut interval = tokio::time::interval(std::time::Duration::from_secs(5 * 60)); + + loop { + interval.tick().await; + + let _ = clean_files().await; + } +} + + #[tokio::main] async fn main() { dotenv::dotenv().ok(); @@ -33,12 +57,5 @@ async fn main() { .with(sentry_layer) .init(); - let addr = SocketAddr::from(([0, 0, 0, 0], 8080)); - - let app = get_router().await; - - println!("Start webserver..."); - let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); - axum::serve(listener, app).await.unwrap(); - println!("Webserver shutdown..."); + tokio::join![cron_jobs(), start_app()]; }