emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/gnus/mail-source.el [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/gnus/mail-source.el [lexbind]
Date: Wed, 15 Sep 2004 20:35:17 -0400

Index: emacs/lisp/gnus/mail-source.el
diff -c emacs/lisp/gnus/mail-source.el:1.12.2.2 
emacs/lisp/gnus/mail-source.el:1.12.2.3
*** emacs/lisp/gnus/mail-source.el:1.12.2.2     Tue Oct 14 23:34:50 2003
--- emacs/lisp/gnus/mail-source.el      Thu Sep 16 00:12:16 2004
***************
*** 1,5 ****
  ;;; mail-source.el --- functions for fetching mail
! ;; Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <address@hidden>
  ;; Keywords: news, mail
--- 1,6 ----
  ;;; mail-source.el --- functions for fetching mail
! ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
! ;;        Free Software Foundation, Inc.
  
  ;; Author: Lars Magne Ingebrigtsen <address@hidden>
  ;; Keywords: news, mail
***************
*** 32,40 ****
  (eval-and-compile
    (autoload 'pop3-movemail "pop3")
    (autoload 'pop3-get-message-count "pop3")
!   (autoload 'nnheader-cancel-timer "nnheader"))
  (require 'format-spec)
  (require 'mm-util)
  
  (defgroup mail-source nil
    "The mail-fetching library."
--- 33,43 ----
  (eval-and-compile
    (autoload 'pop3-movemail "pop3")
    (autoload 'pop3-get-message-count "pop3")
!   (autoload 'nnheader-cancel-timer "nnheader")
!   (autoload 'nnheader-run-at-time "nnheader"))
  (require 'format-spec)
  (require 'mm-util)
+ (require 'message) ;; for `message-directory'
  
  (defgroup mail-source nil
    "The mail-fetching library."
***************
*** 58,63 ****
--- 61,67 ----
  This variable is a list of mail source specifiers.
  See Info node `(gnus)Mail Source Specifiers'."
    :group 'mail-source
+   :link '(custom-manual "(gnus)Mail Source Specifiers")
    :type `(repeat
          (choice :format "%[Value Menu%] %v"
                  :value (file)
***************
*** 81,90 ****
                                          (function :tag "Predicate"))
                                   (group :inline t
                                          (const :format "" :value :prescript)
!                                         (string :tag "Prescript"))
                                   (group :inline t
                                          (const :format "" :value :postscript)
!                                         (string :tag "Postscript"))
                                   (group :inline t
                                          (const :format "" :value :plugged)
                                          (boolean :tag "Plugged"))))
--- 85,100 ----
                                          (function :tag "Predicate"))
                                   (group :inline t
                                          (const :format "" :value :prescript)
!                                         (choice :tag "Prescript"
!                                                 :value nil
!                                                 (string :format "%v")
!                                                 (function :format "%v")))
                                   (group :inline t
                                          (const :format "" :value :postscript)
!                                         (choice :tag "Postscript"
!                                                 :value nil
!                                                 (string :format "%v")
!                                                 (function :format "%v")))
                                   (group :inline t
                                          (const :format "" :value :plugged)
                                          (boolean :tag "Plugged"))))
***************
*** 111,120 ****
                                          (string :tag "Program"))
                                   (group :inline t
                                          (const :format "" :value :prescript)
!                                         (string :tag "Prescript"))
                                   (group :inline t
                                          (const :format "" :value :postscript)
!                                         (string :tag "Postscript"))
                                   (group :inline t
                                          (const :format "" :value :function)
                                          (function :tag "Function"))
--- 121,136 ----
                                          (string :tag "Program"))
                                   (group :inline t
                                          (const :format "" :value :prescript)
!                                         (choice :tag "Prescript"
!                                                 :value nil
!                                                 (string :format "%v")
!                                                 (function :format "%v")))
                                   (group :inline t
                                          (const :format "" :value :postscript)
!                                         (choice :tag "Postscript"
!                                                 :value nil
!                                                 (string :format "%v")
!                                                 (function :format "%v")))
                                   (group :inline t
                                          (const :format "" :value :function)
                                          (function :tag "Function"))
***************
*** 160,165 ****
--- 176,184 ----
                                                  :value network
                                                  ,@mail-source-imap-streams))
                                   (group :inline t
+                                         (const :format "" :value :program)
+                                         (string :tag "Program"))
+                                  (group :inline t
                                          (const :format ""
                                                 :value :authenticator)
                                          (choice :tag "Authenticator"
***************
*** 213,230 ****
                                          (const :format "" :value :plugged)
                                          (boolean :tag "Plugged")))))))
  
  (defcustom mail-source-primary-source nil
    "*Primary source for incoming mail.
  If non-nil, this maildrop will be checked periodically for new mail."
    :group 'mail-source
    :type 'sexp)
  
  (defcustom mail-source-crash-box "~/.emacs-mail-crash-box"
    "File where mail will be stored while processing it."
    :group 'mail-source
    :type 'file)
  
! (defcustom mail-source-directory "~/Mail/"
    "Directory where files (if any) will be stored."
    :group 'mail-source
    :type 'directory)
--- 232,259 ----
                                          (const :format "" :value :plugged)
                                          (boolean :tag "Plugged")))))))
  
+ (defcustom mail-source-ignore-errors nil
+   "*Ignore errors when querying mail sources.
+ If nil, the user will be prompted when an error occurs.  If non-nil,
+ the error will be ignored.")
+ 
  (defcustom mail-source-primary-source nil
    "*Primary source for incoming mail.
  If non-nil, this maildrop will be checked periodically for new mail."
    :group 'mail-source
    :type 'sexp)
  
+ (defcustom mail-source-flash t
+   "*If non-nil, flash periodically when mail is available."
+   :group 'mail-source
+   :type 'boolean)
+ 
  (defcustom mail-source-crash-box "~/.emacs-mail-crash-box"
    "File where mail will be stored while processing it."
    :group 'mail-source
    :type 'file)
  
! (defcustom mail-source-directory message-directory
    "Directory where files (if any) will be stored."
    :group 'mail-source
    :type 'directory)
***************
*** 235,241 ****
    :type 'integer)
  
  (defcustom mail-source-delete-incoming t
!   "*If non-nil, delete incoming files after handling."
    :group 'mail-source
    :type 'boolean)
  
--- 264,286 ----
    :type 'integer)
  
  (defcustom mail-source-delete-incoming t
!   "*If non-nil, delete incoming files after handling.
! If t, delete immediately, if nil, never delete.  If a positive number, delete
! files older than number of days."
!   ;; Note: The removing happens in `mail-source-callback', i.e. no old
!   ;; incoming files will be deleted, unless you receive new mail.
!   ;;
!   ;; You may also set this to `nil' and call `mail-source-delete-old-incoming'
!   ;; from a hook or interactively.
!   :group 'mail-source
!   :type '(choice (const :tag "immediately" t)
!                (const :tag "never" nil)
!                (integer :tag "days")))
! 
! (defcustom mail-source-delete-old-incoming-confirm t
!   "*If non-nil, ask for for confirmation before deleting old incoming files.
! This variable only applies when `mail-source-delete-incoming' is a positive
! number."
    :group 'mail-source
    :type 'boolean)
  
***************
*** 254,259 ****
--- 299,309 ----
    :group 'mail-source
    :type 'number)
  
+ (defcustom mail-source-movemail-program nil
+   "If non-nil, name of program for fetching new mail."
+   :group 'mail-source
+   :type '(choice (const nil) string))
+ 
  ;;; Internal variables.
  
  (defvar mail-source-string ""
***************
*** 295,312 ****
         (:authentication password))
        (maildir
         (:path (or (getenv "MAILDIR") "~/Maildir/"))
!        (:subdirs ("new" "cur"))
         (:function))
        (imap
         (:server (getenv "MAILHOST"))
         (:port)
         (:stream)
         (:authentication)
         (:user (or (user-login-name) (getenv "LOGNAME") (getenv "USER")))
         (:password)
         (:mailbox "INBOX")
         (:predicate "UNSEEN UNDELETED")
         (:fetchflag "\\Deleted")
         (:dontexpunge))
        (webmail
         (:subtype hotmail)
--- 345,366 ----
         (:authentication password))
        (maildir
         (:path (or (getenv "MAILDIR") "~/Maildir/"))
!        (:subdirs ("cur" "new"))
         (:function))
        (imap
         (:server (getenv "MAILHOST"))
         (:port)
         (:stream)
+        (:program)
         (:authentication)
         (:user (or (user-login-name) (getenv "LOGNAME") (getenv "USER")))
         (:password)
         (:mailbox "INBOX")
         (:predicate "UNSEEN UNDELETED")
         (:fetchflag "\\Deleted")
+        (:prescript)
+        (:prescript-delay)
+        (:postscript)
         (:dontexpunge))
        (webmail
         (:subtype hotmail)
***************
*** 365,371 ****
       ,@body))
  
  (put 'mail-source-bind 'lisp-indent-function 1)
! (put 'mail-source-bind 'edebug-form-spec '(form body))
  
  (defun mail-source-set-1 (source)
    (let* ((type (pop source))
--- 419,425 ----
       ,@body))
  
  (put 'mail-source-bind 'lisp-indent-function 1)
! (put 'mail-source-bind 'edebug-form-spec '(sexp body))
  
  (defun mail-source-set-1 (source)
    (let* ((type (pop source))
***************
*** 408,414 ****
       ,@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."
--- 462,468 ----
       ,@body))
  
  (put 'mail-source-bind-common 'lisp-indent-function 1)
! (put 'mail-source-bind-common 'edebug-form-spec '(sexp body))
  
  (defun mail-source-value (value)
    "Return the value of VALUE."
***************
*** 442,465 ****
              (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))))))))
! 
! (eval-and-compile
!   (if (fboundp 'make-temp-file)
!       (defalias 'mail-source-make-complex-temp-name 'make-temp-file)
!     (defun mail-source-make-complex-temp-name (prefix)
!       (let ((newname (make-temp-name prefix))
!           (newprefix prefix))
!       (while (file-exists-p newname)
!         (setq newprefix (concat newprefix "x"))
!         (setq newname (make-temp-name newprefix)))
!       newname))))
  
  (defun mail-source-callback (callback info)
    "Call CALLBACK on the mail file, and then remove the mail file.
--- 496,547 ----
              (setq found (mail-source-callback
                           callback mail-source-crash-box)))
            (+ found
!              (if (or debug-on-quit debug-on-error)
                   (funcall function source callback)
!                (condition-case err
!                    (funcall function source callback)
!                  (error
!                   (if (and (not mail-source-ignore-errors)
!                            (not
!                             (yes-or-no-p
!                              (format "Mail source %s error (%s).  Continue? "
!                                      (if (memq ':password source)
!                                          (let ((s (copy-sequence source)))
!                                            (setcar (cdr (memq ':password s)) 
!                                                    "********")
!                                            s)
!                                        source)
!                                      (cadr err)))))
!                     (error "Cannot get new mail"))
!                   0)))))))))
! 
! (defun mail-source-delete-old-incoming (&optional age confirm)
!   "Remove incoming files older than AGE days.
! If CONFIRM is non-nil, ask for confirmation before removing a file."
!   (interactive "P")
!   (let* ((high2days (/ 65536.0 60 60 24));; convert high bits to days
!        (low2days  (/ 1.0 65536.0))     ;; convert low bits to days
!        (diff (if (natnump age) age 30));; fallback, if no valid AGE given
!        currday files)
!     (setq files (directory-files
!                mail-source-directory t
!                (concat mail-source-incoming-file-prefix "*"))
!         currday (* (car (current-time)) high2days)
!         currday (+ currday (* low2days (nth 1 (current-time)))))
!     (while files
!       (let* ((ffile (car files))
!            (bfile (gnus-replace-in-string
!                    ffile "\\`.*/\\([^/]+\\)\\'" "\\1"))
!            (filetime (nth 5 (file-attributes ffile)))
!            (fileday (* (car filetime) high2days))
!            (fileday (+ fileday (* low2days (nth 1 filetime)))))
!       (setq files (cdr files))
!       (when (and (> (- currday fileday) diff)
!                  (gnus-message 8 "File `%s' is older than %s day(s)"
!                                bfile diff)
!                  (or (not confirm)
!                      (y-or-n-p (concat "Remove file `" bfile "'? "))))
!         (delete-file ffile))))))
  
  (defun mail-source-callback (callback info)
    "Call CALLBACK on the mail file, and then remove the mail file.
***************
*** 474,489 ****
        (funcall callback mail-source-crash-box info)
        (when (file-exists-p mail-source-crash-box)
        ;; Delete or move the incoming mail out of the way.
!       (if mail-source-delete-incoming
            (delete-file mail-source-crash-box)
          (let ((incoming
!                (mail-source-make-complex-temp-name
                  (expand-file-name
                   mail-source-incoming-file-prefix
                   mail-source-directory))))
            (unless (file-exists-p (file-name-directory incoming))
              (make-directory (file-name-directory incoming) t))
!           (rename-file mail-source-crash-box incoming t)))))))
  
  (defun mail-source-movemail (from to)
    "Move FROM to TO using movemail."
--- 556,576 ----
        (funcall callback mail-source-crash-box info)
        (when (file-exists-p mail-source-crash-box)
        ;; Delete or move the incoming mail out of the way.
!       (if (eq mail-source-delete-incoming t)
            (delete-file mail-source-crash-box)
          (let ((incoming
!                (mm-make-temp-file
                  (expand-file-name
                   mail-source-incoming-file-prefix
                   mail-source-directory))))
            (unless (file-exists-p (file-name-directory incoming))
              (make-directory (file-name-directory incoming) t))
!           (rename-file mail-source-crash-box incoming t)
!           ;; remove old incoming files?
!           (when (natnump mail-source-delete-incoming)
!             (mail-source-delete-old-incoming
!              mail-source-delete-incoming
!              mail-source-delete-old-incoming-confirm))))))))
  
  (defun mail-source-movemail (from to)
    "Move FROM to TO using movemail."
***************
*** 518,529 ****
                       'call-process
                       (append
                        (list
!                        (expand-file-name "movemail" exec-directory)
                         nil errors nil from to)))))
              (when (file-exists-p to)
                (set-file-modes to mail-source-default-file-modes))
