Implement the nnimap article expunging interface method, and make it more general
authorLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Tue, 21 Sep 2010 15:16:37 +0000 (17:16 +0200)
committerLars Magne Ingebrigtsen <larsi@quimbies.gnus.org>
Tue, 21 Sep 2010 15:16:37 +0000 (17:16 +0200)
lisp/ChangeLog
lisp/gnus-group.el
lisp/gnus-int.el
lisp/nnimap.el
texi/ChangeLog
texi/gnus.texi

index efca5e1..d505d5e 100644 (file)
@@ -1,6 +1,13 @@
 2010-09-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
+       * gnus-group.el (gnus-group-expunge-group): Renamed from
+       gnus-group-nnimap-expunge, and implemented as a normal interface
+       function.
+
+       * gnus-int.el (gnus-request-expunge-group): New function.
+
        * nnimap.el (nnimap-request-create-group): Implement.
+       (nnimap-request-expunge-group): New function.
 
 2010-09-21  Julien Danjou  <julien@danjou.info>
 
index 3e79b18..ded35ad 100644 (file)
@@ -678,7 +678,7 @@ simple manner.")
   "R" gnus-group-make-rss-group
   "c" gnus-group-customize
   "z" gnus-group-compact-group
-  "x" gnus-group-nnimap-expunge
+  "x" gnus-group-expunge-group
   "\177" gnus-group-delete-group
   [delete] gnus-group-delete-group)
 
@@ -3166,21 +3166,14 @@ mail messages or news articles in files that have numeric names."
                       'summary 'group)))
       (error "Couldn't enter %s" dir))))
 
-(autoload 'nnimap-expunge "nnimap")
-(autoload 'nnimap-acl-get "nnimap")
-(autoload 'nnimap-acl-edit "nnimap")
-
-(defun gnus-group-nnimap-expunge (group)
+(defun gnus-group-expunge-group (group)
   "Expunge deleted articles in current nnimap GROUP."
   (interactive (list (gnus-group-group-name)))
-  (let ((mailbox (gnus-group-real-name group)) method)
-    (unless group
-      (error "No group on current line"))
-    (unless (gnus-get-info group)
-      (error "Killed group; can't be edited"))
-    (unless (eq 'nnimap (car (setq method (gnus-find-method-for-group group))))
-      (error "%s is not an nnimap group" group))
-    (nnimap-expunge mailbox (cadr method))))
+  (let ((method (gnus-find-method-for-group group)))
+    (if (not (gnus-check-backend-function
+             'request-expunge-group (car method)))
+       (error "%s does not support expunging" (car method))
+      (gnus-request-expunge-group group method))))
 
 (defun gnus-group-nnimap-edit-acl (group)
   "Edit the Access Control List of current nnimap GROUP."
index f245907..cdcb4e3 100644 (file)
@@ -552,6 +552,14 @@ If BUFFER, insert the article in that group."
   (funcall (gnus-get-function gnus-command-method 'request-post)
           (nth 1 gnus-command-method)))
 
+(defun gnus-request-expunge-group (group gnus-command-method)
+  "Expunge GROUP, which is removing articles that have been marked as deleted."
+  (when (stringp gnus-command-method)
+    (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
+  (funcall (gnus-get-function gnus-command-method 'request-expunge-group)
+          (gnus-group-real-name group)
+          (nth 1 gnus-command-method)))
+
 (defun gnus-request-scan (group gnus-command-method)
   "Request a SCAN being performed in GROUP from GNUS-COMMAND-METHOD.
 If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
index dfb8595..3def294 100644 (file)
@@ -441,6 +441,11 @@ textual parts.")
     (with-current-buffer (nnimap-buffer)
       (car (nnimap-command "DELETE %S" (utf7-encode group t))))))
 
+(deffoo nnimap-request-expunge-group (group &optional server)
+  (when (nnimap-possibly-change-group group server)
+    (with-current-buffer (nnimap-buffer)
+      (car (nnimap-command "EXPUNGE")))))
+
 (defun nnimap-get-flags (spec)
   (let ((articles nil)
        elems)
index 0e29fbc..1677b30 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Expunging mailboxes): Update name of the expunging
+       command.
+
 2010-09-20  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * emacs-mime.texi (rfc2047): Update description for
index 369a8b0..04cea2e 100644 (file)
@@ -18384,7 +18384,7 @@ INBOX.mailbox).
 @cindex expunge
 @cindex manual expunging
 @kindex G x (Group)
-@findex gnus-group-nnimap-expunge
+@findex gnus-group-expunge-group
 
 If you're using the @code{never} setting of @code{nnimap-expunge-on-close},
 you may want the option of expunging all deleted articles in a mailbox