;;; nndraft.el --- draft article access for Gnus
-;; Copyright (C) 1995,96 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
(require 'nnheader)
(require 'nnmh)
+(require 'nnoo)
(eval-and-compile (require 'cl))
+(nnoo-declare nndraft)
+
(eval-and-compile
(autoload 'mail-send-and-exit "sendmail"))
-(defvar nndraft-directory nil
+(defvoo nndraft-directory nil
"Where nndraft will store its directory.")
\f
(defconst nndraft-version "nndraft 1.0")
-(defvar nndraft-status-string "")
-
-\f
-
-(defvar nndraft-current-server nil)
-(defvar nndraft-server-alist nil)
-(defvar nndraft-server-variables
- `((nndraft-directory nil)
- (nndraft-status-string "")
- (nndraft-group-alist)))
+(defvoo nndraft-status-string "")
\f
;;; Interface functions.
+(nnoo-define-basics nndraft)
-(defun nndraft-retrieve-headers (articles &optional group server fetch-old)
+(deffoo nndraft-retrieve-headers (articles &optional group server fetch-old)
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
- (let* ((file nil)
- (buf (get-buffer-create " *draft headers*"))
- beg article)
+ (let* ((buf (get-buffer-create " *draft headers*"))
+ article)
(set-buffer buf)
(buffer-disable-undo (current-buffer))
(erase-buffer)
'headers
(while articles
(set-buffer buf)
- (when (nndraft-request-article
+ (when (nndraft-request-article
(setq article (pop articles)) group server (current-buffer))
(goto-char (point-min))
(if (search-forward "\n\n" nil t)
(nnheader-fold-continuation-lines)
'headers))))
-(defun nndraft-open-server (server &optional defs)
- (nnheader-change-server 'nndraft server defs)
+(deffoo nndraft-open-server (server &optional defs)
+ (nnoo-change-server 'nndraft server defs)
(unless (assq 'nndraft-directory defs)
(setq nndraft-directory server))
- (cond
+ (cond
((not (file-exists-p nndraft-directory))
(nndraft-close-server)
(nnheader-report 'nndraft "No such file or directory: %s"
server nndraft-directory)
t)))
-(defun nndraft-close-server (&optional server)
- (setq nndraft-current-server nil)
- t)
-
-(defun nndraft-server-opened (&optional server)
- (and nntp-server-buffer
- (get-buffer nntp-server-buffer)
- nndraft-current-server
- (equal nndraft-current-server server)))
-
-(defun nndraft-status-message (&optional server)
- nndraft-status-string)
-
-(defun nndraft-request-article (id &optional group server buffer)
+(deffoo nndraft-request-article (id &optional group server buffer)
(when (numberp id)
- ;; We get the newest file of the auto-saved file and the
+ ;; We get the newest file of the auto-saved file and the
;; "real" file.
(let* ((file (nndraft-article-filename id))
(auto (nndraft-auto-save-file-name file))
(nntp-server-buffer (or buffer nntp-server-buffer)))
(when (and (file-exists-p newest)
(nnmail-find-file newest))
- (save-excursion
+ (save-excursion
(set-buffer nntp-server-buffer)
(goto-char (point-min))
- ;; If there's a mail header separator in this file,
+ ;; If there's a mail header separator in this file,
;; we remove it.
(when (re-search-forward
(concat "^" mail-header-separator "$") nil t)
(replace-match "" t t)))
t))))
-(defun nndraft-request-restore-buffer (article &optional group server)
+(deffoo nndraft-request-restore-buffer (article &optional group server)
"Request a new buffer that is restored to the state of ARTICLE."
(let ((file (nndraft-article-filename article ".state"))
nndraft-point nndraft-mode nndraft-buffer-name)
(goto-char nndraft-point))
nndraft-buffer-name)))
-(defun nndraft-request-update-info (group info &optional server)
+(deffoo nndraft-request-update-info (group info &optional server)
(setcar (cddr info) nil)
(when (nth 3 info)
- (setcar (nthcdr 3 info) nil)))
+ (setcar (nthcdr 3 info) nil))
+ t)
-(defun nndraft-request-associate-buffer (group)
+(deffoo nndraft-request-associate-buffer (group)
"Associate the current buffer with some article in the draft group."
(let* ((gnus-verbose-backends nil)
- (article (cdr (nndraft-request-accept-article group t 'noinsert)))
+ (article (cdr (nndraft-request-accept-article
+ group (nnoo-current-server 'nndraft) t 'noinsert)))
(file (nndraft-article-filename article)))
(setq buffer-file-name file)
(setq buffer-auto-save-file-name (make-auto-save-file-name))
(clear-visited-file-modtime)
article))
-(defun nndraft-request-group (group &optional server dont-check)
+(deffoo nndraft-request-group (group &optional server dont-check)
(prog1
(nndraft-execute-nnmh-command
`(nnmh-request-group group "" ,dont-check))
(nnheader-report 'nndraft nnmh-status-string)))
-(defun nndraft-request-list (&optional server dir)
+(deffoo nndraft-request-list (&optional server dir)
(nndraft-execute-nnmh-command
`(nnmh-request-list nil ,dir)))
-(defun nndraft-request-newgroups (date &optional server)
+(deffoo nndraft-request-newgroups (date &optional server)
(nndraft-execute-nnmh-command
`(nnmh-request-newgroups ,date ,server)))
-(defun nndraft-request-expire-articles
+(deffoo nndraft-request-expire-articles
(articles group &optional server force)
(let ((res (nndraft-execute-nnmh-command
`(nnmh-request-expire-articles
(funcall nnmail-delete-file-function auto)))))
res))
-(defun nndraft-request-accept-article (group &optional last noinsert)
+(deffoo nndraft-request-accept-article (group &optional server last noinsert)
(let* ((point (point))
(mode major-mode)
(name (buffer-name))
(gnus-verbose-backends nil)
(gart (nndraft-execute-nnmh-command
- `(nnmh-request-accept-article group ,last noinsert)))
+ `(nnmh-request-accept-article group ,server ,last noinsert)))
(state
(nndraft-article-filename (cdr gart) ".state")))
;; Write the "state" file.
(kill-buffer (current-buffer)))
gart))
-(defun nndraft-close-group (group &optional server)
+(deffoo nndraft-close-group (group &optional server)
t)
-(defun nndraft-request-create-group (group &optional server)
+(deffoo nndraft-request-create-group (group &optional server args)
(if (file-exists-p nndraft-directory)
(if (file-directory-p nndraft-directory)
t
nil)
(condition-case ()
(progn
- (make-directory nndraft-directory t)
+ (gnus-make-directory nndraft-directory)
t)
(file-error nil))))
(defun nndraft-execute-nnmh-command (command)
(let ((dir (expand-file-name nndraft-directory)))
- (and (string-match "/$" dir)
- (setq dir (substring dir 0 (match-beginning 0))))
+ (when (string-match "/$" dir)
+ (setq dir (substring dir 0 (match-beginning 0))))
(string-match "/[^/]+$" dir)
(let ((group (substring dir (1+ (match-beginning 0))))
(nnmh-directory (substring dir 0 (1+ (match-beginning 0))))