* gnus.el (gnus-summary-line-format): Link to the info node for %U
[gnus] / lisp / nnagent.el
1 ;;; nnagent.el --- offline backend for Gnus
2
3 ;; Copyright (C) 1997-2011 Free Software Foundation, Inc.
4
5 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
6 ;; Keywords: news, mail
7
8 ;; This file is part of GNU Emacs.
9
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation, either version 3 of the License, or
13 ;; (at your option) any later version.
14
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
22
23 ;;; Commentary:
24
25 ;;; Code:
26
27 (require 'nnheader)
28 (require 'nnoo)
29 (eval-when-compile (require 'cl))
30 (require 'gnus-agent)
31 (require 'nnml)
32
33 (nnoo-declare nnagent
34   nnml)
35
36 \f
37
38 (defconst nnagent-version "nnagent 1.0")
39
40 (defvoo nnagent-directory nil
41   "Internal variable."
42   nnml-directory)
43
44 (defvoo nnagent-active-file nil
45   "Internal variable."
46   nnml-active-file)
47
48 (defvoo nnagent-newsgroups-file nil
49   "Internal variable."
50   nnml-newsgroups-file)
51
52 (defvoo nnagent-get-new-mail nil
53   "Internal variable."
54   nnml-get-new-mail)
55
56 ;;; Interface functions.
57
58 (nnoo-define-basics nnagent)
59
60 (defun nnagent-server (server)
61   (and server (format "%s+%s" (car gnus-command-method) server)))
62
63 (deffoo nnagent-open-server (server &optional defs)
64   (setq defs
65         `((nnagent-directory ,(gnus-agent-directory))
66           (nnagent-active-file ,(gnus-agent-lib-file "active"))
67           (nnagent-newsgroups-file ,(gnus-agent-lib-file "newsgroups"))
68           (nnagent-get-new-mail nil)))
69   (nnoo-change-server 'nnagent
70                       (nnagent-server server)
71                       defs)
72   (let ((dir (gnus-agent-directory))
73         err)
74     (cond
75      ((not (condition-case arg
76                (file-exists-p dir)
77              (ftp-error (setq err (format "%s" arg)))))
78       (nnagent-close-server)
79       (nnheader-report
80        'nnagent (or err
81                     (format "No such file or directory: %s" dir))))
82      ((not (file-directory-p (file-truename dir)))
83       (nnagent-close-server)
84       (nnheader-report 'nnagent "Not a directory: %s" dir))
85      (t
86       (nnheader-report 'nnagent "Opened server %s using directory %s"
87                        server dir)
88       t))))
89
90 (deffoo nnagent-retrieve-groups (groups &optional server)
91   (save-excursion
92     (cond
93      ((file-exists-p (gnus-agent-lib-file "groups"))