|
@@ -87,7 +87,7 @@
|
87
|
87
|
|
88
|
88
|
(defun clean-line (line)
|
89
|
89
|
(let ((cleaned-line (string-trim '(#\Space #\Tab) line)))
|
90
|
|
- (cl-ppcre:regex-replace-all "${MAILDIR}" cleaned-line *maildir*)))
|
|
90
|
+ (cl-ppcre:regex-replace-all "\\$MAILDIR" cleaned-line (princ-to-string *maildir*))))
|
91
|
91
|
|
92
|
92
|
(defun hash-add-command (line hash)
|
93
|
93
|
(let* ((cleaned-line (clean-line line))
|
|
@@ -97,7 +97,7 @@
|
97
|
97
|
hash))
|
98
|
98
|
|
99
|
99
|
(defun get-regex (line)
|
100
|
|
- (second (split-sequence:split-sequence "/" line)))
|
|
100
|
+ (second (split-sequence:split-sequence #\/ line)))
|
101
|
101
|
|
102
|
102
|
(defun make-regex-hash (regex)
|
103
|
103
|
(let ((regex-hash (make-hash-table :test 'equal)))
|
|
@@ -125,3 +125,17 @@
|
125
|
125
|
(with-open-file (s file)
|
126
|
126
|
(loop-file-until s (lambda (x) (declare (ignore x))) #'parse-line hash))
|
127
|
127
|
hash))
|
|
128
|
+
|
|
129
|
+(defun message-match (message rule)
|
|
130
|
+ (cl-ppcre:scan (gethash "regex" rule) (mel:from message)))
|
|
131
|
+
|
|
132
|
+(defun handle-message (message rules)
|
|
133
|
+ (labels ((my-message-match (alexandria:curry message-match message)))
|
|
134
|
+ (find-if #'my-message-match rules)))
|
|
135
|
+
|
|
136
|
+(defun filter-maildir-folder (mailfilter)
|
|
137
|
+ (let* ((mailfilter-rules (read-mailfilter-file mailfilter))
|
|
138
|
+ (maildir (mel:make-maildir-folder (gethash "maildir" mailfilter-rules)))
|
|
139
|
+ (messages (mel:messages maildir)))
|
|
140
|
+ (dolist (message messages)
|
|
141
|
+ (handle-message message mailfilter-rules))))
|