- (let ((delim-string (concat "^" rmail-unix-mail-delimiter))
- article art-string start stop)
- (nnfolder-possibly-change-group newsgroup server)
- (set-buffer nnfolder-current-buffer)
- (goto-char (point-min))
- (if (stringp (car sequence))
- 'headers
- (while sequence
- (setq article (car sequence))
- (setq art-string (nnfolder-article-string article))
- (set-buffer nnfolder-current-buffer)
- (if (or (search-forward art-string nil t)
- ;; Don't search the whole file twice! Also, articles
- ;; probably have some locality by number, so searching
- ;; backwards will be faster. Especially if we're at the
- ;; beginning of the buffer :-). -SLB
- (search-backward art-string nil t))
- (progn
- (setq start (or (re-search-backward delim-string nil t)
- (point)))
- (search-forward "\n\n" nil t)
- (setq stop (1- (point)))
- (set-buffer nntp-server-buffer)
- (insert (format "221 %d Article retrieved.\n" article))
- (insert-buffer-substring nnfolder-current-buffer start stop)
- (goto-char (point-max))
- (insert ".\n")))
- (setq sequence (cdr sequence)))
-
- (set-buffer nntp-server-buffer)
- (nnheader-fold-continuation-lines)
- 'headers))))
-
-(defun nnfolder-open-server (server &optional defs)
- (nnheader-init-server-buffer)
- (if (equal server nnfolder-current-server)
- t
- (if nnfolder-current-server
- (setq nnfolder-server-alist
- (cons (list nnfolder-current-server
- (nnheader-save-variables nnfolder-server-variables))
- nnfolder-server-alist)))
- (let ((state (assoc server nnfolder-server-alist)))
- (if state
- (progn
- (nnheader-restore-variables (nth 1 state))
- (setq nnfolder-server-alist (delq state nnfolder-server-alist)))
- (nnheader-set-init-variables nnfolder-server-variables defs)))
- (setq nnfolder-current-server server)))
-
-(defun nnfolder-close-server (&optional server)
- (setq nnfolder-current-server nil)
- t)
-
-(defun nnfolder-server-opened (&optional server)
- (and (equal server nnfolder-current-server)
- nntp-server-buffer
- (buffer-name nntp-server-buffer)))
+ (let (article start stop)
+ (nnfolder-possibly-change-group group server)
+ (when nnfolder-current-buffer
+ (set-buffer nnfolder-current-buffer)
+ (goto-char (point-min))
+ (if (stringp (car articles))
+ 'headers
+ (while (setq article (pop articles))
+ (set-buffer nnfolder-current-buffer)
+ (when (nnfolder-goto-article article)
+ (setq start (point))
+ (search-forward "\n\n" nil t)
+ (setq stop (1- (point)))
+ (set-buffer nntp-server-buffer)
+ (insert (format "221 %d Article retrieved.\n" article))
+ (insert-buffer-substring nnfolder-current-buffer start stop)
+ (goto-char (point-max))
+ (insert ".\n")))
+
+ (set-buffer nntp-server-buffer)
+ (nnheader-fold-continuation-lines)
+ 'headers)))))
+
+(deffoo nnfolder-open-server (server &optional defs)
+ (nnoo-change-server 'nnfolder server defs)
+ (nnmail-activate 'nnfolder t)
+ (gnus-make-directory nnfolder-directory)
+ (cond
+ ((not (file-exists-p nnfolder-directory))
+ (nnfolder-close-server)
+ (nnheader-report 'nnfolder "Couldn't create directory: %s"
+ nnfolder-directory))
+ ((not (file-directory-p (file-truename nnfolder-directory)))
+ (nnfolder-close-server)
+ (nnheader-report 'nnfolder "Not a directory: %s" nnfolder-directory))
+ (t
+ (nnmail-activate 'nnfolder)
+ (nnheader-report 'nnfolder "Opened server %s using directory %s"
+ server nnfolder-directory)
+ t)))