(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)
(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)
(defvar mm-url-predefined-programs
- '((wget "wget" "-q" "-O" "-")
+ '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-")
(w3m "w3m" "-dump_source")
(lynx "lynx" "-source")
(curl "curl")))
(require 'w3-vars)
(require 'url)))
+;;;###autoload
(defun mm-url-insert-file-contents (url)
+ "Insert file contents of URL.
+If `mm-url-use-external' is non-nil, use `mm-url-program'."
(if mm-url-use-external
(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)
(while (re-search-forward "\r 1000\r ?" nil t)
(replace-match "")))
(setq buffer-file-name name)
- (if (fboundp 'url-generic-parse-url)
+ (if (and (fboundp 'url-generic-parse-url)
+ (listp result))
(setq url-current-object (url-generic-parse-url
- (if (listp result)
- (car result)
- result))))
+ (car result))))
result)))
+;;;###autoload
(defun mm-url-insert-file-contents-external (url)
+ "Insert file contents of URL using `mm-url-program'."
(let (program args)
(if (symbolp mm-url-program)
(let ((item (cdr (assq mm-url-program mm-url-predefined-programs))))
args (append (cdr item) (list url))))
(setq program mm-url-program
args (append mm-url-arguments (list url))))
- (apply 'call-process program nil t nil args)))
+ (unless (eq 0 (apply 'call-process program nil t nil args))
+ (error "Couldn't fetch %s" url))))
(defvar mm-url-timeout 30
"The number of seconds before timing out an URL fetch.")