Fix typo (falgs => flags).
[elisp/wanderlust.git] / elmo / elmo-imap4.el
index ae79ff3..e1b7e39 100644 (file)
@@ -457,7 +457,7 @@ If response is not `OK' response, causes error with IMAP response text."
 
 (luna-define-method mime-imap-location-bodystructure
   ((location mime-elmo-imap-location))
-  (elmo-imap4-fetch-bodystructure
+  (elmo-message-fetch-bodystructure
    (mime-elmo-imap-location-folder-internal location)
    (mime-elmo-imap-location-number-internal location)
    (mime-elmo-imap-location-strategy-internal location)))
@@ -618,8 +618,9 @@ BUFFER must be a single-byte buffer."
               (car (nth 1 entry))))
         response)))
 
-(defun elmo-imap4-fetch-bodystructure (folder number strategy)
-  "Fetch BODYSTRUCTURE for the message in the FOLDER with NUMBER using STRATEGY."
+(luna-define-method elmo-message-fetch-bodystructure ((folder
+                                                      elmo-imap4-folder)
+                                                     number strategy)
   (if (elmo-fetch-strategy-use-cache strategy)
       (elmo-object-load
        (elmo-file-cache-expand-path
@@ -878,10 +879,8 @@ If CHOP-LENGTH is not specified, message set is not chopped."
      (with-temp-buffer
        (insert (or (elmo-imap4-response-bodydetail-text element)
                   ""))
-       ;; Delete CR.
-       (goto-char (point-min))
-       (while (search-forward "\r\n" nil t)
-        (replace-match "\n"))
+       ;; Replace all CRLF with LF.
+       (elmo-delete-cr-buffer)
        (elmo-msgdb-create-message-entity-from-buffer
        handler
        (elmo-imap4-response-value element 'uid)
@@ -1951,6 +1950,14 @@ Return nil if no complete line has arrived."
                  (elmo-imap4-send-command-wait
                   session
                   (list "list " (elmo-imap4-mailbox root) " *"))))
+    ;; The response of Courier-imap doesn't contain a specified folder itself.
+    (unless (member root result)
+      (setq result
+           (append result
+                   (elmo-imap4-response-get-selectable-mailbox-list
+                    (elmo-imap4-send-command-wait
+                     session
+                     (list "list \"\" " (elmo-imap4-mailbox root)))))))
     (when (or (not (string= (elmo-net-folder-user-internal folder)
                            elmo-imap4-default-user))
              (not (eq (elmo-net-folder-auth-internal folder)
@@ -2362,8 +2369,8 @@ If optional argument REMOVE is non-nil, remove FLAG."
                                                  numbers flag)
   (let ((spec (cdr (assq flag elmo-imap4-flag-specs))))
     (elmo-imap4-set-flag folder numbers (or (car spec)
-                                           (capitalize (symbol-name flag))
-                                           (nth 1 spec)))))
+                                           (capitalize (symbol-name flag)))
+                        (nth 1 spec))))
 
 (luna-define-method elmo-folder-unset-flag-plugged ((folder elmo-imap4-folder)
                                                    numbers flag)
@@ -2583,10 +2590,14 @@ If optional argument REMOVE is non-nil, remove FLAG."
                                  (and (memq 'answered flags)
                                       '("\\Answered")))
                                 " ")
+                               ;; XX KEYWORD flags
                                ") ")
                      " () ")
                    (elmo-imap4-buffer-literal send-buffer))))
          (kill-buffer send-buffer))
+       (when result
+         (elmo-folder-preserve-flags
+          folder (elmo-msgdb-get-message-id-from-buffer) flags))
        result)
     ;; Unplugged
     (if elmo-enable-disconnected-operation
@@ -2684,6 +2695,7 @@ If optional argument REMOVE is non-nil, remove FLAG."
        (with-current-buffer outbuf
          (erase-buffer)
          (insert response)
+         (elmo-delete-cr-buffer)
          t))))
 
 (luna-define-method elmo-message-fetch-plugged ((folder elmo-imap4-folder)