diff --git a/rss/feed.go b/rss/feed.go index f33b2b9..e1e2479 100644 --- a/rss/feed.go +++ b/rss/feed.go @@ -103,28 +103,32 @@ func (feed *Feed) fromGofeed(gofeed *gofeed.Feed) ([]*Item, error) { t := time.Now() updated = &t } - newitems, err := feed.appendNewItems(gofeed.Items) + newitems, latest, err := feed.appendNewItems(gofeed.Items) if err != nil { return nil, err } - feed.Updated = *updated //time.Now().UTC() //*updated + feed.Updated = latest.Add(time.Second) //time.Now() //*updated //time.Now().UTC() //*updated feed.Title = gofeed.Title return newitems, nil } -func (feed *Feed) appendNewItems(items []*gofeed.Item) ([]*Item, error) { +func (feed *Feed) appendNewItems(items []*gofeed.Item) ([]*Item, time.Time, error) { + latest := feed.Updated newitems := []*Item{} for i := range items { t := gofeedItemTS(items[i]) if t.Before(feed.Updated) { continue } + if t.After(latest) { + latest = *t + } if ok, _ := regexp.MatchString(feed.ItemFilter, items[i].Title); !ok { continue } - item := fromGofeedItem(items[i], feed.ContentFilter) + item := FromGofeedItem(items[i], feed.ContentFilter) newitems = append(newitems, item) feed.Items = append(feed.Items, item.Name) } - return newitems, nil + return newitems, latest, nil } diff --git a/rss/item.go b/rss/item.go index 7a72c8b..caff7b2 100644 --- a/rss/item.go +++ b/rss/item.go @@ -50,7 +50,7 @@ func (item *Item) Serialize() ([]byte, error) { return buffer.Bytes(), err } -func fromGofeedItem(gfitem *gofeed.Item, filter string) *Item { +func FromGofeedItem(gfitem *gofeed.Item, filter string) *Item { item := &Item{ Name: gfitem.Title, Link: gfitem.Link, diff --git a/rss/item_test.go b/rss/item_test.go index 3066f0c..c082a3d 100644 --- a/rss/item_test.go +++ b/rss/item_test.go @@ -79,7 +79,7 @@ func Test_RSSItem(t *testing.T) { }, } for _, c := range cases { - output := fromGofeedItem(&c.input, c.filter) + output := FromGofeedItem(&c.input, c.filter) if *output != c.output { t.Errorf("failed to convert gofeed: wanted %v, got %v", c.output, *output) }