Implement IMAP SEARCH-FOLDER operation.
authorChris Hanson <org/chris-hanson/cph>
Tue, 16 May 2000 03:34:42 +0000 (03:34 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 16 May 2000 03:34:42 +0000 (03:34 +0000)
v7/src/imail/imail-imap.scm
v7/src/imail/imail.pkg
v7/src/imail/imap-response.scm
v7/src/imail/todo.txt

index 3d5c78ff03291e75f11c1c53956fea33232902cd..62d3ef8c9349885b864e0eaa9f88d945d4ce792a 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-imap.scm,v 1.40 2000/05/16 03:13:29 cph Exp $
+;;; $Id: imail-imap.scm,v 1.41 2000/05/16 03:33:38 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
 
 (define-method search-folder ((folder <imap-folder>) criteria)
   (guarantee-imap-folder-open folder)
-  ???)
+  (map (lambda (index) (get-message folder index))
+       (imap:response:search-indices
+       (let ((connection (imap-folder-connection folder)))
+         (cond ((string? criteria)
+                (imap:command:search connection 'TEXT criteria))
+               (else
+                (error:wrong-type-argument criteria
+                                           "search criteria"
+                                           'SEARCH-FOLDER)))))))
 
 (define-method folder-sync-status ((folder <imap-folder>))
   ;; Changes are always written through.
                            (and (pair? flags) flags)
                            (imap:universal-time->date-time time)
                            (cons 'LITERAL text)))
+
+(define (imap:command:search connection . key-plist)
+  (apply imap:command:single-response imap:response:search?
+        connection 'SEARCH key-plist))
 \f
 (define (imap:command:no-response connection command . arguments)
   (let ((response
index 55c590b68484be8306e8f0696a2f731861affaa2..368e5addc966c484c56335d256e6dd87e89be613 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail.pkg,v 1.32 2000/05/16 03:13:41 cph Exp $
+;;; $Id: imail.pkg,v 1.33 2000/05/16 03:33:47 cph Exp $
 ;;;
 ;;; Copyright (c) 2000 Massachusetts Institute of Technology
 ;;;
          imap:response:recent?
          imap:response:response-text-code
          imap:response:response-text-string
+         imap:response:search-indices
          imap:response:search?
          imap:response:status-response?
          imap:response:status?
index 843e9f3911c8d5e1f0fc0bad57c7f5877b317b35..c8bdf31bf670c587f955421544dc650140971d7b 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imap-response.scm,v 1.13 2000/05/08 15:04:44 cph Exp $
+;;; $Id: imap-response.scm,v 1.14 2000/05/16 03:33:49 cph Exp $
 ;;;
 ;;; Copyright (c) 2000 Massachusetts Institute of Technology
 ;;;
 (define imap:response:fetch-index cadr)
 (define imap:response:flags cdr)
 (define imap:response:recent-count cadr)
+(define imap:response:search-indices cdr)
 
 (define (imap:response:tag response)
   (and (memq (car response) '(OK NO BAD))
index 8c49a965bbb34ef1cf10d5fa4c3d440a958b0aea..e8a1b6dc38aadddb45fb0339d62beed4c8187c2b 100644 (file)
@@ -1,5 +1,5 @@
 IMAIL To-Do List
-$Id: todo.txt,v 1.11 2000/05/15 19:17:19 cph Exp $
+$Id: todo.txt,v 1.12 2000/05/16 03:34:42 cph Exp $
 
 Bug fixes
 ---------
@@ -7,15 +7,7 @@ Bug fixes
 * Use UID FETCH instead of FETCH for IMAP?  In the case of Cyrus, it
   looks like UID FETCH does new-mail checks, while FETCH doesn't.
 
-* Implement operations for IMAP: FOLDER-VALID?, SEARCH-FOLDER, and
-  APPEND-MESSAGE.
-
-* APPEND-MESSAGE should use the IMAP COPY command if the source and
-  target folder are both on the same server and belong to the same
-  user (i.e. if the URLs are equal except for the mailbox).  If the
-  IMAP APPEND command is used, the internal date should be set from
-  the unix from line, if available, or else computed from the
-  "received:" headers, or the "date:" header as a last resort.
+* Implement operations for IMAP: FOLDER-VALID?.
 
 * Implement background thread to periodically send NOOP to IMAP server
   both to check for new mail and to keep the connection alive.