*** empty log message ***
[gnus] / lisp / nndraft.el
index f19c7a9..5f2cb9a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; 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)
@@ -69,7 +63,7 @@
          '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))))