Function: nnmaildir-close-group
nnmaildir-close-group is a byte-compiled function defined in
nnmaildir.el.gz.
Signature
(nnmaildir-close-group GNAME &optional SERVER)
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/nnmaildir.el.gz
(defun nnmaildir-close-group (gname &optional server)
(let ((group (nnmaildir--prepare server gname))
pgname ls dir msgdir files dirs
(fset (make-hash-table :test #'equal)))
(if (null group)
(progn
(setf (nnmaildir--srv-error nnmaildir--cur-server)
(concat "No such group: " gname))
nil)
;; Delete the now obsolete NOV files.
;; FIXME: This can take a somewhat long time, so maybe it's better
;; to do it asynchronously (i.e. in an idle timer).
(setq pgname (nnmaildir--pgname nnmaildir--cur-server gname)
ls (nnmaildir--group-ls nnmaildir--cur-server pgname)
dir (nnmaildir--srv-dir nnmaildir--cur-server)
dir (nnmaildir--srvgrp-dir dir gname)
msgdir (if (nnmaildir--param pgname 'read-only)
(nnmaildir--new dir) (nnmaildir--cur dir))
;; The dir with the NOV files.
dir (nnmaildir--nndir dir)
dirs (cons (nnmaildir--nov-dir dir)
(funcall ls (nnmaildir--marks-dir dir) 'full "\\`[^.]"
'nosort))
dirs (mapcar
(lambda (dir)
(cons dir (funcall ls dir nil "\\`[^.]" 'nosort)))
dirs)
files (funcall ls msgdir nil "\\`[^.]" 'nosort))
(save-match-data
(dolist (file files)
(string-match "\\`\\([^:]*\\)\\(:.*\\)?\\'" file)
(puthash (match-string 1 file) t fset)))
;; Not sure why, but we specifically avoid deleting the `:' file.
(puthash ":" t fset)
(dolist (dir dirs)
(setq files (cdr dir)
dir (file-name-as-directory (car dir)))
(dolist (file files)
(unless (gethash file fset)
(delete-file (concat dir file)))))
t)))