!             (if (and (not (buffer-modified-p errors))
!                      (zerop result))
                  ;; No output => movemail won.
                  t
                (set-buffer errors)
--- 605,619 ----
                       'call-process
                       (append
                        (list
!                        (or mail-source-movemail-program
!                            (expand-file-name "movemail" exec-directory))
                         nil errors nil from to)))))
              (when (file-exists-p to)
                (set-file-modes to mail-source-default-file-modes))
!             (if (and (or (not (buffer-modified-p errors))
!                          (zerop (buffer-size errors)))
!                      (and (numberp result)
!                           (zerop result)))
                  ;; No output => movemail won.
                  t
                (set-buffer errors)
***************
*** 540,547 ****
                  (goto-char (point-min))
                  (when (looking-at "movemail: ")
                    (delete-region (point-min) (match-end 0)))
                  (unless (yes-or-no-p
!                          (format "movemail: %s (%d return).  Continue? "
                                   (buffer-string) result))
                    (error "%s" (buffer-string)))
                  (setq to nil)))))))
--- 630,638 ----
                  (goto-char (point-min))
                  (when (looking-at "movemail: ")
                    (delete-region (point-min) (match-end 0)))
+                 ;; Result may be a signal description string.
                  (unless (yes-or-no-p
!                          (format "movemail: %s (%s return).  Continue? "
                                   (buffer-string) result))
                    (error "%s" (buffer-string)))
                  (setq to nil)))))))
