Make the predicates more configurable
This commit is contained in:
parent
8e11981987
commit
564a8d63bf
1 changed files with 28 additions and 41 deletions
|
@ -64,20 +64,25 @@ to t you are aware of the risks."
|
||||||
:group 'elfeed-prune
|
:group 'elfeed-prune
|
||||||
:type 'boolean)
|
:type 'boolean)
|
||||||
|
|
||||||
(defcustom elfeed-prune-predicate #'elfeed-prune--elfeed-prune-entry-p
|
(defcustom elfeed-prune-predicates
|
||||||
"Function that determines which entries should be pruned.
|
(list #'elfeed-prune--entry-too-old-p)
|
||||||
|
"Entries that match *any* of these predicates are pruned.
|
||||||
|
|
||||||
The function accepts two parameters: the entry and the feed it
|
Each predicate accepts an entry and a feed object and should
|
||||||
belongs to. These are the data structures defined in the
|
return t when the entry should be pruned, unless any of the
|
||||||
elfeed-db.el package.
|
predicates in `elfeed-prune-keep-predicates' returns t."
|
||||||
|
|
||||||
Look inside `elfeed-prune--elfeed-prune-entry-p' for examples of
|
|
||||||
using these data structures. Otherwise consult the elfeed-db.el
|
|
||||||
sources."
|
|
||||||
:group 'elfeed-prune
|
:group 'elfeed-prune
|
||||||
:type 'function)
|
:type 'list)
|
||||||
|
|
||||||
(defun elfeed-prune--entry-too-old-p (entry)
|
(defcustom elfeed-prune-keep-predicates nil
|
||||||
|
"Always keep entries that match one of these predicates.
|
||||||
|
|
||||||
|
Each predicate accepts an entry and a feed object and should
|
||||||
|
return t when the entry should be kept."
|
||||||
|
:group 'elfeed-prune
|
||||||
|
:type 'list)
|
||||||
|
|
||||||
|
(defun elfeed-prune--entry-too-old-p (entry _)
|
||||||
"Return t if the given ENTRY is considered too old.
|
"Return t if the given ENTRY is considered too old.
|
||||||
|
|
||||||
The thresholds are configured through the variables
|
The thresholds are configured through the variables
|
||||||
|
@ -92,30 +97,6 @@ The thresholds are configured through the variables
|
||||||
(entry-age (- current-time entry-time)))
|
(entry-age (- current-time entry-time)))
|
||||||
(> entry-age threshold-seconds)))
|
(> entry-age threshold-seconds)))
|
||||||
|
|
||||||
(defun elfeed-prune--elfeed-prune-entry-p (entry feed)
|
|
||||||
"Return t if the ENTRY should be removed from the database.
|
|
||||||
|
|
||||||
FEED can be used to remove entries for a whole feed.
|
|
||||||
|
|
||||||
Conditions, any of:
|
|
||||||
- non-existing feed (not in `elfeed-feeds')
|
|
||||||
- has tag `rm'
|
|
||||||
- older than 90 days
|
|
||||||
|
|
||||||
Unless:
|
|
||||||
- score > 2
|
|
||||||
- has star tag"
|
|
||||||
(let ((tags (elfeed-entry-tags entry))
|
|
||||||
(score (elfeed-score-scoring-get-score-from-entry entry)))
|
|
||||||
(and (or (seq-contains-p tags 'rm)
|
|
||||||
(elfeed-prune--entry-too-old-p entry)
|
|
||||||
(not (seq-contains-p (mapcar #'car elfeed-feeds)
|
|
||||||
(elfeed-feed-url feed)
|
|
||||||
#'string=))
|
|
||||||
(<= score -5))
|
|
||||||
(not (> score 2))
|
|
||||||
(not (seq-contains-p tags 'star)))))
|
|
||||||
|
|
||||||
(defun elfeed-prune (&optional dry-run)
|
(defun elfeed-prune (&optional dry-run)
|
||||||
"Prune the database entries.
|
"Prune the database entries.
|
||||||
|
|
||||||
|
@ -135,12 +116,18 @@ area."
|
||||||
(elfeed-db-entries-copy (copy-hash-table elfeed-db-entries)))
|
(elfeed-db-entries-copy (copy-hash-table elfeed-db-entries)))
|
||||||
;; Remove entries
|
;; Remove entries
|
||||||
(with-elfeed-db-visit (entry feed)
|
(with-elfeed-db-visit (entry feed)
|
||||||
|
(let ((prune-p (seq-some
|
||||||
|
(lambda (f) (funcall f entry feed))
|
||||||
|
elfeed-prune-predicates))
|
||||||
|
(keep-p (seq-some
|
||||||
|
(lambda (f) (funcall f entry feed))
|
||||||
|
elfeed-prune-keep-predicates)))
|
||||||
|
(when (and prune-p (not keep-p))
|
||||||
;; The `with-elfeed-db-visit' declares the variable `id' that
|
;; The `with-elfeed-db-visit' declares the variable `id' that
|
||||||
;; contains the entry ID.
|
;; contains the entry ID.
|
||||||
(when (funcall elfeed-prune-predicate entry feed)
|
|
||||||
(setq removed-entries (1+ removed-entries))
|
(setq removed-entries (1+ removed-entries))
|
||||||
(avl-tree-delete elfeed-db-index-copy id)
|
(avl-tree-delete elfeed-db-index-copy id)
|
||||||
(remhash id elfeed-db-entries-copy)))
|
(remhash id elfeed-db-entries-copy))))
|
||||||
(when (and
|
(when (and
|
||||||
elfeed-prune-enabled
|
elfeed-prune-enabled
|
||||||
(not dry-run)
|
(not dry-run)
|
||||||
|
|
Loading…
Reference in a new issue