*** empty log message ***
[gnus] / lisp / nndraft.el
index f75303d..77d5552 100644 (file)
 
 (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))))