ソースを参照

WIP on matching messages

Lily Carpenter 9 年 前
コミット
66daf96a12
共有1 個のファイルを変更した16 個の追加2 個の削除を含む
  1. 16 2
      mailfilter-parse.lisp

+ 16 - 2
mailfilter-parse.lisp

@@ -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))))