***************
*** 557,585 ****
        (not (zerop (nth 7 (file-attributes from))))
        (delete-file from)))
  
- (defvar mail-source-read-passwd nil)
- (defun mail-source-read-passwd (prompt &rest args)
-   "Read a password using PROMPT.
- If ARGS, PROMPT is used as an argument to `format'."
-   (let ((prompt
-        (if args
-            (apply 'format prompt args)
-          prompt)))
-     (unless mail-source-read-passwd
-       (if (or (fboundp 'read-passwd) (load "passwd" t))
-         (setq mail-source-read-passwd 'read-passwd)
-       (unless (fboundp 'ange-ftp-read-passwd)
-         (autoload 'ange-ftp-read-passwd "ange-ftp"))
-       (setq mail-source-read-passwd 'ange-ftp-read-passwd)))
-     (funcall mail-source-read-passwd prompt)))
- 
  (defun mail-source-fetch-with-program (program)
!   (zerop (call-process shell-file-name nil nil nil
!                      shell-command-switch program)))
  
  (defun mail-source-run-script (script spec &optional delay)
    (when script
!     (if (and (symbolp script) (fboundp script))
        (funcall script)
        (mail-source-call-script
         (format-spec script spec))))
--- 648,660 ----
        (not (zerop (nth 7 (file-attributes from))))
        (delete-file from)))
  
  (defun mail-source-fetch-with-program (program)
!   (eq 0 (call-process shell-file-name nil nil nil
!                     shell-command-switch program)))
  
  (defun mail-source-run-script (script spec &optional delay)
    (when script
!     (if (functionp script)
        (funcall script)
        (mail-source-call-script
         (format-spec script spec))))
***************
*** 616,623 ****
    "Fetcher for directory sources."
    (mail-source-bind (directory source)
      (mail-source-run-script
!      prescript (format-spec-make ?t path)
!      prescript-delay)
      (let ((found 0)
          (mail-source-string (format "directory:%s" path)))
        (dolist (file (directory-files
--- 691,697 ----
    "Fetcher for directory sources."
    (mail-source-bind (directory source)
      (mail-source-run-script
!      prescript (format-spec-make ?t path) prescript-delay)
      (let ((found 0)
          (mail-source-string (format "directory:%s" path)))
        (dolist (file (directory-files
***************
*** 626,633 ****
                   (funcall predicate file)
                   (mail-source-movemail file mail-source-crash-box))
          (incf found (mail-source-callback callback file))))
!       (mail-source-run-script
!        postscript (format-spec-make ?t path))
        found)))
  
  (defun mail-source-fetch-pop (source callback)
--- 700,706 ----
                   (funcall predicate file)
                   (mail-source-movemail file mail-source-crash-box))
          (incf found (mail-source-callback callback file))))
!       (mail-source-run-script postscript (format-spec-make ?t path))
        found)))
  
  (defun mail-source-fetch-pop (source callback)
***************
*** 645,651 ****
        (setq password
              (or password
                  (cdr (assoc from mail-source-password-cache))
!                 (mail-source-read-passwd
                   (format "Password for %s at %s: " user server)))))
        (when server
        (setenv "MAILHOST" server))
--- 718,724 ----
        (setq password
              (or password
                  (cdr (assoc from mail-source-password-cache))
!                 (read-passwd
                   (format "Password for %s at %s: " user server)))))
        (when server
        (setenv "MAILHOST" server))
***************
*** 667,673 ****
                    (pop3-port port)
                    (pop3-authentication-scheme
                     (if (eq authentication 'apop) 'apop 'pass)))
!               (save-excursion (pop3-movemail mail-source-crash-box))))))
        (if result
          (progn
            (when (eq authentication 'password)
--- 740,756 ----
                    (pop3-port port)
                    (pop3-authentication-scheme
                     (if (eq authentication 'apop) 'apop 'pass)))
!               (if (or debug-on-quit debug-on-error)
!                   (save-excursion (pop3-movemail mail-source-crash-box))
!                 (condition-case err
!                     (save-excursion (pop3-movemail mail-source-crash-box))
!                   (error
!                    ;; We nix out the password in case the error
!                    ;; was because of a wrong password being given.
!                    (setq mail-source-password-cache
!                          (delq (assoc from mail-source-password-cache)
!                                mail-source-password-cache))
!                    (signal (car err) (cdr err)))))))))
        (if result
          (progn
            (when (eq authentication 'password)
***************
*** 699,705 ****
        (setq password
              (or password
                  (cdr (assoc from mail-source-password-cache))
!                 (mail-source-read-passwd
                   (format "Password for %s at %s: " user server))))
        (unless (assoc from mail-source-password-cache)
          (push (cons from password) mail-source-password-cache)))
--- 782,788 ----
        (setq password
              (or password
                  (cdr (assoc from mail-source-password-cache))
!                 (read-passwd
                   (format "Password for %s at %s: " user server))))
        (unless (assoc from mail-source-password-cache)
          (push (cons from password) mail-source-password-cache)))
***************
*** 718,724 ****
                    (pop3-port port)
                    (pop3-authentication-scheme
                     (if (eq authentication 'apop) 'apop 'pass)))
!               (save-excursion (pop3-get-message-count))))))
        (if result
          ;; Inform display-time that we have new mail.
          (setq mail-source-new-mail-available (> result 0))
--- 801,817 ----
                    (pop3-port port)
                    (pop3-authentication-scheme
                     (if (eq authentication 'apop) 'apop 'pass)))
!               (if (or debug-on-quit debug-on-error)
!                   (save-excursion (pop3-get-message-count))
!                 (condition-case err
!                     (save-excursion (pop3-get-message-count))
!                   (error
!                    ;; We nix out the password in case the error
!                    ;; was because of a wrong password being given.
!                    (setq mail-source-password-cache
!                          (delq (assoc from mail-source-password-cache)
!                                mail-source-password-cache))
!                    (signal (car err) (cdr err)))))))))
        (if result
          ;; Inform display-time that we have new mail.
          (setq mail-source-new-mail-available (> result 0))
***************
*** 729,736 ****
--- 822,852 ----
                    mail-source-password-cache)))
        result)))
  
+ (defun mail-source-touch-pop ()
+   "Open and close a POP connection shortly.
+ POP server should be defined in `mail-source-primary-source' (which is
+ preferred) or `mail-sources'.  You may use it for the POP-before-SMTP
+ authentication.  To do that, you need to set the
+ `message-send-mail-function' variable as `message-smtpmail-send-it'
+ and put the following line in your ~/.gnus.el file:
+ 
+ \(add-hook 'message-send-mail-hook 'mail-source-touch-pop)
+ 
+ See the Gnus manual for details."
+   (let ((sources (if mail-source-primary-source
+                    (list mail-source-primary-source)
+                  mail-sources)))
+     (while sources
+       (if (eq 'pop (car (car sources)))
+         (mail-source-check-pop (car sources)))
+       (setq sources (cdr sources)))))
+ 
  (defun mail-source-new-mail-p ()
    "Handler for `display-time' to indicate when new mail is available."
+   ;; Flash (ie. ring the visible bell) if mail is available.
+   (if (and mail-source-flash mail-source-new-mail-available)
+       (let ((visible-bell t))
+       (ding)))
    ;; Only report flag setting; flag is updated on a different schedule.
    mail-source-new-mail-available)
  
