repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

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
M feeds/cron.go
+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,