Fetch demo feeds

This commit is contained in:
Greg Shuflin 2025-02-05 21:00:51 -08:00
parent c8301d14e1
commit 89982755a0
3 changed files with 39 additions and 7 deletions

14
Cargo.lock generated
View File

@ -923,6 +923,7 @@ checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
@ -973,6 +974,17 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-macro"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.96",
]
[[package]]
name = "futures-sink"
version = "0.3.31"
@ -994,6 +1006,7 @@ dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
"futures-sink",
"futures-task",
"memchr",
@ -2668,6 +2681,7 @@ dependencies = [
"chrono",
"clap",
"feed-rs",
"futures",
"getrandom 0.2.15",
"reqwest",
"rocket",

View File

@ -24,3 +24,4 @@ base64 = "0.21"
getrandom = "0.2"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
futures = "0.3.31"

View File

@ -1,6 +1,7 @@
use crate::feeds::Feed;
use crate::poll_utils::fetch_new_entries;
use crate::user::User;
use futures::future::join_all;
use tracing::{info, warn};
struct DemoFeed {
@ -83,17 +84,33 @@ pub async fn setup_demo_data(pool: &sqlx::SqlitePool) {
.expect("Failed to create demo feed");
}
for feed in feeds.iter() {
let url = &feed.url;
// Fetch all feeds in parallel
let fetch_futures: Vec<_> = feeds
.iter()
.map(|feed| {
let url = feed.url.clone();
async move {
let result = fetch_new_entries(&url).await;
(url, result)
}
})
.collect();
let entries = match fetch_new_entries(url).await {
Ok(entries) => entries,
let results = join_all(fetch_futures).await;
for (url, result) in results {
match result {
Ok(entries) => {
info!(
feed_url = url.as_str(),
"Successfully fetched {} entries",
entries.len()
);
// TODO: Store entries in database
}
Err(e) => {
warn!(error=%e, feed_url=url.as_str(), "Error populating feed");
continue;
}
};
//update_entry_db(&entries, &feed_id, &mut db).await?;
}
}
info!("Successfully set up demo data");