[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ebdb 886c134 27/33: Add new ebdb-field-mail-folder fiel
From: |
Eric Abrahamsen |
Subject: |
[elpa] externals/ebdb 886c134 27/33: Add new ebdb-field-mail-folder fieldclass |
Date: |
Sun, 3 Sep 2017 17:02:25 -0400 (EDT) |
branch: externals/ebdb
commit 886c134c5e5c2d16a7ed439cd16efff3aec848e9
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>
Add new ebdb-field-mail-folder fieldclass
* ebdb-mua.el (ebdb-mail-folder-list): New variable holding
correspondences between folder names and mail regexps.
(ebdb-field-mail-folder): New class holding a mail folder name to
split to. Also all the basic field methods.
---
ebdb-mua.el | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 72 insertions(+), 1 deletion(-)
diff --git a/ebdb-mua.el b/ebdb-mua.el
index 8096692..6b37cbd 100644
--- a/ebdb-mua.el
+++ b/ebdb-mua.el
@@ -483,10 +483,81 @@ Currently no other MUAs support this EBDB feature."
:group 'ebdb-mua
:type 'string)
+(defvar ebdb-mail-folder-list nil
+ "Variable holding lists of mail folder names and mail regexps.
+This is a list of lists: the car of each list element is a string
+folder name, followed by an arbitrary number of strings
+representing regular expressions matching mail addresses.
+
+The value of this variable is usually constructed from instances
+of the `ebdb-field-mail-folder' field. It's also possible to
+manually add regexps to this list, if for instance the user
+wishes to match mail addresses more broadly. In this case the
+variable should be set before EBDB is loaded.")
+
+(defclass ebdb-field-mail-folder (ebdb-field-user)
+ ((folder
+ :type string
+ :initarg :folder
+ :custom string
+ :documentation "The folder name to split mail to."))
+ :human-readable "mail folder"
+ :documentation "A field holding the string names of MUA
+ folders. The MUA packages may perform automatic splitting and
+ filing of messages from records based on the value of this
+ field.")
+
+(cl-defmethod ebdb-string ((f ebdb-field-mail-folder))
+ (slot-value f 'folder))
+
+(cl-defmethod ebdb-read ((c (subclass ebdb-field-mail-folder))
+ &optional slots obj)
+ (unless (plist-get slots :folder)
+ (setq slots (plist-put slots :folder
+ (ebdb-read-string
+ "Folder name: "
+ (when obj (slot-value obj 'folder))
+ ebdb-mail-folder-list))))
+ (cl-call-next-method c slots obj))
+
+(cl-defmethod ebdb-parse ((c (subclass ebdb-field-mail-folder))
+ (str string)
+ &optional slots)
+ (unless (plist-get slots :folder)
+ (setq slots (plist-put slots :folder str)))
+ (cl-call-next-method c str slots))
+
+(cl-defmethod ebdb-init-field ((f ebdb-field-mail-folder)
+ &optional record)
+ (when record
+ (let* ((folder (slot-value f 'folder))
+ (mails (mapcar #'regexp-quote (ebdb-record-mail-canon record)))
+ (entry (assoc-string folder
+ ebdb-mail-folder-list)))
+ (when mails
+ (if entry
+ (setcdr (assoc folder ebdb-mail-folder-list)
+ (delete-dups (append (cdr entry) mails)))
+ (push (cons folder mails)
+ ebdb-mail-folder-list)))))
+ (cl-call-next-method))
+
+(cl-defmethod ebdb-delete-field ((f ebdb-field-mail-folder)
+ &optional record unload)
+ (when record
+ (let* ((folder (slot-value f 'folder))
+ (mails (mapcar #'regexp-quote (ebdb-record-mail-canon record)))
+ (entry (assoc-string folder
+ ebdb-mail-folder-list)))
+ (when (and mails entry)
+ (setcdr (assoc folder ebdb-mail-folder-list)
+ (seq-difference (cdr entry) mails)))))
+ (cl-call-next-method))
+
(defsubst ebdb-message-header-re (header regexp)
"Return non-nil if REGEXP matches value of HEADER."
(let ((val (ebdb-mua-message-header header))
- (case-fold-search t)) ; RW: Is this what we want?
+ (case-fold-search t)) ; RW: Is this what we want?
(and val (string-match regexp val))))
(defsubst ebdb-mua-check-header (header-type address-parts &optional invert)
- [elpa] externals/ebdb 21ed4b7 19/33: Don't hide cl-print-object definitions, (continued)
- [elpa] externals/ebdb 21ed4b7 19/33: Don't hide cl-print-object definitions, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 99a1563 12/33: Fix custom type for database buffer-char slot, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb aa668d7 08/33: Add "force" argument to ebdb-db-save, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 7bed578 11/33: Provide more careful control of finding related records, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 9b1a2cf 25/33: Use simpler home-grown version of char-fold-to-regexp, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb c362c2a 23/33: Protect against searching labeled fields with no label, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 9ff8795 30/33: Alter migration process to convert various folder fields, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb af264e3 18/33: Stop pretending we don't depend on calendar.el, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 764d89d 21/33: Provide ebdb-load guard in mua-auto-update, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 70ef68e 22/33: Fix compiler warnings, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 886c134 27/33: Add new ebdb-field-mail-folder fieldclass,
Eric Abrahamsen <=
- [elpa] externals/ebdb 823a7d4 29/33: Use value of ebdb-mua-folder-list in VM splitting, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb a5ffda9 33/33: Merge remote-tracking branch 'elpa/externals/ebdb', Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb d6b9b77 06/33: Re-remove ebdb-vm, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb ea2a149 16/33: Add generic tags field, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 7f9aded 20/33: Add to ebdb-db-list in ebdb-test-with-database, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb a4abcbc 24/33: Fix to internationalized ebdb-read for phones, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb ff3dec2 28/33: Use value of ebdb-mail-folder-list in Gnus splitting, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 2ec37b9 32/33: Bump version to 0.3, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb b797e85 31/33: Make mail alias updating happen automatically, Eric Abrahamsen, 2017/09/03
- [elpa] externals/ebdb 8868ceb 26/33: Remove texinfo manual dependency on texinfo+, Eric Abrahamsen, 2017/09/03