;; 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, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(require 'nnheader)
(require 'rmail)
(require 'nnmail)
+(eval-when-compile (require 'cl))
(defvar nnmbox-mbox-file (expand-file-name "~/mbox")
"The name of the mail box file in the user's home directory.")
(defvar nnmbox-current-server nil)
(defvar nnmbox-server-alist nil)
(defvar nnmbox-server-variables
- (list
- (list 'nnmbox-mbox-file nnmbox-mbox-file)
- (list 'nnmbox-active-file nnmbox-active-file)
- (list 'nnmbox-get-new-mail nnmbox-get-new-mail)
- '(nnmbox-current-group nil)
- '(nnmbox-status-string "")
- '(nnmbox-group-alist nil)))
+ `((nnmbox-mbox-file ,nnmbox-mbox-file)
+ (nnmbox-active-file ,nnmbox-active-file)
+ (nnmbox-get-new-mail ,nnmbox-get-new-mail)
+ (nnmbox-current-group nil)
+ (nnmbox-status-string "")
+ (nnmbox-group-alist nil)))
\f
'headers)))
(defun nnmbox-open-server (server &optional defs)
- (nnheader-init-server-buffer)
- (if (equal server nnmbox-current-server)
- t
- (if nnmbox-current-server
- (setq nnmbox-server-alist
- (cons (list nnmbox-current-server
- (nnheader-save-variables nnmbox-server-variables))
- nnmbox-server-alist)))
- (let ((state (assoc server nnmbox-server-alist)))
- (if state
- (progn
- (nnheader-restore-variables (nth 1 state))
- (setq nnmbox-server-alist (delq state nnmbox-server-alist)))
- (nnheader-set-init-variables nnmbox-server-variables defs)))
- (setq nnmbox-current-server server)))
+ (nnheader-change-server 'nnmbox server defs)
+ (cond
+ ((not (file-exists-p nnmbox-mbox-file))
+ (nnmbox-close-server)
+ (nnheader-report 'nnmbox "No such file: %s" nnmbox-mbox-file))
+ ((file-directory-p nnmbox-mbox-file)
+ (nnmbox-close-server)
+ (nnheader-report 'nnmbox "Not a regular file: %s" nnmbox-mbox-file))
+ (t
+ (nnheader-report 'nnmbox "Opened server %s using mbox %s" server
+ nnmbox-mbox-file)
+ t)))
(defun nnmbox-close-server (&optional server)
+ (when (and nnmbox-mbox-buffer
+ (buffer-name nnmbox-mbox-buffer))
+ (kill-buffer nnmbox-mbox-buffer))
(setq nnmbox-current-server nil)
t)
(nnmbox-article-group-number)))))))
(defun nnmbox-request-group (group &optional server dont-check)
- (let ((active (assoc group nnmbox-group-alist)))
+ (let ((active (cadr (assoc group nnmbox-group-alist))))
(cond
+ ((null active)
+ (nnheader-report 'nnmbox "No such group: %s" group))
((null (nnmbox-possibly-change-newsgroup group))
(nnheader-report 'nnmbox "No such group: %s" group))
(dont-check
(nnheader-report 'nnmbox "Selected group %s" group)
(nnheader-insert ""))
- ((> (car active) (cdr active))
- (nnheader-report 'nnmbox "Empty group %s" group)
- (nnheader-insert "211 0 0 0 %s\n" group))
(t
(nnheader-report 'nnmbox "Selected group %s" group)
- (nnheader-insert
- "211 %d %d %d %s\n"
- (1+ (- (cdadr active) (caadr active)))
- (cadr active) (cdadr active) (car active))
+ (nnheader-insert "211 %d %d %d %s\n"
+ (1+ (- (cdr active) (car active)))
+ (car active) (cdr active) group)
t))))
(defun nnmbox-request-scan (&optional group server)
(nnmbox-request-list server))
(defun nnmbox-request-list-newsgroups (&optional server)
- (setq nnmbox-status-string "nnmbox: LIST NEWSGROUPS is not implemented.")
- nil)
-
-(defun nnmbox-request-post (&optional server)
- (mail-send-and-exit nil))
+ (nnheader-report 'nnmbox "LIST NEWSGROUPS is not implemented."))
(defun nnmbox-request-expire-articles
(articles newsgroup &optional server force)
;; If FORCE, delete article no matter how many X-Gnus-Newsgroup
;; headers there are. If LEAVE-DELIM, don't delete the Unix mbox
-;; delimeter line.
+;; delimiter line.
(defun nnmbox-delete-mail (&optional force leave-delim)
;; Delete the current X-Gnus-Newsgroup line.
(or force
(not (buffer-name nnmbox-mbox-buffer)))
(save-excursion
(set-buffer (setq nnmbox-mbox-buffer
- (find-file-noselect nnmbox-mbox-file nil 'raw)))
+ (nnheader-find-file-noselect
+ nnmbox-mbox-file nil 'raw)))
(buffer-disable-undo (current-buffer))))
(if (not nnmbox-group-alist)
(nnmail-activate 'nnmbox))
(if newsgroup
(if (assoc newsgroup nnmbox-group-alist)
- (setq nnmbox-current-group newsgroup))))
+ (setq nnmbox-current-group newsgroup))
+ t))
(defun nnmbox-article-string (article)
(if (numberp article)
(let ((delim (concat "^" rmail-unix-mail-delimiter))
start end)
(set-buffer (setq nnmbox-mbox-buffer
- (find-file-noselect nnmbox-mbox-file nil 'raw)))
+ (nnheader-find-file-noselect
+ nnmbox-mbox-file nil 'raw)))
(buffer-disable-undo (current-buffer))
(goto-char (point-min))
(while (re-search-forward delim nil t)