]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Fixed mail_set_seq/uid() to work.
authorTimo Sirainen <tss@iki.fi>
Sun, 23 Jan 2011 22:42:06 +0000 (00:42 +0200)
committerTimo Sirainen <tss@iki.fi>
Sun, 23 Jan 2011 22:42:06 +0000 (00:42 +0200)
src/lib-storage/index/imapc/imapc-mail.c
src/lib-storage/index/imapc/imapc-search.c
src/lib-storage/index/imapc/imapc-storage.h

index 5eb016e08509abbbd384b3a0ff046819caec209a..6407343f196b149fe843e50ba5351de00a805c79 100644 (file)
@@ -1,10 +1,26 @@
 /* Copyright (c) 2011 Dovecot authors, see the included COPYING file */
 
 #include "lib.h"
+#include "str.h"
 #include "istream.h"
 #include "index-mail.h"
+#include "imapc-client.h"
 #include "imapc-storage.h"
 
+static void imapc_mail_set_seq(struct mail *_mail, uint32_t seq)
+{
+       index_mail_set_seq(_mail, seq);
+       imapc_mail_fetch(_mail);
+}
+
+static bool imapc_mail_set_uid(struct mail *_mail, uint32_t uid)
+{
+       if (!index_mail_set_uid(_mail, uid))
+               return FALSE;
+       imapc_mail_fetch(_mail);
+       return TRUE;
+}
+
 static int imapc_mail_get_received_date(struct mail *_mail, time_t *date_r)
 {
        struct index_mail *mail = (struct index_mail *)_mail;
@@ -54,8 +70,8 @@ imapc_mail_get_stream(struct mail *_mail, struct message_size *hdr_size,
 struct mail_vfuncs imapc_mail_vfuncs = {
        index_mail_close,
        index_mail_free,
-       index_mail_set_seq,
-       index_mail_set_uid,
+       imapc_mail_set_seq,
+       imapc_mail_set_uid,
        index_mail_set_uid_cache_updates,
 
        index_mail_get_flags,
index 03d2c70ea80e555b63d4d48104cd3a73a95bdd34..c72ce49395a332f03af508d5c2b8fbc1eafd2f58 100644 (file)
 #include "imapc-client.h"
 #include "imapc-storage.h"
 
-struct mail_search_context *
-imapc_search_init(struct mailbox_transaction_context *t,
-                 struct mail_search_args *args,
-                 const enum mail_sort_type *sort_program)
-{
-       return index_storage_search_init(t, args, sort_program);
-}
-
-bool imapc_search_next_nonblock(struct mail_search_context *_ctx,
-                               struct mail *mail, bool *tryagain_r)
+void imapc_mail_fetch(struct mail *mail)
 {
        struct mail_private *pmail = (struct mail_private *)mail;
        struct imapc_mailbox *mbox = (struct imapc_mailbox *)mail->box;
        string_t *str;
        unsigned int orig_len;
 
-       if (!index_storage_search_next_nonblock(_ctx, mail, tryagain_r))
-               return FALSE;
-
        str = t_str_new(64);
        str_printfa(str, "UID FETCH %u (", mail->uid);
        orig_len = str_len(str);
 
-       if ((pmail->wanted_fields & (MAIL_FETCH_MESSAGE_PARTS |
+       if ((pmail->wanted_fields & (MAIL_FETCH_STREAM_HEADER |
+                                    MAIL_FETCH_STREAM_BODY |
+                                    MAIL_FETCH_MESSAGE_PARTS |
                                     MAIL_FETCH_NUL_STATE |
                                     MAIL_FETCH_IMAP_BODY |
                                     MAIL_FETCH_IMAP_BODYSTRUCTURE |
@@ -53,7 +43,7 @@ bool imapc_search_next_nonblock(struct mail_search_context *_ctx,
 
        if (str_len(str) == orig_len) {
                /* we don't need to fetch anything */
-               return TRUE;
+               return;
        }
 
        str_truncate(str, str_len(str) - 1);
@@ -64,6 +54,23 @@ bool imapc_search_next_nonblock(struct mail_search_context *_ctx,
                                  mbox->storage, "%1s", str_c(str));
        imapc_client_run(mbox->storage->client);
        mbox->cur_fetch_mail = NULL;
+}
+
+struct mail_search_context *
+imapc_search_init(struct mailbox_transaction_context *t,
+                 struct mail_search_args *args,
+                 const enum mail_sort_type *sort_program)
+{
+       return index_storage_search_init(t, args, sort_program);
+}
+
+bool imapc_search_next_nonblock(struct mail_search_context *_ctx,
+                               struct mail *mail, bool *tryagain_r)
+{
+       if (!index_storage_search_next_nonblock(_ctx, mail, tryagain_r))
+               return FALSE;
+
+       imapc_mail_fetch(mail);
        return TRUE;
 }
 
index 6a481cd91087196d102035eeba09d24deed1306a..8f8da6699a78b98785e942d4f803f41e9b259f34 100644 (file)
@@ -73,6 +73,7 @@ void imapc_transaction_save_commit_post(struct mail_save_context *ctx,
                                        struct mail_index_transaction_commit_result *result);
 void imapc_transaction_save_rollback(struct mail_save_context *ctx);
 
+void imapc_mail_fetch(struct mail *mail);
 struct mail_search_context *
 imapc_search_init(struct mailbox_transaction_context *t,
                  struct mail_search_args *args,