From c9e02642082856a2417d591f44c486e4df76e3f8 Mon Sep 17 00:00:00 2001 From: Anson Date: Fri, 22 Aug 2025 23:29:57 -0600 Subject: [PATCH] fix: improve RSS feed error handling and debugging - Add comprehensive error handling for RSS feed fetching - Log detailed error messages and feed content preview - Handle empty feeds gracefully instead of panicking - Exit early if no entries found instead of continuing with empty list --- ghost-upload/src/main.rs | 50 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/ghost-upload/src/main.rs b/ghost-upload/src/main.rs index 90531ce..2a663d5 100644 --- a/ghost-upload/src/main.rs +++ b/ghost-upload/src/main.rs @@ -228,10 +228,47 @@ async fn get_existing_post_id(slug: &str, token: &str) -> Option { } async fn fetch_feed(url: &str) -> Vec { - let content = reqwest::get(url).await.unwrap().text().await.unwrap(); - - let feed = parser::parse(content.as_bytes()).unwrap(); + println!("Fetching RSS feed from: {}", url); + + let response = reqwest::get(url).await; + let response = match response { + Ok(resp) => resp, + Err(e) => { + println!("Failed to fetch RSS feed: {}", e); + return vec![]; + } + }; + + if !response.status().is_success() { + println!("RSS feed request failed with status: {}", response.status()); + return vec![]; + } + + let content = match response.text().await { + Ok(text) => text, + Err(e) => { + println!("Failed to read RSS feed content: {}", e); + return vec![]; + } + }; + + if content.trim().is_empty() { + println!("RSS feed content is empty"); + return vec![]; + } + + println!("RSS feed content preview: {}", &content[..content.len().min(200)]); + + let feed = match parser::parse(content.as_bytes()) { + Ok(f) => f, + Err(e) => { + println!("Failed to parse RSS feed: {:?}", e); + println!("Feed content starts with: {}", &content[..content.len().min(500)]); + return vec![]; + } + }; + println!("Successfully parsed RSS feed with {} entries", feed.entries.len()); feed.entries } @@ -328,6 +365,13 @@ async fn main() { // Prepare the post data let entries = fetch_feed(feed).await; + + if entries.is_empty() { + println!("No entries found in RSS feed or feed parsing failed. Exiting."); + return; + } + + println!("Processing {} entries from RSS feed", entries.len()); let post_exists_futures = entries.into_iter().map(|entry| { let entry_clone = entry.clone();