* gnus.el: Fix copyright statements.
[gnus] / lisp / nndraft.el
index 4beea9f..22a76c1 100644 (file)
@@ -1,7 +1,8 @@
 ;;; nndraft.el --- draft article access for Gnus
-;; Copyright (C) 1995,96,97 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;;        Free Software Foundation, Inc.
 
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 (require 'gnus-start)
 (require 'nnmh)
 (require 'nnoo)
-(eval-when-compile (require 'cl))
+(require 'mm-util)
+(eval-when-compile
+  (require 'cl)
+  ;; This is just to shut up the byte-compiler.
+  (fset 'nndraft-request-group 'ignore))
 
 (nnoo-declare nndraft
   nnmh)
   (save-excursion
     (set-buffer nntp-server-buffer)
     (erase-buffer)
-    (let* ((buf (get-buffer-create " *draft headers*"))
-          article)
-      (set-buffer buf)
-      (buffer-disable-undo (current-buffer))
-      (erase-buffer)
+    (let* (article)
       ;; We don't support fetching by Message-ID.
       (if (stringp (car articles))
          'headers
        (while articles
-         (set-buffer buf)
+         (narrow-to-region (point) (point))
          (when (nndraft-request-article
                 (setq article (pop articles)) group server (current-buffer))
            (goto-char (point-min))
                (forward-line -1)
              (goto-char (point-max)))
            (delete-region (point) (point-max))
-           (set-buffer nntp-server-buffer)
-           (goto-char (point-max))
+           (goto-char (point-min))
            (insert (format "221 %d Article retrieved.\n" article))
-           (insert-buffer-substring buf)
+           (widen)
+           (goto-char (point-max))
            (insert ".\n")))
 
        (nnheader-fold-continuation-lines)
           (newest (if (file-newer-than-file-p file auto) file auto))
           (nntp-server-buffer (or buffer nntp-server-buffer)))
       (when (and (file-exists-p newest)
-                (nnmail-find-file newest))
+                (let ((nnmail-file-coding-system
+                       (if (file-newer-than-file-p file auto)
+                           (if (equal group "drafts")
+                               message-draft-coding-system
+                             mm-text-coding-system)
+                         mm-auto-save-coding-system)))
+                  (nnmail-find-file newest)))
        (save-excursion
          (set-buffer nntp-server-buffer)
          (goto-char (point-min))
   "Request a new buffer that is restored to the state of ARTICLE."
   (nndraft-possibly-change-group group)
   (when (nndraft-request-article article group server (current-buffer))
-    (message-remove-header "xrefs")
+    (message-remove-header "xref")
     (message-remove-header "lines")
-    (let ((gnus-verbose-backends nil))
-      (nndraft-request-expire-articles (list article) group server t))
     t))
 
 (deffoo nndraft-request-update-info (group info &optional server)
    info
    (gnus-update-read-articles (gnus-group-prefixed-name group '(nndraft ""))
                              (nndraft-articles) t))
-  (let (marks)
-    (when (setq marks (nth 3 info))
+  (let ((marks (nth 3 info)))
+    (when marks
+      ;; Nix out all marks except the `unsend'-able article marks.
       (setcar (nthcdr 3 info)
              (if (assq 'unsend marks)
                  (list (assq 'unsend marks))
 
 (deffoo nndraft-request-associate-buffer (group)
   "Associate the current buffer with some article in the draft group."
+  (nndraft-open-server "")
+  (nndraft-request-group group)
   (nndraft-possibly-change-group group)
   (let ((gnus-verbose-backends nil)
        (buf (current-buffer))
-        article file)
-    (nnheader-temp-write nil
-      (insert-buffer buf)
+       article file)
+    (with-temp-buffer
+      (insert-buffer-substring buf)
       (setq article (nndraft-request-accept-article
-                    group (nnoo-current-server 'nndraft) t 'noinsert))
-      (setq file (nndraft-article-filename article)))
-    (setq buffer-file-name file)
-    (setq buffer-auto-save-file-name (make-auto-save-file-name))
+                    group (nnoo-current-server 'nndraft) t 'noinsert)
+           file (nndraft-article-filename article)))
+    (setq buffer-file-name (expand-file-name file)
+         buffer-auto-save-file-name (make-auto-save-file-name))
     (clear-visited-file-modtime)
     article))
 
        (let ((auto (nndraft-auto-save-file-name
                     (nndraft-article-filename article))))
          (when (file-exists-p auto)
-           (funcall nnmail-delete-file-function auto)))))
+           (funcall nnmail-delete-file-function auto)))
+       (dolist (backup
+                (let ((kept-new-versions 1)
+                      (kept-old-versions 0))
+                  (find-backup-file-name
+                   (nndraft-article-filename article))))
+         (when (file-exists-p backup)
+           (funcall nnmail-delete-file-function backup)))))
     res))
 
 (deffoo nndraft-request-accept-article (group &optional server last noinsert)
    nnmh-retrieve-headers
    nnmh-request-group
    nnmh-close-group
-   nnmh-request-list 
+   nnmh-request-list
    nnmh-request-newsgroups
    nnmh-request-move-article
    nnmh-request-replace-article))