* gnus-offline.el: Rewrite to work with pGnus v0.74 based T-gnus.
[elisp/gnus.git-] / lisp / gnus-offline.el
index fa7da04..568e2c5 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-offline.el --- To process mail & news at offline environment.
-;;; $Id: gnus-offline.el,v 1.1.2.5.2.25 1999-01-13 06:53:38 ichikawa Exp $
+;;; $Id: gnus-offline.el,v 1.1.2.5.2.28 1999-01-31 23:06:20 yamaoka Exp $
 
 ;;; Copyright (C) 1998 Tatsuya Ichikawa
 ;;;                    Yukihiro Ito
@@ -8,7 +8,7 @@
 ;;;         Hidekazu Nakamura <u90121@uis-inf.co.jp>
 ;;;         Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
 
-;;; Version: 2.02
+;;; Version: 2.10
 ;;; Keywords: news , mail , offline , gnus
 ;;;
 ;;; SPECIAL THANKS
 ;;; In Gnus group buffer , type g to get all news and mail.
 ;;; Then send mail and news in spool directory.
 ;;;
+;;; Security Notice. (This is available before version 2.02)
+;;;
+;;; You can set the variable gnus-offline-pop-password-file to save your POP
+;;; passwords. But TAKE CARE. Use it at your own risk.
+;;; If you decide to use it, then write in .emacs or .gnus-offline.el 
+;;; something like:
+;;;
+;;;  (setq gnus-offline-pop-password-file "~/.pop.passwd")
+;;;
+;;; and write in this file something like:
+;;;
+;;;  (setq pop3-fma-password
+;;;     '(("SERVER1" "ACCOUNT1" "PASSWORD1")
+;;;       ("SERVER2" "ACCOUNT2" "PASSWORD2")
+;;;        ............................
+;;;        ))
+;;;
+;;; If you want to encode the file with base64, try:
+;;;
+;;;    M-: (base64-encode-region (point-min) (point-max))
+;;;
 ;;; Variables.
 ;;;  gnus-offline-dialup-program-arguments
 ;;;                                   ... List of dialup program arguments.
@@ -74,6 +95,9 @@
 ;;;                                        (minutes)
 ;;;  gnus-offline-dialup-function     ... Function to diualup.
 ;;;  gnus-offline-hangup-function     ... Function to hangup.
