3.0 KiB
3.0 KiB
Correct IMAP unread counts - dabrahams/dwamacs@0d6a991 - GitHub
,#+CCE_MODULE: imap-unread-counts ,#+CCE_PRIORITY: 75
Candidate for CCE module to restore unread message counts in Gnus, even with MaxMessages
set in mbsync configuration.
Even with MaxMessages 1000
, my ~/Maildir
is 8.0 gb, probably from A bunch of cool tumblrs which I might move in to an actual Tumblr account again.
(provide 'cce/imap-unread-counts)
(setq gnus-group-line-format "%S%p%P%5uy%5T: %(%B%G%B%)\n")
(require 'imap)
(defun gnus-nnimap-count-format (n)
(let ((method (or gnus-tmp-method gnus-select-method)))
(when (eq (car method) 'nnimap)
(let ((counts (nnimap-request-message-counts gnus-tmp-group method)))
(if counts (format "%d" (nth n counts)) "?")))))
(defun gnus-user-format-function-t (dummy)
(or (gnus-nnimap-count-format 0)
gnus-tmp-number-total))
(defun gnus-user-format-function-y (dummy)
(or (gnus-nnimap-count-format 1)
gnus-tmp-number-of-unread))
(defvar nnimap-message-count-cache-alist nil)
(defun nnimap-message-count-cache-clear ()
(setq nnimap-message-count-cache-alist nil))
(defun nnimap-message-count-cache-get (group)
(cadr (assoc group nnimap-message-count-cache-alist)))
(defun nnimap-message-count-cache-set (group count)
(push (list group count) nnimap-message-count-cache-alist))
(defun nnimap-request-message-counts (group method)
(or (nnimap-message-count-cache-get group)
(let ((counts (nnimap-fetch-message-counts group method)))
(nnimap-message-count-cache-set group counts)
counts)))
(defun nnimap-fetch-message-counts (group method)
(let ((imap-group (nnimap-decode-gnus-group (car (last (split-string group ":")))))
(server (cadr method)))
(when (nnimap-change-group imap-group server)
(message "Requesting message count for %s..." group)
(with-current-buffer (nnimap-buffer)
(let ((response
(assoc "MESSAGES"
(assoc "STATUS"
(nnimap-command "STATUS %S (MESSAGES UNSEEN)"
(utf7-encode imap-group t))))))
(message "Requesting message count for %s...done" group)
(and response
(mapcar #'string-to-number
(list
(nth 1 response) (nth 3 response)))))))))
(add-hook 'gnus-after-getting-new-news-hook 'nnimap-message-count-cache-clear)