aboutsummaryrefslogtreecommitdiffhomepage
path: root/storage
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-11-21 16:33:36 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-11-21 16:33:36 -0800
commite52f0b9cd29b1e0bfb8f45bc4ef8507dc7a721f8 (patch)
tree5ea127eef8ef611e119fd2f0d844fd7da6a2bf34 /storage
parent9457b3e5d6ed487c48144b1ae0c18ae0ddc20580 (diff)
Cleanup entries marked as removed
Diffstat (limited to 'storage')
-rw-r--r--storage/entry.go22
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