Mercurial > emacs
view lisp/gnus/gnus-delay.el @ 65342:c71b1b2d2d04
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-530
Merge from gnus--rel--5.10
Patches applied:
* gnus--rel--5.10 (patch 106-111)
- Merge from emacs--cvs-trunk--0
- Update from CVS
2005-09-05 Reiner Steib <Reiner.Steib@gmx.de>
* lisp/gnus/message.el (message-tab-body-function): Fixed mismatched custom
type.
* lisp/gnus/gnus.el (gnus-group-change-level-function): Ditto.
* lisp/gnus/gnus-msg.el (gnus-outgoing-message-group): Ditto.
* lisp/gnus/gnus-art.el (gnus-signature-limit)
(gnus-article-mime-part-function): Ditto.
2005-09-04 Reiner Steib <Reiner.Steib@gmx.de>
* lisp/gnus/nnweb.el (nnweb-type-definition, nnweb-google-wash-article):
Make fetching article by MID work again for Google Groups. Added
FIXME concerning gnus-group-make-web-group.
* lisp/gnus/mml-smime.el (mml-smime-sign-query, mml-smime-get-dns-cert):
Don't depend on Gnus by using mail-extract-address-components if
gnus-extract-address-components is not bound.
* lisp/gnus/gnus.el (gnus-user-agent): Use list of symbols instead of
symbols. Display full version number for (S)XEmacs. Optionally
display (S)XEmacs codename.
* lisp/gnus/gnus-util.el (gnus-emacs-version): Update for new
`gnus-user-agent'.
* lisp/gnus/gnus-msg.el (gnus-extended-version): Make it possible to omit
Gnus version.
2005-09-02 Hrvoje Niksic <hniksic@xemacs.org>
* lisp/gnus/mm-encode.el (mm-encode-content-transfer-encoding): Likewise
when encoding.
* lisp/gnus/mm-bodies.el (mm-decode-content-transfer-encoding):
De-canonicalize CRLF for all text content types, not just
text/plain.
2005-09-02 Katsumi Yamaoka <yamaoka@jpl.org>
* lisp/gnus/gnus-sum.el (gnus-thread-hide-subtree): Doc fix.
* lisp/gnus/gnus-msg.el (gnus-inews-insert-gcc): Fix the mistake of using
list, not listp.
2005-08-29 Romain Francoise <romain@orebokech.com>
* lisp/gnus/gnus-fun.el (gnus-convert-image-to-face-command): Fix typo in
docstring.
(gnus-face-from-file): Likewise.
2005-08-31 Juanma Barranquero <lekktu@gmail.com>
* lisp/gnus/gnus-art.el (w3m-minor-mode-map):
* lisp/gnus/gnus-spec.el (gnus-newsrc-file-version):
* lisp/gnus/gnus-util.el (nnmail-active-file-coding-system)
(gnus-original-article-buffer, gnus-user-agent):
* lisp/gnus/gnus.el (gnus-ham-process-destinations)
(gnus-parameter-ham-marks-alist)
(gnus-parameter-spam-marks-alist, gnus-spam-autodetect)
(gnus-spam-autodetect-methods, gnus-spam-newsgroup-contents)
(gnus-spam-process-destinations, gnus-spam-process-newsgroups):
* lisp/gnus/mm-decode.el (gnus-current-window-configuration):
* lisp/gnus/mm-extern.el (gnus-article-mime-handles):
* lisp/gnus/mm-url.el (url-current-object, url-package-name)
(url-package-version):
* lisp/gnus/mm-view.el (gnus-article-mime-handles, gnus-newsgroup-charset)
(smime-keys, w3m-cid-retrieve-function-alist)
(w3m-current-buffer, w3m-display-inline-images)
(w3m-minor-mode-map):
* lisp/gnus/mml-smime.el (gnus-extract-address-components):
* lisp/gnus/mml.el (gnus-article-mime-handles, gnus-mouse-2)
(gnus-newsrc-hashtb, message-default-charset)
(message-deletable-headers, message-options)
(message-posting-charset, message-required-mail-headers)
(message-required-news-headers):
* lisp/gnus/mml1991.el (mc-pgp-always-sign):
* lisp/gnus/mml2015.el (mc-pgp-always-sign):
* lisp/gnus/nnheader.el (nnmail-extra-headers):
* lisp/gnus/rfc1843.el (gnus-decode-encoded-word-function)
(gnus-decode-header-function, gnus-newsgroup-name):
* lisp/gnus/spam-stat.el (gnus-original-article-buffer): Add defvars.
author | Miles Bader <miles@gnu.org> |
---|---|
date | Mon, 05 Sep 2005 23:58:09 +0000 |
parents | fafd692d1e40 |
children | 95525fb6747f |
line wrap: on
line source
;;; gnus-delay.el --- Delayed posting of articles ;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> ;; Keywords: mail, news, extensions ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published ;; by the Free Software Foundation; either version 2, or (at your ;; option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; Provide delayed posting of articles. ;;; Todo: ;; * `gnus-delay-send-queue' barfs when group does not exist. ;; * Integrate gnus-delay.el into the rest of Gnus automatically. How ;; should this be done? Basically, we need to do what ;; `gnus-delay-initialize' does. But in which files? ;;; Code: (require 'nndraft) (require 'gnus-draft) (autoload 'parse-time-string "parse-time" nil nil) ;;;###autoload (defgroup gnus-delay nil "Arrange for sending postings later." :version "22.1" :group 'gnus) (defcustom gnus-delay-group "delayed" "Group name for storing delayed articles." :type 'string :group 'gnus-delay) (defcustom gnus-delay-header "X-Gnus-Delayed" "Header name for storing info about delayed articles." :type 'string :group 'gnus-delay) (defcustom gnus-delay-default-delay "3d" "*Default length of delay." :type 'string :group 'gnus-delay) (defcustom gnus-delay-default-hour 8 "*If deadline is given as date, then assume this time of day." :version "22.1" :type 'integer :group 'gnus-delay) ;;;###autoload (defun gnus-delay-article (delay) "Delay this article by some time. DELAY is a string, giving the length of the time. Possible values are: * <digits><units> for <units> in minutes (`m'), hours (`h'), days (`d'), weeks (`w'), months (`M'), or years (`Y'); * YYYY-MM-DD for a specific date. The time of day is given by the variable `gnus-delay-default-hour', minute and second are zero. * hh:mm for a specific time. Use 24h format. If it is later than this time, then the deadline is tomorrow, else today." (interactive (list (read-string "Target date (YYYY-MM-DD) or length of delay (units in [mhdwMY]): " gnus-delay-default-delay))) (let (num unit days year month day hour minute deadline) (cond ((string-match "\\([0-9][0-9][0-9]?[0-9]?\\)-\\([0-9]+\\)-\\([0-9]+\\)" delay) (setq year (string-to-number (match-string 1 delay)) month (string-to-number (match-string 2 delay)) day (string-to-number (match-string 3 delay))) (setq deadline (message-make-date (encode-time 0 0 ; second and minute gnus-delay-default-hour day month year)))) ((string-match "\\([0-9]+\\):\\([0-9]+\\)" delay) (setq hour (string-to-number (match-string 1 delay)) minute (string-to-number (match-string 2 delay))) ;; Use current time, except... (setq deadline (apply 'vector (decode-time (current-time)))) ;; ... for minute and hour. (aset deadline 1 minute) (aset deadline 2 hour) ;; Convert to seconds. (setq deadline (time-to-seconds (apply 'encode-time (append deadline nil)))) ;; If this time has passed already, add a day. (when (< deadline (time-to-seconds (current-time))) (setq deadline (+ 3600 deadline))) ;3600 secs/day ;; Convert seconds to date header. (setq deadline (message-make-date (seconds-to-time deadline)))) ((string-match "\\([0-9]+\\)\\s-*\\([mhdwMY]\\)" delay) (setq num (match-string 1 delay)) (setq unit (match-string 2 delay)) ;; Start from seconds, then multiply into needed units. (setq num (string-to-number num)) (cond ((string= unit "Y") (setq delay (* num 60 60 24 365))) ((string= unit "M") (setq delay (* num 60 60 24 30))) ((string= unit "w") (setq delay (* num 60 60 24 7))) ((string= unit "d") (setq delay (* num 60 60 24))) ((string= unit "h") (setq delay (* num 60 60))) (t (setq delay (* num 60)))) (setq deadline (message-make-date (seconds-to-time (+ (time-to-seconds (current-time)) delay))))) (t (error "Malformed delay `%s'" delay))) (message-add-header (format "%s: %s" gnus-delay-header deadline))) (set-buffer-modified-p t) ;; If group does not exist, create it. (let ((group (format "nndraft:%s" gnus-delay-group))) (gnus-agent-queue-setup gnus-delay-group)) (message-disassociate-draft) (nndraft-request-associate-buffer gnus-delay-group) (save-buffer 0) (kill-buffer (current-buffer)) (message-do-actions message-postpone-actions)) ;;;###autoload (defun gnus-delay-send-queue () "Send all the delayed messages that are due now." (interactive) (save-excursion (let* ((group (format "nndraft:%s" gnus-delay-group)) (message-send-hook (copy-sequence message-send-hook)) articles article deadline) (when (gnus-gethash group gnus-newsrc-hashtb) (gnus-activate-group group) (add-hook 'message-send-hook '(lambda () (message-remove-header gnus-delay-header))) (setq articles (nndraft-articles)) (while (setq article (pop articles)) (gnus-request-head article group) (set-buffer nntp-server-buffer) (goto-char (point-min)) (if (re-search-forward (concat "^" (regexp-quote gnus-delay-header) ":\\s-+") nil t) (progn (setq deadline (nnheader-header-value)) (setq deadline (apply 'encode-time (parse-time-string deadline))) (setq deadline (time-since deadline)) (when (and (>= (nth 0 deadline) 0) (>= (nth 1 deadline) 0)) (message "Sending delayed article %d" article) (gnus-draft-send article group) (message "Sending delayed article %d...done" article))) (message "Delay header missing for article %d" article))))))) ;;;###autoload (defun gnus-delay-initialize (&optional no-keymap no-check) "Initialize the gnus-delay package. This sets up a key binding in `message-mode' to delay a message. This tells Gnus to look for delayed messages after getting new news. The optional arg NO-KEYMAP is ignored. Checking delayed messages is skipped if optional arg NO-CHECK is non-nil." (unless no-check (add-hook 'gnus-get-new-news-hook 'gnus-delay-send-queue))) (provide 'gnus-delay) ;; Local Variables: ;; coding: iso-8859-1 ;; End: ;;; arch-tag: fb2ad634-a897-4142-a503-f5991ec2349d ;;; gnus-delay.el ends here