From e4871e3834397e34a83a8df62dafe5a0875555ae Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 26 Apr 2020 18:12:55 +0200 Subject: Option `always-new` --- internal/feed/cache.go | 2 +- internal/feed/cache_v1.go | 10 ++++++++-- internal/feed/feed.go | 9 ++++++--- internal/feed/state.go | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) (limited to 'internal/feed') diff --git a/internal/feed/cache.go b/internal/feed/cache.go index b92bfa7..df7559b 100644 --- a/internal/feed/cache.go +++ b/internal/feed/cache.go @@ -27,7 +27,7 @@ type CachedFeed interface { Checked(withFailure bool) Failures() uint Last() time.Time - filterItems([]feeditem, bool) []feeditem + filterItems(items []feeditem, ignoreHash bool, alwaysNew bool) []feeditem Commit() } diff --git a/internal/feed/cache_v1.go b/internal/feed/cache_v1.go index 45182dc..0e43eab 100644 --- a/internal/feed/cache_v1.go +++ b/internal/feed/cache_v1.go @@ -171,7 +171,7 @@ func (cf *cachedFeed) deleteItem(index int) { cf.Items = cf.Items[:len(cf.Items)-1] } -func (cf *cachedFeed) filterItems(items []feeditem, ignoreHash bool) []feeditem { +func (cf *cachedFeed) filterItems(items []feeditem, ignoreHash, alwaysNew bool) []feeditem { if len(items) == 0 { return items } @@ -200,7 +200,7 @@ CACHE_ITEMS: if cf.LastCheck.IsZero() || ci.PublishedDate.After(cf.LastCheck) { log.Debug("Newer than last check, including.") - item.addReason("newer") + item.addReason("time") app(item, ci, nil) continue } @@ -233,6 +233,11 @@ CACHE_ITEMS: } if oldItem.Link == ci.Link { + if alwaysNew { + log.Debugf("Link matches, but `always-new`.") + item.addReason("always-new") + continue + } log.Debugf("Link matches, updating: %s", oldItem) item.addReason("link (upd)") app(item, ci, &idx) @@ -242,6 +247,7 @@ CACHE_ITEMS: } log.Debugf("No match found, inserting.") + item.addReason("new") app(item, ci, nil) } diff --git a/internal/feed/feed.go b/internal/feed/feed.go index 433d080..0038335 100644 --- a/internal/feed/feed.go +++ b/internal/feed/feed.go @@ -7,6 +7,7 @@ import ( "github.com/Necoro/feed2imap-go/pkg/config" "github.com/Necoro/feed2imap-go/pkg/log" + "github.com/Necoro/feed2imap-go/pkg/util" ) type Feed struct { @@ -28,15 +29,17 @@ type feeditem struct { reasons []string } -func (item feeditem) Creator() string { +func (item *feeditem) Creator() string { if item.Item.Author != nil { return item.Item.Author.Name } return "" } -func (item feeditem) addReason(reason string) { - item.reasons = append(item.reasons, reason) +func (item *feeditem) addReason(reason string) { + if !util.StrContains(item.reasons, reason) { + item.reasons = append(item.reasons, reason) + } } func (feed *Feed) descriptor() feedDescriptor { diff --git a/internal/feed/state.go b/internal/feed/state.go index ea9239a..455602c 100644 --- a/internal/feed/state.go +++ b/internal/feed/state.go @@ -72,7 +72,7 @@ func filterFeed(feed *Feed) { origLen := len(feed.items) log.Debugf("Filtering %s. Starting with %d items", feed.Name, origLen) - items := feed.cached.filterItems(feed.items, *feed.Options.IgnHash) + items := feed.cached.filterItems(feed.items, *feed.Options.IgnHash, *feed.Options.AlwaysNew) feed.items = items newLen := len(feed.items) -- cgit v1.2.3-54-g00ecf