lisp/gnus-offline.el,lisp/gnus-ofsetup.el: Bug fix .. Beta4 release.
[elisp/gnus.git-] / lisp / gnus-ofsetup.el
1 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
2 ;;;
3 ;;; $Id: gnus-ofsetup.el,v 1.1.2.4 1998-11-12 14:04:09 ichikawa Exp $
4 ;;;
5 ;;; Copyright (C) 1998 Tatsuya Ichikawa
6 ;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
7 ;;;
8 ;;; This file is part of Semi-gnus.
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 2, or (at your option)
13 ;;; 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; see the file COPYING.  If not, write to the
22 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;;; Boston, MA 02111-1307, USA.
24 ;;;
25 ;;;; Commentary:
26 ;;; How to use.
27 ;;;
28 ;;;      M-x load[RET]gnus-ofsetup
29 ;;;      M-x gnus-setup-for-offline
30 ;;;
31
32 ;;; Code:
33
34 (defvar gnus-offline-setting-file "~/.gnus-offline.el")
35 (defvar gnus-offline-use-miee nil)
36 (defvar gnus-offline-news-fetch-method nil)
37 (defvar gnus-offline-mail-fetch-method nil)
38 (defvar gnus-offline-hangup-program nil)
39 (defvar gnus-offline-dialup-program nil)
40 (defvar pop3-fma-spool-file-alist nil)
41 (defvar pop3-fma-movemail-type nil)
42 (defvar pop3-fma-movemail-arguments nil)
43 (defvar address)
44 (defvar options)
45
46 ;;; To silence byte compiler
47 (and
48  (fboundp 'eval-when-compile)
49  (eval-when-compile
50    (save-excursion
51      (beginning-of-defun)
52      (eval-region (point-min) (point)))
53    (let (case-fold-search)
54      (mapcar
55       (function
56        (lambda (symbol)
57          (unless (boundp symbol)
58            (make-local-variable symbol)
59            (eval (list 'setq symbol nil)))))
60       '(:group
61         :prefix :type
62         sendmail-to-spool-directory
63         news-spool-request-post-directory
64         nnspool-version
65         nnagent-version
66         msspool-news-server
67         msspool-news-service
68         gnspool-get-news
69         mail-spool-send
70         news-spool-post
71         gnus-agent-handle-level
72         ))
73      (make-local-variable 'byte-compile-warnings)
74      (setq byte-compile-warnings nil))))
75
76 (defun gnus-setup-for-offline ()
77   "*Set up Gnus for offline environment."
78   (interactive)
79   
80   (if (not (file-exists-p gnus-offline-setting-file))
81       (progn
82         (let ((news-method
83                (completing-read
84                 "Method for offline News reading (TAB to completion): "
85                 '(("gnus-agent" 1) ("nnspool" 2))
86                 nil t nil))
87               (mail-method 'nnmail)
88               (use-miee
89                (y-or-n-p "Use MIEE post/send message "))
90               (program
91                (read-file-name "Dialup/Hangup program(type nil you do not use): "))
92               (mta-type
93                (completing-read
94                 "Select MTA type for sending mail (TAB to completion): "
95                 '(("smtp" 1) ("sendmail" 2))
96                 nil t nil))
97               (num-of-address
98                (read-from-minibuffer "How many e-mail address do you have: "))
99               )
100           ;;
101           ;; Set variables.
102           (if (string-equal news-method "gnus-agent")
103               (setq gnus-offline-news-fetch-method 'nnagent)
104             (setq gnus-offline-news-fetch-method 'nnspool))
105           ;;
106           (setq gnus-offline-mail-fetch-method mail-method)
107           (setq gnus-offline-use-miee use-miee)
108           
109           ;; Set programs.
110           (if (string-equal program "nil")
111               (progn
112                 (setq gnus-offline-hangup-program nil)
113                 (setq gnus-offline-dialup-program nil))
114             (let ((options
115                    (read-from-minibuffer "Dialup program options: ")))
116               (setq gnus-offline-dialup-program-arguments
117                     (split-string options "[\t ]+")))
118             (let ((options
119                    (read-from-minibuffer "Hangup program options: ")))
120               (setq gnus-offline-hangup-program-arguments
121                     (split-string options "[\t ]+")))
122             (setq gnus-offline-hangup-program program)
123             (setq gnus-offline-dialup-program program))
124             
125             ;; Set spool directory for outgoing messages.
126           (if use-miee
127               (progn
128                 ;; Setting for MIEE with nnspool.
129                 (let ((news-spool
130                        (read-from-minibuffer
131                         "News spool directory for sending: "
132                         "~/spool/mail.out"))
133                       (mail-spool
134                        (read-from-minibuffer
135                         "Mail spool directory for sending: "
136                         "~/spool/news.out")))
137                   (setq gnus-offline-mail-spool-directory mail-spool)
138                   (setq gnus-offline-news-spool-directory news-spool)
139                   (setq gnus-offline-drafts-queue-type 'miee)
140                   
141                   ;; Load MIEE.
142                   (load "miee")
143                   ;; Set news post function for MIEE.
144                   (setq message-send-news-function 'gnspool-request-post)
145                   ;; Spool directory setting - MIEE.
146                   (if (not (file-exists-p gnus-offline-mail-spool-directory))
147                       (make-directory gnus-offline-mail-spool-directory t))
148                   (setq sendmail-to-spool-directory
149                         gnus-offline-mail-spool-directory)
150                   (if (not (file-exists-p gnus-offline-news-spool-directory))
151                       (make-directory gnus-offline-news-spool-directory t))
152                   (setq news-spool-request-post-directory
153                         gnus-offline-news-spool-directory)))
154             
155             ;; Set drafts type gnus-agent.
156             (setq gnus-offline-drafts-queue-type 'agent))
157           
158           ;; Setting for gnus-agent.
159           (let ((agent-directory
160                  (read-from-minibuffer "Agent directory: " "~/News/agent")))
161             (setq gnus-agent-directory agent-directory))
162             
163           ;; Determin MTA type.
164           (if (string-equal mta-type "smtp")
165               (setq gnus-offline-MTA-type 'smtp)
166             (setq gnus-offline-MTA-type 'sendmail)
167             )
168           ;;
169           ;; Set E-Mail Address and pop3 movemail type.
170           (setq i (string-to-int num-of-address))
171           (setq address nil)
172           (while (> i 0)
173             (setq address
174                   (append address
175                           (list
176                            (list
177                             (concat "po:"
178                                     (read-from-minibuffer
179                                      "Email address (user@mailhost): "))
180                             (completing-read
181                              "Authentification Method (TAB to completion): "
182                              '(("pass" 1) ("apop" 2)) nil t nil)))))
183             (setq i (- i 1)))
184           
185           ;; Replace "hoge" -> 'hoge
186           (mapcar
187            (lambda (x)
188              (if (string-equal (nth 1 x) "pass")
189                  (setcar (cdr x) 'pass)
190                (setcar (cdr x) 'apop)))
191            address)
192           (setq pop3-fma-spool-file-alist address)
193           
194           ;; Set movemail type.
195           (let ((movemail-type
196                  (completing-read
197                   "Select movemail type for retreave mail (TAB to completion): "
198                   '(("exe" 1) ("lisp" 2))
199                   nil t nil))
200                 )
201             (if (string-equal movemail-type "exe")
202                 (let ((options
203                        (read-from-minibuffer "movemail options: ")))
204                   (setq pop3-fma-movemail-arguments (split-string options "[\t ]+"))))
205             (if (string-equal movemail-type "exe")
206                 (setq pop3-fma-movemail-type 'exe)
207               (setq pop3-fma-movemail-type 'lisp))))
208         
209         ;; Write to setting file.
210         (setq tmp-buffer (get-buffer-create "* Setting"))
211         (set-buffer "* Setting")
212         (erase-buffer)
213         (insert ";;\n");
214         (insert ";; This file is created by gnus-ofsetup.el\n")
215         (insert ";; Creation date : ")
216         (insert (current-time-string))
217         (insert "\n")
218         (insert ";;\n")
219
220         ;; write Basic setting
221         (insert "(setq gnus-offline-news-fetch-method '")
222         (insert (prin1-to-string gnus-offline-news-fetch-method))
223         (insert ")\n")
224         (insert "(setq gnus-offline-mail-fetch-method '")
225         (insert (prin1-to-string gnus-offline-mail-fetch-method))
226         (insert ")\n")
227         (insert "(setq gnus-offline-use-miee ")
228         (insert (prin1-to-string gnus-offline-use-miee))
229         (insert ")\n")
230         (insert "(setq gnus-offline-dialup-program ")
231         (insert (prin1-to-string gnus-offline-dialup-program))
232         (insert ")\n")
233
234         ;; write dialup/hangup program and options.
235         (if (stringp gnus-offline-dialup-program)
236             (progn
237               (insert "(setq gnus-offline-dialup-program-arguments '")
238               (insert (prin1-to-string gnus-offline-dialup-program-arguments))
239               (insert ")\n")))
240         (insert "(setq gnus-offline-hangup-program ")
241         (insert (prin1-to-string gnus-offline-hangup-program))
242         (insert ")\n")
243         (if (stringp gnus-offline-hangup-program)
244             (progn
245               (insert "(setq gnus-offline-hangup-program-arguments '")
246               (insert (prin1-to-string gnus-offline-hangup-program-arguments))
247               (insert ")\n")))
248
249         ;; write setting about MIEE.
250         (if gnus-offline-use-miee
251             (progn
252               (insert "(setq gnus-offline-mail-spool-directory ")
253               (insert (prin1-to-string gnus-offline-mail-spool-directory))
254               (insert ")\n")
255               (insert "(setq gnus-offline-news-spool-directory ")
256               (insert (prin1-to-string gnus-offline-news-spool-directory))
257               (insert ")\n")
258               (insert "(setq sendmail-to-spool-directory gnus-offline-mail-spool-directory)\n")
259               (insert "(setq news-spool-request-post-directory gnus-offline-news-spool-directory)\n")
260               (insert "(load \"miee\")\n")))
261
262         ;; write setting about nnspool and gnus-agent.
263         (if (equal gnus-offline-news-fetch-method 'nnspool)
264             (insert "(message-offline-state)\n")
265           (insert "(setq gnus-agent-directory ")
266           (insert (prin1-to-string gnus-agent-directory))
267           (insert ")\n"))
268
269         ;; write setting about queue type -- MIEE or nnagent.
270         (insert "(setq gnus-offline-drafts-queue-type '")
271         (insert (prin1-to-string gnus-offline-drafts-queue-type))
272         (insert ")\n")
273         (insert "(setq gnus-offline-MTA-type '")
274         (insert (prin1-to-string gnus-offline-MTA-type))
275         (insert ")\n")
276
277         ;; Offline setting for gnus-nntp-*
278         (insert "(setq gnus-nntp-service nil)\n")
279         (insert "(setq gnus-nntp-server nil)\n")
280         (insert "(setq nnmail-spool-file nil)\n")
281
282         ;; Write setting about hooks.
283         (insert "(add-hook 'gnus-group-mode-hook 'gnus-offline-processed-by-timer t)\n")
284         (insert "(add-hook 'gnus-group-mode-hook 'gnus-offline-error-check t)\n")
285         (insert "(add-hook 'gnus-after-getting-new-news-hook 'gnus-offline-after-get-new-news)\n")
286         (insert "(add-hook 'gnus-after-getting-news-hook 'gnus-offline-after-get-new-news)\n")
287         (if (eq gnus-offline-news-fetch-method 'nnspool)
288             (insert "(add-hook 'after-getting-news-hook 'gnus-offline-nnspool-hangup-line)\n"))
289         (insert "(add-hook 'message-send-hook 'gnus-offline-message-add-header)\n")
290         (insert "(autoload 'gnus-offline-setup \"gnus-offline\")\n")
291         (insert "(add-hook 'gnus-load-hook 'gnus-offline-setup)\n")
292
293         ;; Write setting about pop3-fma.
294         (insert "(require 'pop3-fma)\n")
295         (insert "(add-hook 'message-send-hook 'pop3-fma-message-add-header)\n")
296         (insert "(setq pop3-fma-spool-file-alist '")
297         (insert (prin1-to-string pop3-fma-spool-file-alist))
298         (insert ")\n")
299         (insert "(setq pop3-fma-movemail-type '")
300         (insert (prin1-to-string pop3-fma-movemail-type))
301         (insert ")\n")
302         (if (eq pop3-fma-movemail-type 'exe)
303             (progn
304               (insert "(setq pop3-fma-movemail-arguments '")
305               (insert (prin1-to-string pop3-fma-movemail-arguments))
306               (insert ")\n")))
307         (write-region (point-min) (point-max) gnus-offline-setting-file)
308         (kill-buffer "* Setting"))
309     )
310   (load gnus-offline-setting-file))
311 ;; gnus-ofsetup.el Ends here.