***************
*** 753,760 ****
           mail-source-idle-time-delay
           nil
           (lambda ()
!            (setq mail-source-report-new-mail-idle-timer nil)
!            (mail-source-check-pop mail-source-primary-source))))
      ;; Since idle timers created when Emacs is already in the idle
      ;; state don't get activated until Emacs _next_ becomes idle, we
      ;; need to force our timer to be considered active now.  We do
--- 869,877 ----
           mail-source-idle-time-delay
           nil
           (lambda ()
!            (unwind-protect
!                (mail-source-check-pop mail-source-primary-source)
!              (setq mail-source-report-new-mail-idle-timer nil)))))
      ;; Since idle timers created when Emacs is already in the idle
      ;; state don't get activated until Emacs _next_ becomes idle, we
      ;; need to force our timer to be considered active now.  We do
***************
*** 785,792 ****
          (setq display-time-mail-function #'mail-source-new-mail-p)
          ;; Set up the main timer.
          (setq mail-source-report-new-mail-timer
!               (run-at-time t (* 60 mail-source-report-new-mail-interval)
!                            #'mail-source-start-idle-timer))
          ;; When you get new mail, clear "Mail" from the mode line.
          (add-hook 'nnmail-post-get-new-mail-hook
                    'display-time-event-handler)
--- 902,911 ----
          (setq display-time-mail-function #'mail-source-new-mail-p)
          ;; Set up the main timer.
          (setq mail-source-report-new-mail-timer
!               (nnheader-run-at-time
!                (* 60 mail-source-report-new-mail-interval)
!                (* 60 mail-source-report-new-mail-interval)
!                #'mail-source-start-idle-timer))
          ;; When you get new mail, clear "Mail" from the mode line.
          (add-hook 'nnmail-post-get-new-mail-hook
                    'display-time-event-handler)
***************
*** 817,829 ****
                                (with-temp-file mail-source-crash-box
                                  (insert-file-contents file)
                                  (goto-char (point-min))
! ;;;                               ;; Unix mail format
! ;;;                             (unless (looking-at "\n*From ")
! ;;;                               (insert "From maildir "
! ;;;                                       (current-time-string) "\n"))
! ;;;                             (while (re-search-forward "^From " nil t)
! ;;;                               (replace-match ">From "))
! ;;;                               (goto-char (point-max))
  ;;;                             (insert "\n\n")
                                  ;; MMDF mail format
                                  (insert "\001\001\001\001\n"))
--- 936,948 ----
                                (with-temp-file mail-source-crash-box
                                  (insert-file-contents file)
                                  (goto-char (point-min))
! ;;;                             ;; Unix mail format
! ;;;                             (unless (looking-at "\n*From ")
! ;;;                               (insert "From maildir "
! ;;;                                       (current-time-string) "\n"))
! ;;;                             (while (re-search-forward "^From " nil t)
! ;;;                               (replace-match ">From "))
! ;;;                             (goto-char (point-max))
  ;;;                             (insert "\n\n")
                                  ;; MMDF mail format
                                  (insert "\001\001\001\001\n"))
***************
*** 852,861 ****
  (defun mail-source-fetch-imap (source callback)
    "Fetcher for imap sources."
    (mail-source-bind (imap source)
      (let ((from (format "%s:%s:%s" server user port))
          (found 0)
!         (buf (get-buffer-create (generate-new-buffer-name " *imap source*")))
          (mail-source-string (format "imap:%s:%s" server mailbox))
          remove)
        (if (and (imap-open server port stream authentication buf)
               (imap-authenticate
--- 971,985 ----
  (defun mail-source-fetch-imap (source callback)
    "Fetcher for imap sources."
    (mail-source-bind (imap source)
+     (mail-source-run-script
+      prescript (format-spec-make ?p password ?t mail-source-crash-box
+                                ?s server ?P port ?u user)
+      prescript-delay)
      (let ((from (format "%s:%s:%s" server user port))
          (found 0)
!         (buf (generate-new-buffer " *imap source*"))
          (mail-source-string (format "imap:%s:%s" server mailbox))
+         (imap-shell-program (or (list program) imap-shell-program))
          remove)
        (if (and (imap-open server port stream authentication buf)
               (imap-authenticate
***************
*** 870,881 ****
              (mm-disable-multibyte)
              ;; remember password
              (with-current-buffer buf
!               (when (or imap-password
!                         (assoc from mail-source-password-cache))
                  (push (cons from imap-password) mail-source-password-cache)))
              ;; if predicate is nil, use all uids
              (dolist (uid (imap-search (or predicate "1:*") buf))
!               (when (setq str (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf))
                  (push uid remove)
                  (insert "From imap " (current-time-string) "\n")
                  (save-excursion
--- 994,1009 ----
              (mm-disable-multibyte)
              ;; remember password
              (with-current-buffer buf
!               (when (and imap-password
!                          (not (assoc from mail-source-password-cache)))
                  (push (cons from imap-password) mail-source-password-cache)))
              ;; if predicate is nil, use all uids
              (dolist (uid (imap-search (or predicate "1:*") buf))
!               (when (setq str
!                           (if (imap-capability 'IMAP4rev1 buf)
!                               (caddar (imap-fetch uid "BODY.PEEK[]"
!                                                   'BODYDETAIL nil buf))
!                             (imap-fetch uid "RFC822.PEEK" 'RFC822 nil buf)))
                  (push uid remove)
                  (insert "From imap " (current-time-string) "\n")
                  (save-excursion
***************
*** 886,897 ****
              (nnheader-ms-strip-cr))
            (incf found (mail-source-callback callback server))
            (when (and remove fetchflag)
              (imap-message-flags-add
               (imap-range-to-message-set (gnus-compress-sequence remove))
               fetchflag nil buf))
            (if dontexpunge
                (imap-mailbox-unselect buf)
!             (imap-mailbox-close buf))
            (imap-close buf))
        (imap-close buf)
        ;; We nix out the password in case the error
--- 1014,1026 ----
              (nnheader-ms-strip-cr))
            (incf found (mail-source-callback callback server))
            (when (and remove fetchflag)
+             (setq remove (nreverse remove))
              (imap-message-flags-add
               (imap-range-to-message-set (gnus-compress-sequence remove))
               fetchflag nil buf))
            (if dontexpunge
                (imap-mailbox-unselect buf)
!             (imap-mailbox-close nil buf))
            (imap-close buf))
        (imap-close buf)
        ;; We nix out the password in case the error
***************
*** 899,906 ****
        (setq mail-source-password-cache
              (delq (assoc from mail-source-password-cache)
                    mail-source-password-cache))
!       (error (imap-error-text buf)))
        (kill-buffer buf)
        found)))
  
  (eval-and-compile
--- 1028,1039 ----
        (setq mail-source-password-cache
              (delq (assoc from mail-source-password-cache)
                    mail-source-password-cache))
!       (error "IMAP error: %s" (imap-error-text buf)))
        (kill-buffer buf)
+       (mail-source-run-script
+        postscript
+        (format-spec-make ?p password ?t mail-source-crash-box
+                        ?s server ?P port ?u user))
        found)))
  
  (eval-and-compile
***************
*** 917,923 ****
              (or password
                  (cdr (assoc (format "webmail:%s:%s" subtype user)
                              mail-source-password-cache))
!                 (mail-source-read-passwd
                   (format "Password for %s at %s: " user subtype))))
        (when (and password
                   (not (assoc (format "webmail:%s:%s" subtype user)
--- 1050,1056 ----
              (or password
                  (cdr (assoc (format "webmail:%s:%s" subtype user)
                              mail-source-password-cache))
!                 (read-passwd
                   (format "Password for %s at %s: " user subtype))))
        (when (and password
                   (not (assoc (format "webmail:%s:%s" subtype user)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]