From 80924f27166f54cdc9be98eddf3ffcbf833d2cb4 Mon Sep 17 00:00:00 2001 From: zabe Date: Mon, 6 Sep 2021 13:00:51 -0400 Subject: [PATCH] Add hook to customize how elfeed-db-gc finds elfeed-refs --- elfeed-db.el | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/elfeed-db.el b/elfeed-db.el index 4000a0b..cd5c95c 100644 --- a/elfeed-db.el +++ b/elfeed-db.el @@ -84,6 +84,12 @@ the :last-update time is updated.") (defvar elfeed-db-unload-hook () "Hook to run immediately after `elfeed-db-unload'.") +(defvar elfeed-db-gc-trace-functions () + "A list of functions called to determine which elfeed-ref's are reachable. +Each function is called with an elfeed-entry and should return a +single elfeed-ref or a list of them, which will be considered in +use by `elfeed-db-gc'.") + ;; Data model: (cl-defstruct (elfeed-feed (:constructor elfeed-feed--create)) @@ -582,7 +588,14 @@ If STATS is true, return the space cleared in bytes." (with-elfeed-db-visit (entry _) (let ((content (elfeed-entry-content entry))) (when (elfeed-ref-p content) - (setf (gethash (elfeed-ref-id content) table) t)))) + (setf (gethash (elfeed-ref-id content) table) t))) + (dolist (trace-function elfeed-db-gc-trace-functions) + (let ((refs (funcall trace-function entry))) + (unless (listp refs) + (setf refs (list refs))) + (dolist (ref refs) + (when (elfeed-ref-p ref) + (setf (gethash (elfeed-ref-id ref) table) t)))))) (cl-loop for id hash-keys of table using (hash-value used) for used-p = (or used (member id '("." ".."))) when (and (not used-p) stats-p)