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)))