changeset 21542:ab3bec3c09a8

virtual: Fix saving to a virtual mailbox to work again Previous changes broke it.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 13 Feb 2017 20:23:49 +0200
parents 4026d71bfe18
children eea5b9a884f8
files src/plugins/virtual/virtual-mail.c src/plugins/virtual/virtual-save.c src/plugins/virtual/virtual-storage.h
diffstat 3 files changed, 16 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-mail.c	Thu Feb 09 17:18:51 2017 +0200
+++ b/src/plugins/virtual/virtual-mail.c	Mon Feb 13 20:23:49 2017 +0200
@@ -172,6 +172,18 @@
 	return vmail->cur_backend_mail;
 }
 
+void virtual_mail_set_unattached_backend_mail(struct mail *mail,
+					      struct mail *backend_mail)
+{
+	struct virtual_mail *vmail = (struct virtual_mail *)mail;
+	struct mail_private *backend_pmail;
+
+	vmail->cur_backend_mail = backend_mail;
+
+	backend_pmail = (struct mail_private *)backend_mail;
+	backend_pmail->vmail = mail;
+}
+
 static void virtual_mail_set_seq(struct mail *mail, uint32_t seq, bool saving)
 {
 	struct virtual_mail *vmail = (struct virtual_mail *)mail;
--- a/src/plugins/virtual/virtual-save.c	Thu Feb 09 17:18:51 2017 +0200
+++ b/src/plugins/virtual/virtual-save.c	Mon Feb 13 20:23:49 2017 +0200
@@ -79,10 +79,7 @@
 int virtual_save_begin(struct mail_save_context *_ctx, struct istream *input)
 {
 	struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
-	struct virtual_mailbox *mbox =
-		(struct virtual_mailbox *)_ctx->transaction->box;
 	struct mail_save_data *mdata = &_ctx->data;
-	struct mail *mail;
 
 	if (ctx->backend_save_ctx == NULL) {
 		if (ctx->open_errstr != NULL) {
@@ -113,8 +110,8 @@
 	mailbox_save_set_guid(ctx->backend_save_ctx, mdata->guid);
 	mailbox_save_set_min_modseq(ctx->backend_save_ctx, mdata->min_modseq);
 
-	mail = virtual_mail_set_backend_mail(_ctx->dest_mail, mbox->save_bbox);
-	mailbox_save_set_dest_mail(ctx->backend_save_ctx, mail);
+	virtual_mail_set_unattached_backend_mail(_ctx->dest_mail,
+		ctx->backend_save_ctx->dest_mail);
 	return mailbox_save_begin(&ctx->backend_save_ctx, input);
 }
 
--- a/src/plugins/virtual/virtual-storage.h	Thu Feb 09 17:18:51 2017 +0200
+++ b/src/plugins/virtual/virtual-storage.h	Mon Feb 13 20:23:49 2017 +0200
@@ -195,6 +195,8 @@
 struct mail *
 virtual_mail_set_backend_mail(struct mail *mail,
 			      struct virtual_backend_box *bbox);
+void virtual_mail_set_unattached_backend_mail(struct mail *mail,
+					      struct mail *backend_mail);
 
 struct mailbox_sync_context *
 virtual_storage_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);