[stamp-cvs] CVS stamp

rstrandh rstrandh at common-lisp.net
Thu Jan 4 06:13:08 UTC 2007

Update of /project/stamp/cvsroot/stamp
In directory clnet:/tmp/cvs-serv5849

Modified Files:
	stamp.asd stamp.lisp 
Added Files:
Log Message:
Modified mel-base slightly so that we can get hold of the 
unique filename that is generated when a message is copied
into a maildir folder.

Made com-get-mail add a line to the tags files whenever a
message is copied. 

--- /project/stamp/cvsroot/stamp/stamp.asd	2007/01/04 03:41:04	1.2
+++ /project/stamp/cvsroot/stamp/stamp.asd	2007/01/04 06:13:08	1.3
@@ -27,4 +27,5 @@
 (defsystem :stamp
   :depends-on (:mcclim :mel-base :climacs :split-sequence)
   :components ((:file "packages")
+	       (:file "mel-extra")
                (:file "stamp" :depends-on ("packages"))))
--- /project/stamp/cvsroot/stamp/stamp.lisp	2007/01/04 03:55:16	1.5
+++ /project/stamp/cvsroot/stamp/stamp.lisp	2007/01/04 06:13:08	1.6
@@ -307,6 +307,34 @@
         (when message
           (send-message message headers body))))))
+(defun address-string-or-nil (address)
+  (if (null address)
+      nil
+      (mel:address-spec address)))
+(defun standard-tags (message)
+  "Return a list of standard tags for the message"
+  (list :subject (mel:subject message)
+        :date (mel:date message)
+        :from (address-string-or-nil (mel:from message))
+        :to (mapcar #'address-string-or-nil (mel:to message))
+        :sender (address-string-or-nil (mel:sender message))))
+(defun copy-message-and-process-standard-tags (message folder)
+  (let ((folder-name (mel:name folder))
+	(message-name (mel:copy-message message folder))
+	(tags (standard-tags message)))
+    (with-open-file (stream (concatenate 'string folder-name "tags1")
+			    :direction :output
+			    :if-does-not-exist :create
+			    :if-exists :append)
+      (print (cons message-name tags) stream))
+    (with-open-file (stream (concatenate 'string folder-name "tags2")
+			    :direction :output
+			    :if-does-not-exist :create
+			    :if-exists :append)
+      (print (cons message-name tags) stream))))
 (define-stamp-command (com-get-mail :name t) ()
   (loop for mailbox in *mailboxes*
         do (loop for message in (mel:messages mailbox)
@@ -314,7 +342,7 @@
                                 (mel:messages *inbox-folder*)
                                 :key #'mel:message-id
                                 :test #'string=)
-                 do (mel:copy-message message *inbox-folder*)))
+                 do (copy-message-and-process-standard-tags message *inbox-folder*)))
   (redisplay-pane 'headers-pane))
 (define-stamp-command (com-show-all-headers :name t) ()

--- /project/stamp/cvsroot/stamp/mel-extra.lisp	2007/01/04 06:13:08	NONE
+++ /project/stamp/cvsroot/stamp/mel-extra.lisp	2007/01/04 06:13:08	1.1
(in-package :mel.internal)

;;; modify this method so that it returns the unique filename of the sink
#+(or sbcl cmu)
(defmethod copy-message-using-folders ((message message) message-folder (sink-folder folder))
  "Copy a message (contained in some folder) into another folder"
  (declare (ignore message-folder))
  (with-open-stream (source (open-message-input-stream message))
    (with-open-stream (sink (open-message-storing-stream sink-folder message))
      (loop for c = (read-char source nil nil)
            while c do (write-char c sink)
	    finally (return (mel.folders.maildir::unique-message-name sink))))))

More information about the Stamp-cvs mailing list