Importing pgnus-0.25.
[elisp/gnus.git-] / lisp / nnmail.el
index a03c195..adeb605 100644 (file)
 (eval-when-compile (require 'cl))
 
 (require 'nnheader)
-(require 'timezone)
 (require 'message)
 (require 'custom)
 (require 'gnus-util)
 
 (eval-and-compile
   (autoload 'gnus-error "gnus-util")
-  (autoload 'gnus-buffer-live-p "gnus-util")
-  (autoload 'gnus-encode-coding-string "gnus-ems"))
+  (autoload 'gnus-buffer-live-p "gnus-util"))
 
 (defgroup nnmail nil
   "Reading mail with Gnus."
@@ -182,7 +180,8 @@ used as incoming mailboxes.
 If this variable is a directory (i. e., it's name ends with a \"/\"),
 treat all files in that directory as incoming spool files."
   :group 'nnmail-files
-  :type 'file)
+  :type '(choice (file :tag "File")
+                (repeat :tag "Files" file)))
 
 (defcustom nnmail-crash-box "~/.gnus-crash-box"
   "File where Gnus will store mail while processing it."
@@ -408,7 +407,7 @@ Example:
   :group 'nnmail-split
   :type '(repeat (cons :format "%v" symbol regexp)))
 
-(defcustom nnmail-delete-incoming t
+(defcustom nnmail-delete-incoming nil
   "*If non-nil, the mail backends will delete incoming files after
 splitting."
   :group 'nnmail-retrieve
@@ -482,7 +481,7 @@ parameter.  It should return nil, `warn' or `delete'."
 (defun nnmail-request-post (&optional server)
   (mail-send-and-exit nil))
 
-(defvar nnmail-file-coding-system 'raw-text
+(defvar nnmail-file-coding-system 'binary
   "Coding system used in nnmail.")
 
 (defun nnmail-find-file (file)
@@ -493,7 +492,7 @@ parameter.  It should return nil, `warn' or `delete'."
         (after-insert-file-functions nil))
     (condition-case ()
        (let ((coding-system-for-read nnmail-file-coding-system)
-             (pathname-coding-system 'binary))
+             (pathname-coding-system nnmail-file-coding-system))
          (insert-file-contents file)
          t)
       (file-error nil))))
@@ -513,54 +512,12 @@ parameter.  It should return nil, `warn' or `delete'."
         (concat dir group "/")
        ;; If not, we translate dots into slashes.
        (concat dir
-              (gnus-encode-coding-string
+              (mm-encode-coding-string
                (nnheader-replace-chars-in-string group ?. ?/)
                nnmail-pathname-coding-system)
               "/")))
    (or file "")))
 
-(defun nnmail-date-to-time (date)
-  "Convert DATE into time."
-  (condition-case ()
-      (let* ((d1 (timezone-parse-date date))
-            (t1 (timezone-parse-time (aref d1 3))))
-       (apply 'encode-time
-              (mapcar (lambda (el)
-                        (and el (string-to-number el)))
-                      (list
-                       (aref t1 2) (aref t1 1) (aref t1 0)
-                       (aref d1 2) (aref d1 1) (aref d1 0)
-                       (number-to-string
-                        (* 60 (timezone-zone-to-minute (aref d1 4))))))))
-    ;; If we get an error, then we just return a 0 time.
-    (error (list 0 0))))
-
-(defun nnmail-time-less (t1 t2)
-  "Say whether time T1 is less than time T2."
-  (or (< (car t1) (car t2))
-      (and (= (car t1) (car t2))
-          (< (nth 1 t1) (nth 1 t2)))))
-
-(defun nnmail-days-to-time (days)
-  "Convert DAYS into time."
-  (let* ((seconds (* 1.0 days 60 60 24))
-        (rest (expt 2 16))
-        (ms (condition-case nil (floor (/ seconds rest))
-              (range-error (expt 2 16)))))
-    (list ms (condition-case nil (round (- seconds (* ms rest)))
-              (range-error (expt 2 16))))))
-
-(defun nnmail-time-since (time)
-  "Return the time since TIME, which is either an internal time or a date."
-  (when (stringp time)
-    ;; Convert date strings to internal time.
-    (setq time (nnmail-date-to-time time)))
-  (let* ((current (current-time))
-        (rest (when (< (nth 1 current) (nth 1 time))
-                (expt 2 16))))
-    (list (- (+ (car current) (if rest -1 0)) (car time))
-         (- (+ (or rest 0) (nth 1 current)) (nth 1 time)))))
-
 ;; Function rewritten from rmail.el.
 (defun nnmail-move-inbox (inbox)
   "Move INBOX to `nnmail-crash-box'."
@@ -704,7 +661,7 @@ nn*-request-list should have been called before calling this function."
   "Save GROUP-ASSOC in ACTIVE-FILE."
   (let ((coding-system-for-write nnmail-active-file-coding-system))
     (when file-name
-      (nnheader-temp-write file-name
+      (with-temp-file file-name
        (nnmail-generate-active group-assoc)))))
 
 (defun nnmail-generate-active (alist)
@@ -1154,7 +1111,7 @@ FUNC will be called with the group name to determine the article number."
          (let ((trace (nreverse nnmail-split-trace))
                (restore (current-buffer)))
            (nnheader-set-temp-buffer "*Split Trace*")
-           (gnus-add-current-to-buffer-list)
+           (gnus-add-buffer)
            (while trace
              (insert (car trace) "\n")
              (setq trace (cdr trace)))
@@ -1201,8 +1158,9 @@ Return the number of characters in the body."
       (insert (format "Xref: %s" (system-name)))
       (while group-alist
        (insert (format " %s:%d"
-                       (gnus-encode-coding-string (caar group-alist)
-                                             nnmail-pathname-coding-system)
+                       (mm-encode-coding-string
+                        (caar group-alist)
+                        nnmail-pathname-coding-system)
                        (cdar group-alist)))
        (setq group-alist (cdr group-alist)))
       (insert "\n"))))
@@ -1670,9 +1628,9 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
             ;; This is an ange-ftp group, and we don't have any dates.
             nil)
            ((numberp days)
-            (setq days (nnmail-days-to-time days))
+            (setq days (days-to-time days))
             ;; Compare the time with the current time.
-            (nnmail-time-less days (nnmail-time-since time)))))))
+            (time-less-p days (time-since time)))))))
 
 (defvar nnmail-read-passwd nil)
 (defun nnmail-read-passwd (prompt &rest args)