view lisp/gnus/nnagent.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 1077b8039c32 2d92f5c9d6ae
line wrap: on
line source

;;; nnagent.el --- offline backend for Gnus

;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
;;   2005 Free Software Foundation, Inc.

;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news, mail

;; 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:

;;; Code:

(require 'nnheader)
(require 'nnoo)
(eval-when-compile (require 'cl))
(require 'gnus-agent)
(require 'nnml)

(nnoo-declare nnagent
  nnml)



(defconst nnagent-version "nnagent 1.0")

(defvoo nnagent-directory nil
  "Internal variable."
  nnml-directory)

(defvoo nnagent-active-file nil
  "Internal variable."
  nnml-active-file)

(defvoo nnagent-newsgroups-file nil
  "Internal variable."
  nnml-newsgroups-file)

(defvoo nnagent-get-new-mail nil
  "Internal variable."
  nnml-get-new-mail)

;;; Interface functions.

(nnoo-define-basics nnagent)

(defun nnagent-server (server)
  (and server (format "%s+%s" (car gnus-command-method) server)))

(deffoo nnagent-open-server (server &optional defs)
  (setq defs
	`((nnagent-directory ,(gnus-agent-directory))
	  (nnagent-active-file ,(gnus-agent-lib-file "active"))
	  (nnagent-newsgroups-file ,(gnus-agent-lib-file "newsgroups"))
	  (nnagent-get-new-mail nil)))
  (nnoo-change-server 'nnagent
		      (nnagent-server server)
		      defs)
  (let ((dir (gnus-agent-directory))
	err)
    (cond
     ((not (condition-case arg
	       (file-exists-p dir)
	     (ftp-error (setq err (format "%s" arg)))))
      (nnagent-close-server)
      (nnheader-report
       'nnagent (or err
		    (format "No such file or directory: %s" dir))))
     ((not (file-directory-p (file-truename dir)))
      (nnagent-close-server)
      (nnheader-report 'nnagent "Not a directory: %s" dir))
     (t
      (nnheader-report 'nnagent "Opened server %s using directory %s"
		       server dir)
      t))))

(deffoo nnagent-retrieve-groups (groups &optional server)
  (save-excursion
    (cond
     ((file-exists-p (gnus-agent-lib-file "groups"))
      (nnmail-find-file (gnus-agent-lib-file "groups"))
      'groups)
     ((file-exists-p (gnus-agent-lib-file "active"))
      (nnmail-find-file (gnus-agent-lib-file "active"))
      'active)
     (t nil))))

(defun nnagent-request-type (group article)
  (unless (stringp article)
    (let ((gnus-agent nil))
      (if (not (gnus-check-backend-function
		'request-type (car gnus-command-method)))
	  'unknown
	(funcall (gnus-get-function gnus-command-method 'request-type)
		 (gnus-group-real-name group) article)))))

(deffoo nnagent-request-newgroups (date server)
  nil)

(deffoo nnagent-request-update-info (group info &optional server)
  nil)

(deffoo nnagent-request-post (&optional server)
  (gnus-agent-insert-meta-information 'news gnus-command-method)
  (gnus-request-accept-article "nndraft:queue" nil t t))

(deffoo nnagent-request-set-mark (group action server)
  (with-temp-buffer
    (insert "(gnus-agent-synchronize-group-flags \""
	    group 
	    "\" '")
    (gnus-pp action)
    (insert " \""
	    (gnus-method-to-server gnus-command-method)
	    "\"")
    (insert ")\n")
    (append-to-file (point-min) (point-max) (gnus-agent-lib-file "flags")))
  nil)

(deffoo nnagent-retrieve-headers (articles &optional group server fetch-old)
  (let ((file (gnus-agent-article-name ".overview" group))
	arts n first)
    (save-excursion
      (gnus-agent-load-alist group)
      (setq arts (gnus-sorted-difference
		  articles (mapcar 'car gnus-agent-article-alist)))
      ;; Assume that articles with smaller numbers than the first one
      ;; Agent knows are gone.
      (setq first (caar gnus-agent-article-alist))
      (when first 
	(while (and arts (< (car arts) first))
	  (pop arts)))
      (set-buffer nntp-server-buffer)
      (erase-buffer)
      (nnheader-insert-nov-file file (car articles))
      (goto-char (point-min))
      (gnus-parse-without-error
	(while (and arts (not (eobp)))
	  (setq n (read (current-buffer)))
	  (when (> n (car arts))
	    (beginning-of-line))
	  (while (and arts (> n (car arts)))
	    (insert (format
		     "%d\t[Undownloaded article %d]\tGnus Agent\t\t\t\n"
		     (car arts) (car arts)))
	    (pop arts))
	  (when (and arts (= n (car arts)))
	    (pop arts))
	  (forward-line 1)))
      (while arts
	(insert (format
		 "%d\t[Undownloaded article %d]\tGnus Agent\t\t\t\n"
		 (car arts) (car arts)))
	(pop arts))
      (if (and fetch-old
	       (not (numberp fetch-old)))
	  t				; Don't remove anything.
	(nnheader-nov-delete-outside-range
	 (if fetch-old (max 1 (- (car articles) fetch-old))
	   (car articles))
	 (car (last articles)))
	t)
      'nov)))

(deffoo nnagent-request-expire-articles (articles group &optional server force)
  articles)

(deffoo nnagent-request-group (group &optional server dont-check)
  (nnoo-parent-function 'nnagent 'nnml-request-group
			(list group (nnagent-server server) dont-check)))

(deffoo nnagent-close-group (group &optional server)
  (nnoo-parent-function 'nnagent 'nnml-close-group
			(list group (nnagent-server server))))

(deffoo nnagent-request-accept-article (group &optional server last)
  (nnoo-parent-function 'nnagent 'nnml-request-accept-article
			(list group (nnagent-server server) last)))

(deffoo nnagent-request-article (id &optional group server buffer)
  (nnoo-parent-function 'nnagent 'nnml-request-article
			(list id group (nnagent-server server) buffer)))

(deffoo nnagent-request-create-group (group &optional server args)
  (nnoo-parent-function 'nnagent 'nnml-request-create-group
			(list group (nnagent-server server) args)))

(deffoo nnagent-request-delete-group (group &optional force server)
  (nnoo-parent-function 'nnagent 'nnml-request-delete-group
			(list group force (nnagent-server server))))

(deffoo nnagent-request-list (&optional server)
  (nnoo-parent-function 'nnagent 'nnml-request-list
			(list (nnagent-server server))))

(deffoo nnagent-request-list-newsgroups (&optional server)
  (nnoo-parent-function 'nnagent 'nnml-request-list-newsgroups
			(list (nnagent-server server))))

(deffoo nnagent-request-move-article
    (article group server accept-form &optional last)
  (nnoo-parent-function 'nnagent 'nnml-request-move-article
			(list article group (nnagent-server server)
			      accept-form last)))

(deffoo nnagent-request-rename-group (group new-name &optional server)
  (nnoo-parent-function 'nnagent 'nnml-request-rename-group
			(list group new-name (nnagent-server server))))

(deffoo nnagent-request-scan (&optional group server)
  (nnoo-parent-function 'nnagent 'nnml-request-scan
			(list group (nnagent-server server))))

(deffoo nnagent-set-status (article name value &optional group server)
  (nnoo-parent-function 'nnagent 'nnml-set-status
			(list article name value group (nnagent-server server))))

(deffoo nnagent-server-opened (&optional server)
  (nnoo-parent-function 'nnagent 'nnml-server-opened
			(list (nnagent-server server))))

(deffoo nnagent-status-message (&optional server)
  (nnoo-parent-function 'nnagent 'nnml-status-message
			(list (nnagent-server server))))

(deffoo nnagent-request-regenerate (server)
  (nnoo-parent-function 'nnagent 'nnml-request-regenerate
			(list (nnagent-server server))))

;; Use nnml functions for just about everything.
(nnoo-import nnagent
  (nnml))


;;; Internal functions.

(provide 'nnagent)

;;; arch-tag: af710b77-f816-4969-af31-6fd94fb42245
;;; nnagent.el ends here