changeset 12598:360af3cc616b

imapc: Fixed mail_set_seq/uid() to work.
author Timo Sirainen <tss@iki.fi>
date Mon, 24 Jan 2011 00:42:06 +0200
parents a349c50cddaa
children 513e6e0b27ed
files src/lib-storage/index/imapc/imapc-mail.c src/lib-storage/index/imapc/imapc-search.c src/lib-storage/index/imapc/imapc-storage.h
diffstat 3 files changed, 41 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mail.c	Mon Jan 24 00:31:05 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail.c	Mon Jan 24 00:42:06 2011 +0200
@@ -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 @@
 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,
--- a/src/lib-storage/index/imapc/imapc-search.c	Mon Jan 24 00:31:05 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-search.c	Mon Jan 24 00:42:06 2011 +0200
@@ -12,30 +12,20 @@
 #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 @@
 
 	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 @@
 				  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;
 }
 
--- a/src/lib-storage/index/imapc/imapc-storage.h	Mon Jan 24 00:31:05 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.h	Mon Jan 24 00:42:06 2011 +0200
@@ -73,6 +73,7 @@
 					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,