diff options
author | Frédéric Guillot <fred@miniflux.net> | 2017-11-21 16:33:36 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2017-11-21 16:33:36 -0800 |
commit | e52f0b9cd29b1e0bfb8f45bc4ef8507dc7a721f8 (patch) | |
tree | 5ea127eef8ef611e119fd2f0d844fd7da6a2bf34 /storage | |
parent | 9457b3e5d6ed487c48144b1ae0c18ae0ddc20580 (diff) |
Cleanup entries marked as removed
Diffstat (limited to 'storage')
-rw-r--r-- | storage/entry.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/storage/entry.go b/storage/entry.go index 7bc1f86..5dfb801 100644 --- a/storage/entry.go +++ b/storage/entry.go @@ -7,6 +7,7 @@ package storage import ( "errors" "fmt" + "log" "time" "github.com/miniflux/miniflux2/helper" @@ -100,6 +101,7 @@ func (s *Storage) EntryExists(entry *model.Entry) bool { // UpdateEntries update a list of entries while refreshing a feed. func (s *Storage) UpdateEntries(userID, feedID int64, entries model.Entries) (err error) { + var entryHashes []string for _, entry := range entries { entry.UserID = userID entry.FeedID = feedID @@ -113,6 +115,26 @@ func (s *Storage) UpdateEntries(userID, feedID int64, entries model.Entries) (er if err != nil { return err } + + entryHashes = append(entryHashes, entry.Hash) + } + + if err := s.CleanupEntries(feedID, entryHashes); err != nil { + log.Println(err) + } + + return nil +} + +// CleanupEntries deletes from the database entries marked as "removed" and not visible anymore in the feed. +func (s *Storage) CleanupEntries(feedID int64, entryHashes []string) error { + query := ` + DELETE FROM entries + WHERE feed_id=$1 AND + id IN (SELECT id FROM entries WHERE feed_id=$2 AND status=$3 AND NOT (hash=ANY($4))) + ` + if _, err := s.db.Exec(query, feedID, feedID, model.EntryStatusRemoved, pq.Array(entryHashes)); err != nil { + return fmt.Errorf("unable to cleanup entries: %v", err) } return nil |