* nnmail.el (nnmail-cache-insert): make sure that the
[gnus] / lisp / mm-url.el
index f76b8db..5fb925e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-url.el --- a wrapper of url functions/commands for Gnus
-;; Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 
 (eval-when-compile (require 'cl))
 
 (require 'mm-util)
+(require 'gnus)
 
 (eval-and-compile
   (autoload 'executable-find "executable"))
 
+(eval-when-compile
+  (require 'timer))
+
 (defgroup mm-url nil
   "A wrapper of url package and external url command for Gnus."
   :group 'gnus)
@@ -44,7 +48,7 @@
                                (condition-case nil
                                    (require 'url)
                                  (error nil)))
-  "*If not-nil, use external grab program `mm-url-program'."
+  "*If non-nil, use external grab program `mm-url-program'."
   :type 'boolean
   :group 'mm-url)
 
     (lynx "lynx" "-source")
     (curl "curl")))
 
-(defcustom mm-url-program 
+(defcustom mm-url-program
   (cond
    ((executable-find "wget") 'wget)
    ((executable-find "w3m") 'w3m)
    ((executable-find "lynx") 'lynx)
    ((executable-find "curl") 'curl)
    (t "GET"))
-  "The url grab program."
-  :type '(choice 
+  "The url grab program.
+Likely values are `wget', `w3m', `lynx' and `curl'."
+  :type '(choice
          (symbol :tag "wget" wget)
          (symbol :tag "w3m" w3m)
          (symbol :tag "lynx" lynx)
 \f
 ;;; Internal variables
 
+(defvar mm-url-package-name
+  (gnus-replace-in-string
+   (gnus-replace-in-string gnus-version " v.*$" "")
+   " " "-"))
+
+(defvar        mm-url-package-version gnus-version-number)
+
 ;; Stolen from w3.
 (defvar mm-url-html-entities
   '(
@@ -253,21 +265,43 @@ This is taken from RFC 2396.")
 
 (defun mm-url-load-url ()
   "Load `url-insert-file-contents'."
-  (condition-case ()
-      (require 'url-handlers)
-    (error nil))
-  (require 'url))
+  (unless (condition-case ()
+             (require 'url-handlers)
+           (error nil))
+    ;; w3-4.0pre0.46 or earlier version.
+    (require 'w3-vars)
+    (require 'url)))
 
 (defun mm-url-insert-file-contents (url)
   (if mm-url-use-external
-      (if (string-match "^file:/+" url)
-         (insert-file-contents (substring url (1- (match-end 0))))
-       (mm-url-insert-file-contents-external url))
+      (progn
+       (if (string-match "^file:/+" url)
+           (insert-file-contents (substring url (1- (match-end 0))))
+         (mm-url-insert-file-contents-external url))
+       (goto-char (point-min))
+       (if (fboundp 'url-generic-parse-url)
+           (setq url-current-object 
+                 (url-generic-parse-url url)))
+       (list url (buffer-size)))
     (mm-url-load-url)
-    (let ((name buffer-file-name))
-      (prog1
-         (url-insert-file-contents url)
-       (setq buffer-file-name name)))))
+    (let ((name buffer-file-name)
+         (url-request-extra-headers (list (cons "Connection" "Close")))
+         (url-package-name (or mm-url-package-name
+                               url-package-name))
+         (url-package-version (or mm-url-package-version
+                                  url-package-version))
+         result)
+      (setq result (url-insert-file-contents url))
+      (save-excursion
+       (goto-char (point-min))
+       (while (re-search-forward "\r 1000\r ?" nil t)
+         (replace-match "")))
+      (setq buffer-file-name name)
+      (if (and (fboundp 'url-generic-parse-url)
+              (listp result))
+         (setq url-current-object (u