(car active) (cdr active) group))))))
(deffoo nnbabyl-request-scan (&optional group server)
+ (nnbabyl-possibly-change-newsgroup group server)
(nnbabyl-read-mbox)
(nnmail-get-new-mail
'nnbabyl
(deffoo nnbabyl-request-accept-article (group &optional server last)
(nnbabyl-possibly-change-newsgroup group server)
+ (nnmail-check-syntax)
(let ((buf (current-buffer))
result beg)
(and
(save-excursion
(while (re-search-backward "^X-Gnus-Newsgroup: " beg t)
(delete-region (point) (progn (forward-line 1) (point)))))
- (let ((nnmail-split-methods
- (if (stringp group) (list (list group ""))
- nnmail-split-methods)))
- (setq result (car (nnbabyl-save-mail))))
+ (setq result (car (nnbabyl-save-mail
+ (if (stringp group)
+ (list (cons group (nnbabyl-active-number group)))
+ (nnmail-article-group 'nnbabyl-active-number)))))
(set-buffer nnbabyl-mbox-buffer)
(goto-char (point-max))
(search-backward "\n\^_")
(let (lines chars)
(save-excursion
(goto-char (point-min))
- (if (search-forward "\n\n" nil t)
- (progn
- ;; There may be an EOOH line here...
- (if (looking-at "\\*\\*\\* EOOH \\*\\*\\*")
- (search-forward "\n\n" nil t))
- (setq chars (- (point-max) (point)))
- (setq lines (- (count-lines (point) (point-max)) 1))
- ;; Move back to the end of the headers.
- (goto-char (point-min))
- (search-forward "\n\n" nil t)
- (forward-char -1)
- (save-excursion
- (if (re-search-backward "^Lines: " nil t)
- (delete-region (point) (progn (forward-line 1) (point)))))
- (insert (format "Lines: %d\n" lines))
- chars)))))
+ (when (search-forward "\n\n" nil t)
+ ;; There may be an EOOH line here...
+ (when (looking-at "\\*\\*\\* EOOH \\*\\*\\*")
+ (search-forward "\n\n" nil t))
+ (setq chars (- (point-max) (point))
+ lines (max (- (count-lines (point) (point-max)) 1) 0))
+ ;; Move back to the end of the headers.
+ (goto-char (point-min))
+ (search-forward "\n\n" nil t)
+ (forward-char -1)
+ (save-excursion
+ (when (re-search-backward "^Lines: " nil t)
+ (delete-region (point) (progn (forward-line 1) (point)))))
+ (insert (format "Lines: %d\n" lines))
+ chars))))
-(defun nnbabyl-save-mail ()
+(defun nnbabyl-save-mail (group-art)
;; Called narrowed to an article.
- (let ((group-art (nreverse (nnmail-article-group 'nnbabyl-active-number))))
- (nnbabyl-insert-lines)
- (nnmail-insert-xref group-art)
- (nnbabyl-insert-newsgroup-line group-art)
- (run-hooks 'nnbabyl-prepare-save-mail-hook)
- group-art))
+ (nnbabyl-insert-lines)
+ (nnmail-insert-xref group-art)
+ (nnbabyl-insert-newsgroup-line group-art)
+ (run-hooks 'nnbabyl-prepare-save-mail-hook)
+ group-art)
(defun nnbabyl-insert-newsgroup-line (group-art)
(save-excursion
(create-file-buffer nnbabyl-mbox-file)))
(setq buffer-file-name nnbabyl-mbox-file)
(insert "BABYL OPTIONS:\n\n\^_")
- (write-region (point-min) (point-max) nnbabyl-mbox-file t 'nomesg)))
+ (nnmail-write-region
+ (point-min) (point-max) nnbabyl-mbox-file t 'nomesg)))
(if (and nnbabyl-mbox-buffer
(buffer-name nnbabyl-mbox-buffer)
(save-excursion
(set-buffer nnbabyl-mbox-buffer)
- (= (buffer-size) (nth 7 (file-attributes nnbabyl-mbox-file)))))
+ (= (buffer-size) (nnheader-file-size nnbabyl-mbox-file))))
() ; This buffer hasn't changed since we read it last. Possibly.
(save-excursion
(let ((delim (concat "^" nnbabyl-mail-delimiter))
(when (and (re-search-backward
(format "^X-Gnus-Newsgroup: %s:\\([0-9]+\\) "
(caar alist)) nil t)
- (>= (setq number
- (string-to-number
- (buffer-substring
- (match-beginning 1) (match-end 1))))
- (cdadar alist)))
+ (> (setq number
+ (string-to-number
+ (buffer-substring
+ (match-beginning 1) (match-end 1))))
+ (cdadar alist)))
(setcdr (cadar alist) (1+ number)))
(setq alist (cdr alist)))
(save-excursion
(save-restriction
(narrow-to-region (goto-char start) end)
- (nnbabyl-save-mail)
+ (nnbabyl-save-mail
+ (nnmail-article-group 'nnbabyl-active-number))
(setq end (point-max)))))
(goto-char (setq start end)))
(when (buffer-modified-p (current-buffer))
(while (search-forward "\^_" nil t)
(replace-match "?" t t)))
+(defun nnbabyl-check-mbox ()
+ "Go through the nnbabyl mbox and make sure that no article numbers are reused."
+ (interactive)
+ (let ((idents (make-vector 1000 0))
+ id)
+ (save-excursion
+ (when (or (not nnbabyl-mbox-buffer)
+ (not (buffer-name nnbabyl-mbox-buffer)))
+ (nnbabyl-read-mbox))
+ (set-buffer nnbabyl-mbox-buffer)
+ (goto-char (point-min))
+ (while (re-search-forward "^X-Gnus-Newsgroup: \\([^ ]+\\) " nil t)
+ (if (intern-soft (setq id (match-string 1)) idents)
+ (progn
+ (delete-region (progn (beginning-of-line) (point))
+ (progn (forward-line 1) (point)))
+ (nnheader-message 7 "Moving %s..." id)
+ (nnbabyl-save-mail
+ (nnmail-article-group 'nnbabyl-active-number)))
+ (intern id idents)))
+ (when (buffer-modified-p (current-buffer))
+ (save-buffer))
+ (nnmail-save-active nnbabyl-group-alist nnbabyl-active-file)
+ (message ""))))
+
(provide 'nnbabyl)
;;; nnbabyl.el ends here