(require 'nnvirtual)
(require 'gnus-sum)
(require 'gnus-score)
+(require 'gnus-srvr)
(eval-when-compile
(if (featurep 'xemacs)
(require 'itimer)
"JY" gnus-agent-synchronize-flags
"JS" gnus-group-send-queue
"Ja" gnus-agent-add-group
- "Jr" gnus-agent-remove-group)
+ "Jr" gnus-agent-remove-group
+ "Jo" gnus-agent-toggle-group-plugged)
(defun gnus-agent-group-make-menu-bar ()
(unless (boundp 'gnus-agent-group-menu)
gnus-agent-group-menu gnus-agent-group-mode-map ""
'("Agent"
["Toggle plugged" gnus-agent-toggle-plugged t]
+ ["Toggle group plugged" gnus-agent-toggle-group-plugged t]
["List categories" gnus-enter-category-buffer t]
["Send queue" gnus-group-send-queue gnus-plugged]
("Fetch"
(setq articles (nthcdr i articles))))
;; add article with marks to list of article headers we want to fetch.
(dolist (arts (gnus-info-marks (gnus-get-info group)))
- (setq articles (gnus-range-add articles (cdr arts))))
+ (unless (memq (car arts) '(seen recent))
+ (setq articles (gnus-range-add articles (cdr arts)))))
(setq articles (sort (gnus-uncompress-sequence articles) '<))
;; Remove known articles.
(when (gnus-agent-load-alist group)
(unless (eobp)
(gnus-agent-copy-nov-line (car articles))
(setq articles (cdr articles))))
+ (set-buffer nntp-server-buffer)
(when articles
(let (b e)
(set-buffer gnus-agent-overview-buffer)
(setq b (point)
e (point-max))
+ (while (and (not (eobp))
+ (<= (read (current-buffer)) (car articles)))
+ (forward-line 1)
+ (setq b (point)))
(set-buffer nntp-server-buffer)
(insert-buffer-substring gnus-agent-overview-buffer b e)))))
(gnus-category-position-point)))
(defun gnus-category-name ()
- (or (get-text-property (gnus-point-at-bol) 'gnus-category)
+ (or (intern (get-text-property (gnus-point-at-bol) 'gnus-category))
(error "No category on the current line")))
(defun gnus-category-read ()
(let ((init-file-user "")
(gnus-always-read-dribble-file t))
(gnus))
- (gnus-group-send-queue)
- (gnus-agent-fetch-session))
+ (let ((gnus-agent-confirmation-function 'gnus-agent-batch-confirmation))
+ (gnus-group-send-queue)
+ (gnus-agent-fetch-session)))
(defun gnus-agent-retrieve-headers (articles group &optional fetch-old)
(save-excursion
(push (read (current-buffer)) cached-articles))
(forward-line 1))
(setq cached-articles (sort cached-articles '<))))
- (when (setq uncached-articles
- (gnus-set-difference articles cached-articles))
+ (if (setq uncached-articles
+ (gnus-set-difference articles cached-articles))
+ (progn
+ (set-buffer nntp-server-buffer)
+ (erase-buffer)
+ (let (gnus-agent-cache)
+ (unless (eq 'nov
+ (gnus-retrieve-headers
+ uncached-articles group fetch-old))
+ (nnvirtual-convert-headers)))
+ (set-buffer gnus-agent-overview-buffer)
+ (erase-buffer)
+ (set-buffer nntp-server-buffer)
+ (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
+ (when (and uncached-articles (file-exists-p file))
+ (gnus-agent-braid-nov group uncached-articles file))
+ (set-buffer nntp-server-buffer)
+ (write-region-as-coding-system gnus-agent-file-coding-system
+ (point-min) (point-max)
+ file nil 'silent)
+ (gnus-agent-load-alist group)
+ (gnus-agent-save-alist group uncached-articles nil)
+ (gnus-agent-open-history)
+ (setq gnus-agent-current-history (gnus-agent-history-buffer))
+ (gnus-agent-enter-history
+ "last-header-fetched-for-session"
+ (list (cons group (nth (- (length articles) 1) articles)))
+ (time-to-days (current-time)))
+ (gnus-agent-save-history))
(set-buffer nntp-server-buffer)
(erase-buffer)
- (let (gnus-agent-cache)
- (unless (eq 'nov
- (gnus-retrieve-headers
- uncached-articles group fetch-old))
- (nnvirtual-convert-headers)))
- (set-buffer gnus-agent-overview-buffer)
- (erase-buffer)
- (set-buffer nntp-server-buffer)
- (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
- (when (and uncached-articles (file-exists-p file))
- (gnus-agent-braid-nov group uncached-articles file))
- (write-region-as-coding-system gnus-agent-file-coding-system
- (point-min) (point-max)
- file nil 'silent)
- (gnus-agent-load-alist group)
- (gnus-agent-save-alist group uncached-articles nil)
- (gnus-agent-open-history)
- (setq gnus-agent-current-history (gnus-agent-history-buffer))
- (gnus-agent-enter-history
- "last-header-fetched-for-session"
- (list (cons group (nth (- (length articles) 1) articles)))
- (time-to-days (current-time)))
- (gnus-agent-save-history)))
- (set-buffer nntp-server-buffer)
- (erase-buffer)
- (insert-buffer-substring gnus-agent-overview-buffer)
+ (insert-buffer-substring gnus-agent-overview-buffer)))
(if (and fetch-old
(not (numberp fetch-old)))
t ; Don't remove anything.
(gnus-agent-directory)
(gnus-agent-group-path group) "/"
(number-to-string article)))
- (buffer-read-only nil))
- (when (file-exists-p file)
+ (buffer-read-only nil))
+ (when (and (file-exists-p file)
+ (> (nth 7 (file-attributes file)) 0))
(erase-buffer)
(gnus-kill-all-overlays)
(insert-file-contents-as-coding-system gnus-cache-coding-system file)
force)
(setcar (nthcdr 1 server) 'close)))))
+(defun gnus-agent-toggle-group-plugged (group)
+ "Toggle the status of the server of the current group."
+ (interactive (list (gnus-group-group-name)))
+ (let* ((method (gnus-find-method-for-group group))
+ (status (cadr (assoc method gnus-opened-servers))))
+ (if (eq status 'offline)
+ (gnus-server-set-status method 'closed)
+ (gnus-close-server method)
+ (gnus-server-set-status method 'offline))
+ (message "Turn %s:%s from %s to %s." (car method) (cadr method)
+ (if (eq status 'offline) 'offline 'online)
+ (if (eq status 'offline) 'online 'offline))))
+
(provide 'gnus-agent)
;;; gnus-agent.el ends here