diff --git a/crates/ipx/CHANGELOG.md b/crates/ipx/CHANGELOG.md index 65aed14..6ba4c7c 100644 --- a/crates/ipx/CHANGELOG.md +++ b/crates/ipx/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Subscribing to a feed someone here already reads puts its recent items to your Signals at once, rather than at the judge's next pass, up to five minutes later (#415). - A download a restart stopped, a deploy's for one, is taken up again as the daemon starts, rather than waiting for its feed's next check, an hour or a day away (#410). - A YouTube channel no longer misses most days' videos: YouTube answers some feed requests with a 404 or 500 it does not mean, and ipx now asks again, twice, a second apart, before calling the feed failing (#382), and then every hour for a day where it would have waited a day, since YouTube's failures run for hours; and its YouTube feeds are read one at a time, two seconds apart, since YouTube refuses many asked together (#386). - Syncing an OPML or Patreon list reads who subscribes to it once, not once for every feed it lists: a list of 922 was thousands of the same queries a sync (#377). diff --git a/crates/ipx/src/web.rs b/crates/ipx/src/web.rs index 85c4e28..93f50e2 100644 --- a/crates/ipx/src/web.rs +++ b/crates/ipx/src/web.rs @@ -2127,6 +2127,9 @@ async fn add_feed( /// `None` scans whatever is due, which a feed never checked always is. The add has /// succeeded either way, so a daemon not taking commands is only logged. async fn scan_soon(state: &WebState, feed: Option) { + // A feed the server already has brings no new items to wake the Signals judge, and its recent + // ones waited up to five minutes for the next pass to reach the new subscriber's Signals (#415). + state.ctx.signals.notify_one(); let force = feed.is_some(); if state.cmds.send(Command::Fetch { feed, force, feeds: vec![] }).await.is_err() { tracing::warn!("could not queue a scan: the daemon is not accepting commands");