From f941eac3865a9beec464c2e2a55d73357795fd9e Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Wed, 15 Oct 2025 15:13:29 +0200 Subject: [PATCH] single file...almost --- src/main.rs | 25 +++++++++++++++++-------- src/state.rs | 19 ------------------- src/streamer.rs | 14 -------------- 3 files changed, 17 insertions(+), 41 deletions(-) delete mode 100644 src/state.rs delete mode 100644 src/streamer.rs diff --git a/src/main.rs b/src/main.rs index 049d096..ce3f073 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,27 @@ -mod state; -mod streamer; - -use axum::{routing::get, Router}; +use axum::{extract::State, http::HeaderMap, response::IntoResponse, routing::get, Router}; use chrono::Utc; -use state::AppState; +use player::Feed; +use reqwest::header; use std::sync::Arc; +use tokio::sync::RwLock; use tokio_cron_scheduler::{Job, JobScheduler}; +pub async fn stream_handler(State(state): State>>) -> impl IntoResponse { + state.write().await.fetch().await.unwrap(); + + let content = state.read().await.to_rss(); + + let mut headers = HeaderMap::new(); + headers.insert(header::CONTENT_TYPE, "application/rss+xml".parse().unwrap()); + (headers, content) +} + #[tokio::main] async fn main() -> Result<(), Box> { - let state = Arc::new(AppState::new().await.unwrap()); + let state = Arc::new(RwLock::new(Feed::new().await.unwrap())); let app = Router::new() - .route("/", get(streamer::stream_handler)) + .route("/", get(stream_handler)) .with_state(state.clone()); let scheduler = JobScheduler::new().await.unwrap(); @@ -21,7 +30,7 @@ async fn main() -> Result<(), Box> { Job::new_async("0 0 */3 * * *", move |_uuid, _locked| { let state_for_task = state.clone(); Box::pin(async move { - state_for_task.update().await; + state_for_task.write().await.fetch().await.unwrap(); println!("Task executed at: {}", Utc::now()); }) }) diff --git a/src/state.rs b/src/state.rs deleted file mode 100644 index d3f6e77..0000000 --- a/src/state.rs +++ /dev/null @@ -1,19 +0,0 @@ -use player::Feed; -use std::sync::Arc; -use tokio::sync::RwLock; - -pub struct AppState { - pub feed: RwLock, -} - -impl AppState { - pub async fn new() -> Result> { - Ok(Self { - feed: RwLock::new(Feed::new().await?), - }) - } - - pub async fn update(self: Arc) { - self.feed.write().await.fetch().await.unwrap(); - } -} diff --git a/src/streamer.rs b/src/streamer.rs deleted file mode 100644 index 8bee76b..0000000 --- a/src/streamer.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::state::AppState; -use axum::{extract::State, http::HeaderMap, response::IntoResponse}; -use reqwest::header; -use std::sync::Arc; - -pub async fn stream_handler(State(state): State>) -> impl IntoResponse { - state.clone().update().await; - - let content = state.feed.read().await.to_rss(); - - let mut headers = HeaderMap::new(); - headers.insert(header::CONTENT_TYPE, "application/rss+xml".parse().unwrap()); - (headers, content) -}