diff --git a/internal/feeds/refresh.go b/internal/feeds/refresh.go index 5d06fc5..78d00fd 100644 --- a/internal/feeds/refresh.go +++ b/internal/feeds/refresh.go @@ -23,6 +23,9 @@ func Refresh() error { go RefreshFeed(feed.FeedURL) } + fmt.Println("Reaping old items...") + feedStore.DeleteOldReadItems() + fmt.Printf("Going to sleep for %d minutes\n", interval) time.Sleep(time.Duration(interval) * time.Minute) } diff --git a/internal/feeds/store.go b/internal/feeds/store.go index 1b106ba..5181b78 100644 --- a/internal/feeds/store.go +++ b/internal/feeds/store.go @@ -1,6 +1,8 @@ package feeds import ( + "time" + "github.com/spf13/viper" "gorm.io/driver/sqlite" "gorm.io/gorm" @@ -55,6 +57,14 @@ func (fs *FeedStore) GetUnread() *[]ItemWithFeed { return items } +func (fs *FeedStore) DeleteOldReadItems() { + t := time.Now() + threshold := t.Add(-time.Hour * 24 * 7) + fs.getDB().Table("items"). + Where("read = ? and created < ?", true, threshold). + Delete(Item{}) +} + func (fs *FeedStore) GetAll() *[]ItemWithFeed { items := &[]ItemWithFeed{} fs.getDB().Table("items"). diff --git a/internal/feeds/types.go b/internal/feeds/types.go index a375872..e03eb9b 100644 --- a/internal/feeds/types.go +++ b/internal/feeds/types.go @@ -46,6 +46,7 @@ type Item struct { FeedID string Read bool Save bool + DeletedAt gorm.DeletedAt } type ItemWithFeed struct {