git.fiddlerwoaroof.com
Browse code

2006-08-17 Kevin Layer <layer@gemini>

layer authored on 17/08/2006 18:07:34
Showing 2 changed files
... ...
@@ -1,3 +1,9 @@
1
+2006-08-17  Kevin Layer  <layer@gemini>
2
+
3
+    from dancy:
4
+	* imap.cl: rfe6632: Add fetch-letter-sequence support to imap
5
+	  module for IMAP servers
6
+
1 7
 2006-05-24  Kevin Layer  <layer@gemini>
2 8
 
3 9
    from dancy:
... ...
@@ -1,6 +1,13 @@
1 1
 #+(version= 7 0)
2
-(sys:defpatch "smtp" 1
3
-  "fix nameserver lookup if *dns-mode* is just :clib"
2
+(sys:defpatch "imap" 2
3
+  "v1: fix nameserver lookup if *dns-mode* is just :clib;
4
+v2: fetch-letter-sequence support."
5
+  :type :system
6
+  :post-loadable t)
7
+
8
+#+(version= 8 0)
9
+(sys:defpatch "imap" 1
10
+  "v1: fetch-letter-sequence support."
4 11
   :type :system
5 12
   :post-loadable t)
6 13
 
... ...
@@ -23,7 +30,7 @@
23 30
 ;; merchantability or fitness for a particular purpose.  See the GNU
24 31
 ;; Lesser General Public License for more details.
25 32
 ;;
26
-;; $Id: imap.cl,v 1.28 2006/01/05 22:28:42 layer Exp $
33
+;; $Id: imap.cl,v 1.29 2006/08/17 18:07:34 layer Exp $
27 34
 
28 35
 ;; Description:
29 36
 ;;- This code in this file obeys the Lisp Coding Standard found in
... ...
@@ -182,6 +189,16 @@
182 189
     :initform 0)
183 190
    
184 191
    ;;; end list of values for the currently selected mailbox
192
+   
193
+   ;;; state information for fetch-letter-sequence
194
+   (fetch-letter-offset 
195
+    :accessor fetch-letter-offset)
196
+   (fetch-letter-number 
197
+    :accessor fetch-letter-number)
198
+   (fetch-letter-uid
199
+    :accessor fetch-letter-uid)
200
+   (fetch-letter-finished
201
+    :accessor fetch-letter-finished)
185 202
    )
186 203
   )
187 204
 
... ...
@@ -700,18 +717,53 @@
700 717
 				t ; extra stuff
701 718
 				))
702 719
 
720
+(defmethod begin-fetch-letter-sequence ((mb imap-mailbox) number &key uid)
721
+  (setf (fetch-letter-offset mb) 0)
722
+  (setf (fetch-letter-number mb) number)
723
+  (setf (fetch-letter-uid mb) uid)
724
+  (setf (fetch-letter-finished mb) nil))
725
+
726
+
703 727
 (defmethod begin-fetch-letter-sequence ((mb pop-mailbox) number &key uid)
704 728
   (declare (ignore uid))
705 729
   (send-pop-command-get-results mb (format nil "RETR ~d" number))
706 730
   (begin-extended-results-sequence mb))
707 731
 
732
+(defmethod fetch-letter-sequence ((mb imap-mailbox) buffer 
733
+				  &key (start 0) (end (length buffer)))
734
+  (let* ((num (fetch-letter-number mb))
735
+	 (offset (fetch-letter-offset mb))
736
+	 (uid (fetch-letter-uid mb))
737
+	 (buflen (- end start))
738
+	 (data (fetch-field num (format nil "body[]<~d>" offset) 
739
+			    (fetch-parts mb num 
740
+					 (format nil "body[]<~d.~d>" offset buflen)
741
+					 :uid uid)
742
+			    :uid uid))
743
+	 (datalen (length data)))
744
+
745
+    (setf (subseq buffer start end) data)
746
+    
747
+    (if* (and (> buflen 0) (= datalen 0))
748
+       then (setf (fetch-letter-finished mb) t))
749
+    
750
+    (setf (fetch-letter-offset mb) (+ offset buflen))
751
+    
752
+    (+ start datalen)))
753
+		       
708 754
 
709 755
 (defmethod fetch-letter-sequence ((mb pop-mailbox) buffer &key (start 0) (end (length buffer)))
710 756
   (get-extended-results-sequence mb buffer :start start :end end))
711 757
 
758
+(defmethod end-fetch-letter-sequence ((mb imap-mailbox))
759
+  )
760
+
712 761
 (defmethod end-fetch-letter-sequence ((mb pop-mailbox))
713 762
   (end-extended-results-sequence mb))
714 763
 
764
+(defmethod end-of-letter-p ((mb imap-mailbox))
765
+  (fetch-letter-finished mb))
766
+
715 767
 (defmethod end-of-letter-p ((mb pop-mailbox))
716 768
   (end-of-extended-results-p mb))
717 769