X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fnnmh.el;h=86f751c76699460fff0d32822ae41652bb1772e2;hb=822226cae207ee94825cbac2434039f3857c5b65;hp=340fca90bb58882396ce10c748758dcd87fa7d0f;hpb=fe70196e10cdd849981dbd014882fb20237d0740;p=gnus diff --git a/lisp/nnmh.el b/lisp/nnmh.el index 340fca90b..86f751c76 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -1,7 +1,7 @@ ;;; nnmh.el --- mhspool access for Gnus ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu UMEDA @@ -9,10 +9,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,9 +20,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -77,8 +75,7 @@ as unread by Gnus.") (nnoo-define-basics nnmh) (deffoo nnmh-retrieve-headers (articles &optional newsgroup server fetch-old) - (save-excursion - (set-buffer nntp-server-buffer) + (with-current-buffer nntp-server-buffer (erase-buffer) (let* ((file nil) (number (length articles)) @@ -210,23 +207,30 @@ as unread by Gnus.") (defun nnmh-request-list-1 (dir) (setq dir (expand-file-name dir)) ;; Recurse down all directories. - (let ((dirs (and (file-readable-p dir) - (nnheader-directory-files dir t nil t))) - rdir) + (let ((files (nnheader-directory-files dir t nil t)) + (max 0) + min rdir attributes num) ;; Recurse down directories. - (while (setq rdir (pop dirs)) - (when (and (file-directory-p rdir) + (dolist (rdir files) + (setq attributes (file-attributes rdir)) + (when (null (nth 0 attributes)) + (setq file (file-name-nondirectory rdir)) + (when (string-match "^[0-9]+$" file) + (setq num (string-to-number file)) + (setq max (max max num)) + (when (or (null min) + (< num min)) + (setq min num)))) + (when (and (eq (nth 0 attributes) t) ; Is a directory + (> (nth 1 attributes) 2) ; Has sub-directories (file-readable-p rdir) (not (equal (file-truename rdir) (file-truename dir)))) - (nnmh-request-list-1 rdir)))) - ;; For each directory, generate an active file line. - (unless (string= (expand-file-name nnmh-toplev) dir) - (let ((files (mapcar 'string-to-number - (directory-files dir nil "^[0-9]+$" t)))) - (when files - (save-excursion - (set-buffer nntp-server-buffer) + (nnmh-request-list-1 rdir))) + ;; For each directory, generate an active file line. + (unless (string= (expand-file-name nnmh-toplev) dir) + (when min + (with-current-buffer nntp-server-buffer (goto-char (point-max)) (insert (format @@ -237,14 +241,13 @@ as unread by Gnus.") (file-truename (file-name-as-directory (expand-file-name nnmh-toplev)))) dir) - (mm-string-as-multibyte + (mm-string-to-multibyte ;Why? Isn't it multibyte already? (mm-encode-coding-string (nnheader-replace-chars-in-string (substring dir (match-end 0)) ?/ ?.) nnmail-pathname-coding-system))) - (apply 'max files) - (apply 'min files))))))) + max min)))))) t) (deffoo nnmh-request-newgroups (date &optional server) @@ -253,8 +256,11 @@ as unread by Gnus.") (deffoo nnmh-request-expire-articles (articles newsgroup &optional server force) (nnmh-possibly-change-directory newsgroup server) - (let* ((is-old t) - article rest mod-time) + (let ((is-old t) + (nnmail-expiry-target + (or (gnus-group-find-parameter newsgroup 'expiry-target t) + nnmail-expiry-target)) + article rest mod-time) (nnheader-init-server-buffer) (while (and articles is-old) @@ -288,15 +294,14 @@ as unread by Gnus.") (deffoo nnmh-close-group (group &optional server) t) -(deffoo nnmh-request-move-article (article group server accept-form +(deffoo nnmh-request-move-article (article group server accept-form &optional last move-is-internal) (let ((buf (get-buffer-create " *nnmh move*")) result) (and (nnmh-deletable-article-p group article) (nnmh-request-article article group server) - (save-excursion - (set-buffer buf) + (with-current-buffer buf (erase-buffer) (insert-buffer-substring nntp-server-buffer) (setq result (eval accept-form)) @@ -314,7 +319,7 @@ as unread by Gnus.") (nnmh-possibly-change-directory group server) (nnmail-check-syntax) (when nnmail-cache-accepted-message-ids - (nnmail-cache-insert (nnmail-fetch-field "message-id") + (nnmail-cache-insert (nnmail-fetch-field "message-id") group (nnmail-fetch-field "subject") (nnmail-fetch-field "from"))) @@ -336,8 +341,7 @@ as unread by Gnus.") (deffoo nnmh-request-replace-article (article group buffer) (nnmh-possibly-change-directory group) - (save-excursion - (set-buffer buffer) + (with-current-buffer buffer (nnmh-possibly-create-directory group) (ignore-errors (nnmail-write-region @@ -577,5 +581,4 @@ as unread by Gnus.") (provide 'nnmh) -;;; arch-tag: 36c12a98-3bad-44b3-9953-628078ef0e04 ;;; nnmh.el ends here