;; 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 '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
- (list
- '(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)
(nnheader-fold-continuation-lines)
'headers))))
-(defun nndraft-open-server (server &optional defs)
- (nnheader-init-server-buffer)
- (if (equal server nndraft-current-server)
- t
- (if nndraft-current-server
- (setq nndraft-server-alist
- (cons (list nndraft-current-server
- (nnheader-save-variables nndraft-server-variables))
- nndraft-server-alist)))
- (let ((state (assoc server nndraft-server-alist)))
- (if state
- (progn
- (nnheader-restore-variables (nth 1 state))
- (setq nndraft-server-alist (delq state nndraft-server-alist)))
- (nnheader-set-init-variables nndraft-server-variables defs))
- (or (assq 'nndraft-directory defs)
- (setq nndraft-directory server)))
- (setq nndraft-current-server server)))
-
-(defun nndraft-close-server (&optional server)
- 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-open-server (server &optional defs)
+ (nnoo-change-server 'nndraft server defs)
+ (unless (assq 'nndraft-directory defs)
+ (setq nndraft-directory server))
+ (cond
+ ((not (file-exists-p nndraft-directory))
+ (nndraft-close-server)
+ (nnheader-report 'nndraft "No such file or directory: %s"
+ nndraft-directory))
+ ((not (file-directory-p (file-truename nndraft-directory)))
+ (nndraft-close-server)
+ (nnheader-report 'nndraft "Not a directory: %s" nndraft-directory))
+ (t
+ (nnheader-report 'nndraft "Opened server %s using directory %s"
+ server nndraft-directory)
+ t)))
+
+(deffoo nndraft-request-article (id &optional group server buffer)
(when (numberp id)
;; We get the newest file of the auto-saved file and the
;; "real" file.
(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)
- (setcar (cdr (cdr info)) nil)
+(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))))
+ `(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)))))
+ `(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-post (&optional server)
- (mail-send-and-exit nil))
+ `(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
- (quote (, articles)) group (, server) (, force)))))
+ `(nnmh-request-expire-articles
+ ',articles group ,server ,force)))
article)
;; Delete all the "state" files of articles that have been expired.
(while 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))))
(string-match "/[^/]+$" dir)
(let ((group (substring dir (1+ (match-beginning 0))))
(nnmh-directory (substring dir 0 (1+ (match-beginning 0))))
+ (nnmail-keep-last-article nil)
(nnmh-get-new-mail nil))
(eval command))))