mod app_state; mod auth; mod lookup; mod handlers; mod s3_utils; mod thumbnail; mod core; mod overlay; use actix_web::{middleware::Logger, web, App, HttpServer}; use app_state::AppState; use handlers::{proxy_handler, upload_handler}; use log::warn; use tokio::task::spawn_blocking; use std::env; use env_logger; #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init(); warn!("Started"); let port = env::var("PORT").unwrap_or_else(|_| "8080".to_string()); let addr = format!("0.0.0.0:{}", port); let app_state = AppState::new().await; let app_state_clone = app_state.clone(); // Используем spawn_blocking для работы, которая не совместима с Send spawn_blocking(move || { let rt = tokio::runtime::Handle::current(); rt.block_on(async move { app_state_clone.cache_filelist().await; }); }); HttpServer::new(move || { App::new() .app_data(web::Data::new(app_state.clone())) .wrap(Logger::default()) .route("/", web::post().to(upload_handler)) .route("/{path:.*}", web::get().to(proxy_handler)) }) .bind(addr)? .run() .await }