* gnus.el: Don't test for `mm-guess-mime-charset'.
[gnus] / lisp / nneething.el
index 94b3cea..e013acb 100644 (file)
@@ -1,8 +1,10 @@
-;;; nneething.el --- random file access for Gnus
-;; Copyright (C) 1995,96 Free Software Foundation, Inc.
+;;; nneething.el --- arbitrary file access for Gnus
 
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+;;     Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;; Keywords: news, mail
 
 ;; This file is part of GNU Emacs.
 
 ;;; Commentary:
 
-;; Based on nnspool.el by Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>.
-;; For an overview of what the interface functions do, please see the
-;; Gnus sources.  
-
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+
 (require 'nnheader)
 (require 'nnmail)
 (require 'nnoo)
 (require 'gnus-util)
-(require 'cl)
 
 (nnoo-declare nneething)
 
 (defvoo nneething-map-file-directory "~/.nneething/"
-  "*Where nneething stores the map files.")
+  "Where nneething stores the map files.")
 
 (defvoo nneething-map-file ".nneething"
-  "*Name of the map files.")
+  "Name of the map files.")
 
 (defvoo nneething-exclude-files nil
-  "*Regexp saying what files to exclude from the group.
+  "Regexp saying what files to exclude from the group.
 If this variable is nil, no files will be excluded.")
 
+(defvoo nneething-include-files nil
+  "Regexp saying what files to include in the group.
+If this variable is non-nil, only files matching this regexp will be
+included.")
+
 \f
 
-;;; Internal variables. 
+;;; Internal variables.
 
 (defconst nneething-version "nneething 1.0"
   "nneething version.")
@@ -59,16 +63,14 @@ If this variable is nil, no files will be excluded.")
   "Current news group directory.")
 
 (defvoo nneething-status-string "")
-(defvoo nneething-group-alist nil)
 
-(defvoo nneething-message-id-number 0)
 (defvoo nneething-work-buffer " *nneething work*")
 
-(defvoo nneething-directory nil)
 (defvoo nneething-group nil)
 (defvoo nneething-map nil)
 (defvoo nneething-read-only nil)
 (defvoo nneething-active nil)
+(defvoo nneething-address nil)
 
 \f
 
@@ -105,11 +107,11 @@ If this variable is nil, no files will be excluded.")
 
          (and large
               (zerop (% count 20))
-              (message "nneething: Receiving headers... %d%%"
-                       (/ (* count 100) number))))
+              (nnheader-message 5 "nneething: Receiving headers... %d%%"
+                                (/ (* count 100) number))))
 
        (when large
-         (message "nneething: Receiving headers...done"))
+         (nnheader-message 5 "nneething: Receiving headers...done"))
 
        (nnheader-fold-continuation-lines)
        'headers))))
@@ -119,25 +121,38 @@ If this variable is nil, no files will be excluded.")
   (let ((file (unless (stringp id)
                (nneething-file-name id)))
        (nntp-server-buffer (or buffer nntp-server-buffer)))
-    (and (stringp file)                        ; We did not request by Message-ID.
+    (and (stringp file)                   ; We did not request by Message-ID.
         (file-exists-p file)           ; The file exists.
         (not (file-directory-p file))  ; It's not a dir.
         (save-excursion
-          (nnmail-find-file file)      ; Insert the file in the nntp buf.
+          (let ((nnmail-file-coding-system 'binary))
+            (nnmail-find-file file))   ; Insert the file in the nntp buf.
           (unless (nnheader-article-p) ; Either it's a real article...
-            (goto-char (point-min))
-            (nneething-make-head file (current-buffer)) ; ... or we fake some headers.
+            (let ((type
+                   (unless (file-directory-p file)
+                     (or (cdr (assoc (concat "." (file-name-extension file))
+                                     mailcap-mime-extensions))
+                         "text/plain")))
+                  (charset
+                   (mm-detect-mime-charset-region (point-min) (point-max)))
+                  (encoding))
+              (unless (string-match "\\`text/" type)
+                (base64-encode-region (point-min) (point-max))
+                (setq encoding "base64"))
+              (goto-char (point-min))
+              (nneething-make-head file (current-buffer)
+                                   nil type charset encoding))
             (insert "\n"))
           t))))
 
-(deffoo nneething-request-group (group &optional dir dont-check)
-  (nneething-possibly-change-directory group dir)
+(deffoo nneething-request-group (group &optional server dont-check)
+  (nneething-possibly-change-directory group server)
   (unless dont-check
     (nneething-create-mapping)
     (if (> (car nneething-active) (cdr nneething-active))
        (nnheader-insert "211 0 1 0 %s\n" group)
       (nnheader-insert
-       "211 %d %d %d %s\n" 
+       "211 %d %d %d %s\n"
        (- (1+ (cdr nneething-active)) (car nneething-active))
        (car nneething-active) (cdr nneething-active)
        group)))
@@ -156,31 +171,30 @@ If this variable is nil, no files will be excluded.")
   (setq nneething-current-directory nil)
   t)
 
+(deffoo nneething-open-server (server &optional defs)
+  (nnheader-init-server-buffer)
+  (if (nneething-server-opened server)
+      t
+    (unless (assq 'nneething-address defs)
+      (setq defs (append defs (list (list 'nneething-address server)))))
+    (nnoo-change-server 'nneething server defs)))
+
 \f
 ;;; Internal functions.
 
-(defun nneething-possibly-change-directory (group &optional dir)
-  (when group
-    (if (and nneething-group
-            (string= group nneething-group))
-       t
-      (let (entry)
-       (if (setq entry (assoc group nneething-group-alist))
-           (progn
-             (setq nneething-group group)
-             (setq nneething-directory (nth 1 entry))
-             (setq nneething-map (nth 2 entry))
-             (setq nneething-active (nth 3 entry)))
-         (setq nneething-group group)
-         (setq nneething-directory dir)
-         (setq nneething-map nil)
-         (setq nneething-active (cons 1 0))
-         (nneething-create-mapping)
-         (push (list group dir nneething-map nneething-active)
-               nneething-group-alist))))))
+(defun nneething-possibly-change-directory (group &optional server)<