emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 62d97d4afd: Turn expiry on for nnselect groups


From: Andrew G Cohen
Subject: master 62d97d4afd: Turn expiry on for nnselect groups
Date: Fri, 4 Mar 2022 03:27:45 -0500 (EST)

branch: master
commit 62d97d4afd4a13cb2cd0f7eacbc4b5af1d620cf7
Author: Andrew G Cohen <cohen@andy.bu.edu>
Commit: Andrew G Cohen <cohen@andy.bu.edu>

    Turn expiry on for nnselect groups
    
    Articles in (persistent) groups from the gnus/nnselect backend will
    now be run through the expiry process upon exit, like other persistent
    groups. Expiry is not on by default for ephemeral nnselect groups but
    may be turned on with nnselect-allow-ephemeral-expiry set to t.
    
    * lisp/gnus/nnselect.el (nnselect-request-expire-articles): Make
    article expiry work.
    (nnselect-allow-ephemeral-expiry): New variable.
    * doc/misc/gnus.texi (Creating Search Groups): Document
    nnselect-allow-ephemeral-expiry.
---
 doc/misc/gnus.texi    |  6 ++++++
 lisp/gnus/nnselect.el | 44 ++++++++++++++++++++++++++------------------
 2 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index a3def495c4..20a2d92084 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -21735,6 +21735,12 @@ articles are drawn.  If you want to create a 
@emph{persistent} group
 that sticks around after exit from the summary buffer, you can call
 @code{gnus-group-make-search-group} (bound to @kbd{G g}).
 
+Unlike persistent groups, ephemeral groups by default do not run
+articles through the expiry process on exiting. If you want expiry to
+happen in ephemeral search groups you can customize the variable
+@code{nnselect-allow-ephemeral-expiry}. In all cases the expiry
+process uses the underlying group's expiry parameters.
+
 So you just performed a search whose results are so fabulous you
 wished you had done a persistent search rather than an ephemeral one?
 No problem; you can create such a group by calling
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
index b9072d4cb3..9193b38e31 100644
--- a/lisp/gnus/nnselect.el
+++ b/lisp/gnus/nnselect.el
@@ -256,6 +256,12 @@ as `(keyfunc member)' and the corresponding element is just
 (define-obsolete-variable-alias 'nnir-retrieve-headers-override-function
   'nnselect-retrieve-headers-override-function "28.1")
 
+(defcustom nnselect-allow-ephemeral-expiry nil
+  "If non-nil, articles in an ephemeral nnselect group will be put
+through the expiry process."
+  :version "29.1"
+  :type 'boolean)
+
 (defcustom nnselect-retrieve-headers-override-function nil
   "A function that retrieves article headers for ARTICLES from GROUP.
 The retrieved headers should populate the `nntp-server-buffer'.
@@ -457,24 +463,26 @@ If this variable is nil, or if the provided function 
returns nil,
                        :test #'equal :count 1)))))
 
 (deffoo nnselect-request-expire-articles
-    (articles _group &optional _server force)
-  (if force
-      (let (not-expired)
-       (pcase-dolist (`(,artgroup . ,artids) (ids-by-group articles))
-         (let ((artlist (sort (mapcar #'cdr artids) #'<)))
-           (unless (gnus-check-backend-function 'request-expire-articles
-                                                artgroup)
-             (error "Group %s does not support article expiration" artgroup))
-           (unless (gnus-check-server (gnus-find-method-for-group artgroup))
-             (error "Couldn't open server for group %s" artgroup))
-            (push (mapcar (lambda (art)
-                            (car (rassq art artids)))
-                         (let ((nnimap-expunge 'immediately))
-                           (gnus-request-expire-articles
-                            artlist artgroup force)))
-                 not-expired)))
-       (sort (delq nil not-expired) #'<))
-    articles))
+    (articles group &optional _server force)
+  (let ((nnimap-expunge 'immediately) not-deleted)
+    (if (and (not force)
+             (not nnselect-allow-ephemeral-expiry)
+            (gnus-ephemeral-group-p (nnselect-add-prefix group)))
+       articles
+      (pcase-dolist (`(,artgroup . ,artids) (ids-by-group articles))
+       (let ((artlist (sort (mapcar #'cdr artids) #'<)))
+         (unless
+             (gnus-check-backend-function 'request-expire-articles artgroup)
+           (error "Group %s does not support article expiration" artgroup))
+         (unless (gnus-check-server (gnus-find-method-for-group artgroup))
+           (error "Couldn't open server for group %s" artgroup))
+         (setq not-deleted
+                (append
+                 (mapcar (lambda (art) (car (rassq art artids)))
+                        (gnus-request-expire-articles artlist artgroup
+                                                       force))
+                not-deleted))))
+      (sort (delq nil not-deleted) #'<))))
 
 
 (deffoo nnselect-warp-to-article ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]