diff --git a/src/downloader.rs b/src/downloader.rs index 30314b6..da7cbda 100644 --- a/src/downloader.rs +++ b/src/downloader.rs @@ -2,7 +2,9 @@ use crate::state::AppState; use std::sync::Arc; use tokio_stream::StreamExt; -pub fn spawn_download_task(url: &str, state: Arc) { +pub async fn spawn_download_task(url: &str, state: Arc) { + state.reset().await; + let url = url.to_string(); tokio::spawn(async move { if let Err(e) = download_stream(&url, state).await { diff --git a/src/main.rs b/src/main.rs index 0bbaa28..4505eff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ async fn new(State(state): State>) -> &'static str { return "Failed getting latest url"; }; - downloader::spawn_download_task(&url, state.clone()); + downloader::spawn_download_task(&url, state.clone()).await; "Download started. Access / to stream the new content." } diff --git a/src/state.rs b/src/state.rs index 6b0d664..e7fb40d 100644 --- a/src/state.rs +++ b/src/state.rs @@ -16,6 +16,17 @@ impl AppState { } } + pub async fn reset(&self) { + // Clear all chunks + self.chunks.write().await.clear(); + + // Reset completion status + *self.complete.write().await = false; + + // Notify any waiting tasks about the reset + self.notify.notify_waiters(); + } + pub async fn add_chunk(&self, chunk: Bytes) { self.chunks.write().await.push(chunk); self.notify.notify_waiters();