1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-05 22:20:24 -08:00

Improve compression of article lists in gnus/nnselect

* lisp/gnus/nnselect.el (nnselect-compress-artlist): Allow compressed list.
nnselect-uncompress-artlist): Properly loop over rsv values.
This commit is contained in:
Andrew G Cohen 2022-02-04 08:30:32 +08:00
parent d539d00c42
commit 634cedfea1

View file

@ -79,30 +79,33 @@
;;; Helper routines.
(defun nnselect-compress-artlist (artlist)
"Compress ARTLIST."
(let (selection)
(pcase-dolist (`(,artgroup . ,arts)
(nnselect-categorize artlist #'nnselect-artitem-group))
(let (list)
(pcase-dolist (`(,rsv . ,articles)
(nnselect-categorize
arts #'nnselect-artitem-rsv #'nnselect-artitem-number))
(push (cons rsv (gnus-compress-sequence (sort articles #'<)))
list))
(push (cons artgroup list) selection)))
selection))
(if (consp artlist)
artlist
(let (selection)
(pcase-dolist (`(,artgroup . ,arts)
(nnselect-categorize artlist #'nnselect-artitem-group))
(let (list)
(pcase-dolist (`(,rsv . ,articles)
(nnselect-categorize
arts #'nnselect-artitem-rsv #'nnselect-artitem-number))
(push (cons rsv (gnus-compress-sequence (sort articles #'<)))
list))
(push (cons artgroup list) selection)))
selection)))
(defun nnselect-uncompress-artlist (artlist)
"Uncompress ARTLIST."
(if (vectorp artlist)
artlist
(let (selection)
(pcase-dolist (`(,artgroup (,artrsv . ,artseq)) artlist)
(setq selection
(vconcat
(cl-map 'vector
(lambda (art)
(vector artgroup art artrsv))
(gnus-uncompress-sequence artseq)) selection)))
(pcase-dolist (`(,artgroup . ,list) artlist)
(pcase-dolist (`(,artrsv . ,artseq) list)
(setq selection
(vconcat
(cl-map 'vector
(lambda (art)
(vector artgroup art artrsv))
(gnus-uncompress-sequence artseq)) selection))))
selection)))
(make-obsolete 'nnselect-group-server 'gnus-group-server "28.1")