- commit
- ef3731d
- parent
- 47b2769
- author
- Eric Bower
- date
- 2025-02-05 22:34:35 -0500 EST
fix(feeds): guid logic
1 files changed,
+14,
-9
+14,
-9
1@@ -102,10 +102,19 @@ func DigestOptionToTime(lastDigest time.Time, interval string) time.Time {
2 }
3 }
4
5+func getFeedItemID(logger *slog.Logger, item *gofeed.Item) string {
6+ guid := item.GUID
7+ if item.GUID == "" {
8+ logger.Info("no <guid> found for feed item, using <link> instead for its unique id")
9+ return item.Link
10+ }
11+ return guid
12+}
13+
14 // see if this feed item should be emailed to user.
15-func isValidItem(item *gofeed.Item, feedItems []*db.FeedItem) bool {
16+func isValidItem(logger *slog.Logger, item *gofeed.Item, feedItems []*db.FeedItem) bool {
17 for _, feedItem := range feedItems {
18- if item.GUID == feedItem.GUID {
19+ if getFeedItemID(logger, item) == feedItem.GUID {
20 return false
21 }
22 }
23@@ -345,7 +354,8 @@ func (f *Fetcher) Fetch(logger *slog.Logger, fp *gofeed.Parser, url string, user
24 continue
25 }
26
27- if !isValidItem(item, feedItems) {
28+ if !isValidItem(logger, item, feedItems) {
29+ logger.Info("feed item already served", "guid", item.GUID)
30 continue
31 }
32
33@@ -459,12 +469,7 @@ func (f *Fetcher) FetchAll(logger *slog.Logger, urls []string, inlineContent boo
34 fdi := []*db.FeedItem{}
35 for _, feed := range feeds.Feeds {
36 for _, item := range feed.FeedItems {
37- uid := item.GUID
38- // sometimes guid is blank so we need to find another uid
39- if uid == "" {
40- logger.Info("no <guid> found for feed item, using <link> instead for its unique id")
41- uid = item.Link
42- }
43+ uid := getFeedItemID(logger, item)
44 fdi = append(fdi, &db.FeedItem{
45 PostID: post.ID,
46 GUID: uid,