+;;;  gnus-offline-pop-password-file   ... File to keep the POP password info.
+;;;  gnus-offline-pop-password-decoding-function
+;;;                                   ... Function to decode the password info.
 
 ;;; Code:
 
 
 (require 'cl)
 (require 'custom)
-(require 'pop3-fma)
 (require 'easymenu)
 
 (unless (and (condition-case ()
   :group 'mail
   :group 'news)
 
-(defconst gnus-offline-version-number "2.02")
+(defconst gnus-offline-version-number "2.10b1")
 (defconst gnus-offline-codename
 ;;  "Beta5"                    ; Beta
 ;;  "This is the time"         ; 2.00
 ;;  "A matter of trust"
-  "Modern Woman"
+;;  "Modern Woman"
+  "Ahhhhhhh!!"                 ; 2.10b1
 ;;  "Code of silence"
   )
 
@@ -189,6 +213,23 @@ If set to 0 , timer call is disabled."
   :group 'gnus-offline
   :type 'function)
 
+(defcustom gnus-offline-pop-password-file nil
+  "*File name for saving one's POP password information.
+This variable should be nil if there's some possibility that
+your passwords be stolen."
+  :group 'gnus-offline
+  :type '(choice (file :tag "File")
+                (const nil)))
+
+(defcustom gnus-offline-pop-password-decoding-function 
+  (function (lambda () (base64-decode-region (point-min) (point-max))))
+  "*Function for decoding one's password information.
+The value has no effect when `gnus-offline-pop-password-file'
+is nil.
+This variable might be nil if you don't need to encode your passwords."
+  :group 'gnus-offline
+  :type 'function)
+
 ;;; Internal variables.
 (defvar gnus-offline-connected nil
   "*If value is t , dialup line is connected status.
@@ -212,6 +253,9 @@ If value is nil , dialup line is disconnected status.")
 (defvar gnus-offline-movemail-arguments nil
   "*All command line arguments of exec-directory/movemail.")
 
+(defvar gnus-offline-mail-source nil
+  "*nnmail-spool-file save variable.")
+
 ;;; Temporary variable:
 (defvar string)
 (defvar hdr)
@@ -340,7 +384,30 @@ If value is nil , dialup line is disconnected status.")
   (if (functionp gnus-offline-dialup-function)
       (funcall gnus-offline-dialup-function))
   (gnus-offline-get-new-news-function)
-  (gnus-group-get-new-news arg))
+  (if (not (locate-library "mail-source"))
+      (progn
+       (let (buffer)
+         (unwind-protect
+             (progn
+               (save-excursion
+                 (or pop3-fma-password
+                     (when gnus-offline-pop-password-file
+                       (setq pop3-fma-save-password-information t)
+                       (setq buffer (get-buffer-create "*offline-temp*"))
+                       (set-buffer buffer)
+                       (erase-buffer)
+                       (insert-file-contents-as-binary gnus-offline-pop-password-file)
+                       (and gnus-offline-pop-password-decoding-function
+                            (funcall gnus-offline-pop-password-decoding-function))
+                       (eval-buffer))))
+               (gnus-group-get-new-news arg))
+           (when gnus-offline-pop-password-file
+             (setq pop3-fma-password nil)
+             (setq pop3-fma-save-password-information nil)
+             (kill-buffer buffer)))))
+    ;;
+    ;; Use mail-source.el
+    (gnus-group-get-new-news arg)))
 
 ;;
 ;; dialup...
@@ -477,13 +544,16 @@ If value is nil , dialup line is disconnected status.")
 (defun gnus-offline-enable-fetch-mail ()
   "*Set to fetch mail."
   (setq gnus-offline-mail-fetch-method 'nnmail)
-  (setq nnmail-movemail-program 'pop3-fma-movemail)
-  (setq nnmail-spool-file (append
-                          pop3-fma-local-spool-file-alist
-                          (mapcar
-                           (lambda (spool)
-                             (car spool))
-                           pop3-fma-spool-file-alist))))
+  (if (not (locate-library "mail-source"))
+      (progn
+       (setq nnmail-movemail-program 'pop3-fma-movemail)
+       (setq nnmail-spool-file (append
+                                pop3-fma-local-spool-file-alist
+                                (mapcar
+                                 (lambda (spool)
+                                   (car spool))
+                                 pop3-fma-spool-file-alist))))
+    (setq nnmail-spool-file gnus-offline-mail-source)))
 ;;
 ;; Enable fetch news
 ;;
@@ -727,7 +797,8 @@ If value is nil , dialup line is disconnected status.")
   (add-hook 'gnus-group-mode-hook
            '(lambda ()
               (local-set-key "\C-coh" 'gnus-offline-set-unplugged-state)
-              (local-set-key "\C-com" 'gnus-offline-toggle-movemail-program)
+              (if (not (locate-library "mail-source"))
+                  (local-set-key "\C-com" 'gnus-offline-toggle-movemail-program))
               (local-set-key "\C-cof" 'gnus-offline-toggle-articles-to-fetch)
               (local-set-key "\C-coo" 'gnus-offline-toggle-on/off-send-mail)
               (local-set-key "\C-cox" 'gnus-offline-toggle-auto-hangup)
@@ -778,7 +849,8 @@ If value is nil , dialup line is disconnected status.")
         ["Online \e$B>uBV$X\e(B" message-online-state message-offline-state]
         "----"
         ("Gnus Offline"
-         ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program t]
+         ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program
+          (not (locate-library "mail-source"))]
          ["\e$B<hF@5-;v<oN`$NJQ99\e(B" gnus-offline-toggle-articles-to-fetch t]
          ["Mail \e$BAw?.J}K!\e(B(On/Off)\e$B$N@ZBX$(\e(B" gnus-offline-toggle-on/off-send-mail t]
          ["\e$B<+F0@ZCG$N@ZBX$(\e(B" gnus-offline-toggle-auto-hangup t]
@@ -799,7 +871,8 @@ If value is nil , dialup line is disconnected status.")
        ["Message Online" message-online-state message-offline-state]
        "----"
        ("Gnus Offline"
-       ["Toggle movemail program" gnus-offline-toggle-movemail-program t]
+       ["Toggle movemail program" gnus-offline-toggle-movemail-program
+        (not (locate-library "mail-source"))]
        ["Toggle articles to fetch" gnus-offline-toggle-articles-to-fetch t]
        ["Toggle online/offline send mail" gnus-offline-toggle-on/off-send-mail t]
        ["Toggle auto hangup" gnus-offline-toggle-auto-hangup t]
@@ -822,7 +895,8 @@ If value is nil , dialup line is disconnected status.")
    "Gnus offline Menu"
    (if (featurep 'meadow)
        '("Offline"
-        ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program t]
+        ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program
+         (not (locate-library "mail-source"))]
         ["\e$B<hF@5-;v<oN`$NJQ99\e(B" gnus-offline-toggle-articles-to-fetch t]
         ["Mail \e$BAw?.J}K!\e(B(On/Off)\e$B$N@ZBX$(\e(B" gnus-offline-toggle-on/off-send-mail t]
         ["\e$B<+F0@ZCG$N@ZBX$(\e(B" gnus-offline-toggle-auto-hangup t]
@@ -832,7 +906,8 @@ If value is nil , dialup line is disconnected status.")
         "----"
         ["\e$B2s@~$N@ZCG\e(B" gnus-offline-set-unplugged-state gnus-offline-connected])
      '("Offline"
-       ["Toggle movemail program" gnus-offline-toggle-movemail-program t]
+       ["Toggle movemail program" gnus-offline-toggle-movemail-program
+       (not (locate-library "mail-source"))]
        ["Toggle articles to fetch" gnus-offline-toggle-articles-to-fetch t]
        ["Toggle online/offline send mail" gnus-offline-toggle-on/off-send-mail t]
        ["Toggle auto hangup" gnus-offline-toggle-auto-hangup t]