summaryrefslogtreecommitdiff
path: root/lisp/nndir.el
blob: 5946754bee04b604a22c9663b8acbf9289ce9fbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
;;; nndir.el --- single directory newsgroup access for Gnus

;; Copyright (C) 1995 Free Software Foundation, Inc.

;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; 	Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;;; Code:

(require 'nnheader)
(require 'nnmh)
(require 'nnml)

(eval-and-compile
  (autoload 'mail-send-and-exit "sendmail"))



(defconst nndir-version "nndir 1.0")

(defvar nndir-current-directory nil
  "Current news group directory.")

(defvar nndir-status-string "")

(defvar nndir-nov-is-evil nil
  "*Non-nil means that nndir will never retrieve NOV headers.")



;;; Interface functions.


(defun nndir-retrieve-headers (sequence &optional newsgroup server)
  (nndir-execute-nnml-command
   '(nnml-retrieve-headers sequence group server) server))

(defun nndir-open-server (host &optional service)
  "Open nndir backend."
  (setq nndir-status-string "")
  (nnheader-init-server-buffer))

(defun nndir-close-server (&optional server)
  "Close news server."
  t)

(defun nndir-server-opened (&optional server)
  "Return server process status, T or NIL.
If the stream is opened, return T, otherwise return NIL."
  (and nntp-server-buffer
       (get-buffer nntp-server-buffer)))

(defun nndir-status-message (&optional server)
  "Return server status response as string."
  nndir-status-string)

(defun nndir-request-article (id &optional newsgroup server buffer)
  (nndir-execute-nnmh-command
   '(nnmh-request-article id group server buffer) server))

(defun nndir-request-group (group &optional server dont-check)
  "Select news GROUP."
  (nndir-execute-nnmh-command
   '(nnmh-request-group group "" dont-check) server))

(defun nndir-request-list (&optional server dir)
  "Get list of active articles in all newsgroups."
  (nndir-execute-nnmh-command
   '(nnmh-request-list nil dir) server))

(defun nndir-request-newgroups (date &optional server)
  (nndir-execute-nnmh-command
   '(nnmh-request-newgroups date server) server))

(defun nndir-request-post (&optional server)
  "Post a new news in current buffer."
  (mail-send-and-exit nil))

(defalias 'nndir-request-post-buffer 'nnmail-request-post-buffer)

(defun nndir-request-expire-articles (articles newsgroup &optional server force)
  "Expire all articles in the ARTICLES list in group GROUP."
  (setq nndir-status-string "nndir: expire not possible")
  nil)

(defun nndir-close-group (group &optional server)
  t)

(defun nndir-request-move-article (article group server accept-form)
  (setq nndir-status-string "nndir: move not possible")
  nil)

(defun nndir-request-accept-article (group)
  (setq nndir-status-string "nndir: accept not possible")
  nil)


;;; Low-Level Interface

(defun nndir-execute-nnmh-command (command server)
  (let ((dir (expand-file-name server)))
    (and (string-match "/$" dir)
	 (setq dir (substring dir 0 (match-beginning 0))))
    (string-match "/[^/]+$" dir)
    (let ((group (substring dir (1+ (match-beginning 0))))
	  (nnmh-directory (substring dir 0 (1+ (match-beginning 0))))
	  (nnmh-get-new-mail nil))
      (eval command))))

(defun nndir-execute-nnml-command (command server)
  (let ((dir (expand-file-name server)))
    (and (string-match "/$" dir)
	 (setq dir (substring dir 0 (match-beginning 0))))
    (string-match "/[^/]+$" dir)
    (let ((group (substring dir (1+ (match-beginning 0))))
	  (nnml-directory (substring dir 0 (1+ (match-beginning 0))))
	  (nnml-nov-is-evil nndir-nov-is-evil)
	  (nnml-get-new-mail nil))
      (eval command))))

(provide 'nndir)

;;; nndir.el ends here