From 7b075803fd5428598ddf3f1b8e907cfecfeb7d9d Mon Sep 17 00:00:00 2001 From: Teodor Zlatanov Date: Tue, 25 Sep 2007 16:15:07 +0000 Subject: [PATCH] (gnus-registry-store-extra-entry): Allow for nil extras value, so an extras entry can be deleted. (gnus-registry-delete-extra-entry): Use it. (gnus-registry-fetch-extra-flags, gnus-registry-has-extra-flag) (gnus-registry-store-extra-flags, gnus-registry-delete-extra-flags) (gnus-registry-delete-all-extra-flags): Allow for arbitrary flag symbol storage through the gnus-registry, and provide an appropriate API for it. --- lisp/ChangeLog | 11 +++++++++++ lisp/gnus-registry.el | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9ab37f5a2..1fd71a94c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2007-09-25 Teodor Zlatanov + + * gnus-registry.el (gnus-registry-store-extra-entry): Allow for nil + extras value, so an extras entry can be deleted. + (gnus-registry-delete-extra-entry): Use it. + (gnus-registry-fetch-extra-flags, gnus-registry-has-extra-flag) + (gnus-registry-store-extra-flags, gnus-registry-delete-extra-flags) + (gnus-registry-delete-all-extra-flags): Allow for arbitrary flag symbol + storage through the gnus-registry, and provide an appropriate API for + it. + 2007-09-13 Katsumi Yamaoka * gnus-sum.el (gnus-newsgroup-maximum-articles): Move from gnus.el. diff --git a/lisp/gnus-registry.el b/lisp/gnus-registry.el index f6b862a44..d173bc0c6 100644 --- a/lisp/gnus-registry.el +++ b/lisp/gnus-registry.el @@ -587,6 +587,33 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." (string-match word x)) list))))) +;;; if this extends to more than 'flags, it should be improved to be more generic. +(defun gnus-registry-fetch-extra-flags (id) + "Get the flags of a message, based on the message ID. +Returns a list of symbol flags or nil." + (car-safe (cdr (gnus-registry-fetch-extra id 'flags)))) + +(defun gnus-registry-has-extra-flag (id flag) + "Checks if a message has `flag', based on the message ID." + (memq flag (gnus-registry-fetch-extra-flags id))) + +(defun gnus-registry-store-extra-flags (id &rest flag-list) + "Set the flags of a message, based on the message ID. +The `flag-list' can be nil, in which case no flags are left." + (gnus-registry-store-extra-entry id 'flags (list flag-list))) + +(defun gnus-registry-delete-extra-flags (id &rest flag-delete-list) + "Delete the message flags in `flag-delete-list', based on the message ID." + (let ((flags (gnus-registry-fetch-extra-flags id))) + (when flags + (dolist (flag flag-delete-list) + (setq flags (delq flag flags)))) + (gnus-registry-store-extra-flags id (car flags)))) + +(defun gnus-registry-delete-all-extra-flags (id) + "Delete all the flags for a message ID." + (gnus-registry-store-extra-flags id nil)) + (defun gnus-registry-fetch-extra (id &optional entry) "Get the extra data of a message, based on the message ID. Returns the first place where the trail finds a nonstring." @@ -644,12 +671,20 @@ The message must have at least one group name." gnus-registry-hashtb) (setq gnus-registry-dirty t))))) +(defun gnus-registry-delete-extra-entry (id key) + "Delete a specific entry in the extras field of the registry entry for id." + (gnus-registry-store-extra-entry id key nil)) + (defun gnus-registry-store-extra-entry (id key value) "Put a specific entry in the extras field of the registry entry for id." (let* ((extra (gnus-registry-fetch-extra id)) - (alist (gnus-registry-remove-alist-text-properties - (cons (cons key value) - (gnus-assq-delete-all key (gnus-registry-fetch-extra id)))))) + ;; all the entries except the one for `key' + (the-rest (gnus-assq-delete-all key (gnus-registry-fetch-extra id))) + (alist (if value + (gnus-registry-remove-alist-text-properties + (cons (cons key value) + the-rest)) + the-rest))) (gnus-registry-store-extra id alist))) (defun gnus-registry-fetch-group (id) -- 2.25.1