aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--walrss/internal/rss/processor.go24
2 files changed, 26 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e6d46d4..a1f9082 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## [Unreleased]
+## [0.2.2] - 2022-05-08
+### Fixed
+* Feed entries from midnight on a given day are no longer mistakenly ignored.
+
## [0.2.1] - 2022-04-29
### Fixed
* Digest emails no longer contain three extra days worth of feed items
diff --git a/walrss/internal/rss/processor.go b/walrss/internal/rss/processor.go
index cb746c7..e41fc66 100644
--- a/walrss/internal/rss/processor.go
+++ b/walrss/internal/rss/processor.go
@@ -93,7 +93,21 @@ func ProcessUserFeed(st *state.State, user *db.User, progressChannel chan string
pf.Error = err
reportProgress(progressChannel, "Failed to fetch: "+err.Error())
} else {
- pf.Items = filterFeedContent(rawFeed, time.Now().UTC().Add(-interval))
+ // Instead of just using the interval, we want to include everything from the earliest day specified by
+ // the interval.
+ //
+ // Say we were running at 5AM and we had an interval of 24 hours. We'd select all the feed items from up to
+ // 5AM from the day before. Sometimes, this would end up with feeds published at exactly midnight being
+ // ignored, for example.
+ //
+ // This doesn't explain it well, but I don't quite understand it, so this is what you're getting.
+
+ t := time.Now().UTC().Add(-interval)
+
+ pf.Items = filterFeedContent(
+ rawFeed,
+ time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.UTC),
+ )
}
processedFeeds = append(processedFeeds, pf)
}
@@ -161,7 +175,13 @@ func filterFeedContent(feed *gofeed.Feed, earliestPublishTime time.Time) []*feed
var o []*feedItem
for _, item := range feed.Items {
- if item.PublishedParsed != nil && item.PublishedParsed.After(earliestPublishTime) {
+ if item.PublishedParsed == nil {
+ continue
+ }
+
+ *item.PublishedParsed = item.PublishedParsed.UTC()
+
+ if item.PublishedParsed.After(earliestPublishTime) || item.PublishedParsed.Equal(earliestPublishTime) {
o = append(o, &feedItem{
Title: strings.TrimSpace(item.Title),
URL: item.Link,