(defun gnus-request-scan (group gnus-command-method)
"Request a SCAN being performed in GROUP from GNUS-COMMAND-METHOD.
If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
- (when gnus-plugged
- (let ((gnus-command-method
- (if group (gnus-find-method-for-group group) gnus-command-method))
- (gnus-inhibit-demon t))
- (funcall (gnus-get-function gnus-command-method 'request-scan)
- (and group (gnus-group-real-name group))
- (nth 1 gnus-command-method)))))
+ (let ((gnus-command-method
+ (if group (gnus-find-method-for-group group) gnus-command-method))
+ (gnus-inhibit-demon t)
+ (mail-source-plugged gnus-plugged))
+ (if (or gnus-plugged (not (gnus-agent-method-p gnus-command-method)))
+ (funcall (gnus-get-function gnus-command-method 'request-scan)
+ (and group (gnus-group-real-name group))
+ (nth 1 gnus-command-method)))))
(defsubst gnus-request-update-info (info gnus-command-method)
"Request that GNUS-COMMAND-METHOD update INFO."
"A dynamically bound string that says what the current mail source is.")
(eval-and-compile
+ (defvar mail-source-common-keyword-map
+ '((:plugged))
+ "Mapping from keywords to default values.
+Common keywords should be listed here.")
+
(defvar mail-source-keyword-map
'((file
(:prescript)
(defvar mail-source-password-cache nil)
+(defvar mail-source-plugged t)
+
;;; Functions
(eval-and-compile
(mail-source-value value)
(mail-source-value (cadr default)))))))
+(eval-and-compile
+ (defun mail-source-bind-common-1 ()
+ (let* ((defaults mail-source-common-keyword-map)
+ default bind)
+ (while (setq default (pop defaults))
+ (push (list (mail-source-strip-keyword (car default))
+ nil)
+ bind))
+ bind)))
+
+(defun mail-source-set-common-1 (source)
+ (let* ((type (pop source))
+ (defaults mail-source-common-keyword-map)
+ (defaults-1 (cdr (assq type mail-source-keyword-map)))
+ default value keyword)
+ (while (setq default (pop defaults))
+ (set (mail-source-strip-keyword (setq keyword (car default)))
+ (if (setq value (plist-get source keyword))
+ (mail-source-value value)
+ (if (setq value (plist-get defaults-1 keyword))
+ (mail-source-value value)
+ (mail-source-value (cadr default))))))))
+
+(defmacro mail-source-bind-common (source &rest body)
+ "Return a `let' form that binds all common variables.
+See `mail-source-bind'."
+ `(let ,(mail-source-bind-common-1)
+ (mail-source-set-common-1 source)
+ ,@body))
+
+(put 'mail-source-bind-common 'lisp-indent-function 1)
+(put 'mail-source-bind-common 'edebug-form-spec '(form body))
+
(defun mail-source-value (value)
"Return the value of VALUE."
(cond
CALLBACK will be called with the name of the file where (some of)
the mail from SOURCE is put.
Return the number of files that were found."
- (save-excursion
- (let ((function (cadr (assq (car source) mail-source-fetcher-alist)))
- (found 0))
- (unless function
- (error "%S is an invalid mail source specification" source))
- ;; If there's anything in the crash box, we do it first.
- (when (file-exists-p mail-source-crash-box)
- (message "Processing mail from %s..." mail-source-crash-box)
- (setq found (mail-source-callback
- callback mail-source-crash-box)))
- (+ found
- (condition-case err
- (funcall function source callback)
- (error
- (unless (yes-or-no-p
- (format "Mail source error (%s). Continue? " err))
- (error "Cannot get new mail."))
- 0))))))
+ (mail-source-bind-common source
+ (if (or mail-source-plugged plugged)
+ (save-excursion
+ (let ((function (cadr (assq (car source) mail-source-fetcher-alist)))
+ (found 0))
+ (unless function
+ (error "%S is an invalid mail source specification" source))
+ ;; If there's anything in the crash box, we do it first.
+ (when (file-exists-p mail-source-crash-box)
+ (message "Processing mail from %s..." mail-source-crash-box)
+ (setq found (mail-source-callback
+ callback mail-source-crash-box)))
+ (+ found
+ (condition-case err
+ (funcall function source callback)
+ (error
+ (unless (yes-or-no-p
+ (format "Mail source error (%s). Continue? " err))
+ (error "Cannot get new mail."))
+ 0))))))))
(defun mail-source-make-complex-temp-name (prefix)
(let ((newname (make-temp-name prefix))