Commit | Line | Data |
---|---|---|
df80b09f | 1 | ;;; nnagent.el --- offline backend for Gnus |
16409b0b | 2 | ;; Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. |
df80b09f LMI |
3 | |
4 | ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> | |
5 | ;; Keywords: news, mail | |
6 | ||
7 | ;; This file is part of GNU Emacs. | |
8 | ||
9 | ;; GNU Emacs is free software; you can redistribute it and/or modify | |
10 | ;; it under the terms of the GNU General Public License as published by | |
11 | ;; the Free Software Foundation; either version 2, or (at your option) | |
12 | ;; any later version. | |
13 | ||
14 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
15 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | ;; GNU General Public License for more details. | |
18 | ||
19 | ;; You should have received a copy of the GNU General Public License | |
20 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
21 | ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
22 | ;; Boston, MA 02111-1307, USA. | |
23 | ||
24 | ;;; Commentary: | |
25 | ||
26 | ;;; Code: | |
27 | ||
28 | (require 'nnheader) | |
29 | (require 'nnoo) | |
30 | (eval-when-compile (require 'cl)) | |
31 | (require 'gnus-agent) | |
32 | (require 'nnml) | |
33 | ||
34 | (nnoo-declare nnagent | |
35 | nnml) | |
36 | ||
37 | \f | |
38 | ||
39 | (defconst nnagent-version "nnagent 1.0") | |
40 | ||
41 | (defvoo nnagent-directory nil | |
42 | "Internal variable." | |
43 | nnml-directory) | |
44 | ||
45 | (defvoo nnagent-active-file nil | |
46 | "Internal variable." | |
47 | nnml-active-file) | |
48 | ||
49 | (defvoo nnagent-newsgroups-file nil | |
50 | "Internal variable." | |
51 | nnml-newsgroups-file) | |
52 | ||
53 | (defvoo nnagent-get-new-mail nil | |
54 | "Internal variable." | |
55 | nnml-get-new-mail) | |
56 | ||
57 | ;;; Interface functions. | |
58 | ||
59 | (nnoo-define-basics nnagent) | |
60 | ||
16409b0b GM |
61 | (defun nnagent-server (server) |
62 | (and server (format "%s+%s" (car gnus-command-method) server))) | |
63 | ||
df80b09f LMI |
64 | (deffoo nnagent-open-server (server &optional defs) |
65 | (setq defs | |
66 | `((nnagent-directory ,(gnus-agent-directory)) | |
67 | (nnagent-active-file ,(gnus-agent-lib-file "active")) | |
68 | (nnagent-newsgroups-file ,(gnus-agent-lib-file "newsgroups")) | |
69 | (nnagent-get-new-mail nil))) | |
a1506d29 | 70 | (nnoo-change-server 'nnagent |
16409b0b GM |
71 | (nnagent-server server) |
72 | defs) | |
df80b09f LMI |
73 | (let ((dir (gnus-agent-directory)) |
74 | err) | |
75 | (cond | |
76 | ((not (condition-case arg | |
77 | (file-exists-p dir) | |
78 | (ftp-error (setq err (format "%s" arg))))) | |
79 | (nnagent-close-server) | |
80 | (nnheader-report | |
81 | 'nnagent (or err | |
82 | (format "No such file or directory: %s" dir)))) | |
83 | ((not (file-directory-p (file-truename dir))) | |
84 | (nnagent-close-server) | |
85 | (nnheader-report 'nnagent "Not a directory: %s" dir)) | |
86 | (t | |
87 | (nnheader-report 'nnagent "Opened server %s using directory %s" | |
88 | server dir) | |
89 | t)))) | |
90 | ||
91 | (deffoo nnagent-retrieve-groups (groups &optional server) | |
92 | (save-excursion | |
93 | (cond | |
94 | ((file-exists-p (gnus-agent-lib-file "groups")) | |
95 | (nnmail-find-file (gnus-agent-lib-file "groups")) | |
96 | 'groups) | |
97 | ((file-exists-p (gnus-agent-lib-file "active")) | |
98 | (nnmail-find-file (gnus-agent-lib-file "active")) | |
99 | 'active) | |
100 | (t nil)))) | |
101 | ||
102 | (defun nnagent-request-type (group article) | |
103 | (unless (stringp article) | |
104 | (let ((gnus-plugged t)) | |
105 | (if (not (gnus-check-backend-function | |
106 | 'request-type (car gnus-command-method))) | |
107 | 'unknown | |
108 | (funcall (gnus-get-function gnus-command-method 'request-type) | |
109 | (gnus-group-real-name group) article))))) | |
110 | ||
111 | (deffoo nnagent-request-newgroups (date server) | |
112 | nil) | |
113 | ||
114 | (deffoo nnagent-request-update-info (group info &optional server) | |
115 | nil) | |
116 | ||
117 | (deffoo nnagent-request-post (&optional server) | |
118 | (gnus-agent-insert-meta-information 'news gnus-command-method) | |
16409b0b GM |
119 | (gnus-request-accept-article "nndraft:queue" nil t t)) |
120 | ||
121 | (deffoo nnagent-request-set-mark (group action server) | |
122 | (with-temp-buffer | |
123 | (insert (format "(%s-request-set-mark \"%s\" '%s \"%s\")\n" | |
124 | (nth 0 gnus-command-method) group action | |
125 | (or server (nth 1 gnus-command-method)))) | |
126 | (append-to-file (point-min) (point-max) (gnus-agent-lib-file "flags"))) | |
127 | nil) | |
128 | ||
129 | (deffoo nnagent-request-group (group &optional server dont-check) | |
130 | (nnoo-parent-function 'nnagent 'nnml-request-group | |
131 | (list group (nnagent-server server) dont-check))) | |
132 | ||
133 | (deffoo nnagent-close-group (group &optional server) | |
134 | (nnoo-parent-function 'nnagent 'nnml-close-group | |
135 | (list group (nnagent-server server)))) | |
136 | ||
137 | (deffoo nnagent-request-accept-article (group &optional server last) | |
138 | (nnoo-parent-function 'nnagent 'nnml-request-accept-article | |
139 | (list group (nnagent-server server) last))) | |
140 | ||
141 | (deffoo nnagent-request-article (id &optional group server buffer) | |
142 | (nnoo-parent-function 'nnagent 'nnml-request-article | |
143 | (list id group (nnagent-server server) buffer))) | |
144 | ||
145 | (deffoo nnagent-request-create-group (group &optional server args) | |
146 | (nnoo-parent-function 'nnagent 'nnml-request-create-group | |
147 | (list group (nnagent-server server) args))) | |
148 | ||
149 | (deffoo nnagent-request-delete-group (group &optional force server) | |
150 | (nnoo-parent-function 'nnagent 'nnml-request-delete-group | |
151 | (list group force (nnagent-server server)))) | |
152 | ||
153 | (deffoo nnagent-request-expire-articles (articles group &optional server force) | |
154 | (nnoo-parent-function 'nnagent 'nnml-request-expire-articles | |
155 | (list articles group (nnagent-server server) force))) | |
156 | ||
157 | (deffoo nnagent-request-list (&optional server) | |
a1506d29 | 158 | (nnoo-parent-function 'nnagent 'nnml-request-list |
16409b0b GM |
159 | (list (nnagent-server server)))) |
160 | ||
161 | (deffoo nnagent-request-list-newsgroups (&optional server) | |
a1506d29 | 162 | (nnoo-parent-function 'nnagent 'nnml-request-list-newsgroups |
16409b0b GM |
163 | (list (nnagent-server server)))) |
164 | ||
a1506d29 | 165 | (deffoo nnagent-request-move-article |
16409b0b | 166 | (article group server accept-form &optional last) |
a1506d29 JB |
167 | (nnoo-parent-function 'nnagent 'nnml-request-move-article |
168 | (list article group (nnagent-server server) | |
16409b0b GM |
169 | accept-form last))) |
170 | ||
171 | (deffoo nnagent-request-rename-group (group new-name &optional server) | |
a1506d29 | 172 | (nnoo-parent-function 'nnagent 'nnml-request-rename-group |
16409b0b GM |
173 | (list group new-name (nnagent-server server)))) |
174 | ||
175 | (deffoo nnagent-request-scan (&optional group server) | |
a1506d29 | 176 | (nnoo-parent-function 'nnagent 'nnml-request-scan |
16409b0b GM |
177 | (list group (nnagent-server server)))) |
178 | ||
179 | (deffoo nnagent-retrieve-headers (sequence &optional group server fetch-old) | |
a1506d29 | 180 | (nnoo-parent-function 'nnagent 'nnml-retrieve-headers |
16409b0b GM |
181 | (list sequence group (nnagent-server server) fetch-old))) |
182 | ||
183 | (deffoo nnagent-set-status (article name value &optional group server) | |
a1506d29 | 184 | (nnoo-parent-function 'nnagent 'nnml-set-status |
16409b0b GM |
185 | (list article name value group (nnagent-server server)))) |
186 | ||
187 | (deffoo nnagent-server-opened (&optional server) | |
188 | (nnoo-parent-function 'nnagent 'nnml-server-opened | |
189 | (list (nnagent-server server)))) | |
190 | ||
191 | (deffoo nnagent-status-message (&optional server) | |
192 | (nnoo-parent-function 'nnagent 'nnml-status-message | |
193 | (list (nnagent-server server)))) | |
df80b09f LMI |
194 | |
195 | ;; Use nnml functions for just about everything. | |
196 | (nnoo-import nnagent | |
197 | (nnml)) | |
198 | ||
199 | \f | |
200 | ;;; Internal functions. | |
201 | ||
202 | (provide 'nnagent) | |
203 | ||
ab5796a9 | 204 | ;;; arch-tag: af710b77-f816-4969-af31-6fd94fb42245 |
df80b09f | 205 | ;;; nnagent.el ends here |