Browse code
2006-08-17 Kevin Layer <layer@gemini>
layer authored on 17/08/2006 18:07:34
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -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 |
|