virtual-save.c revision 18a41cbd38f83429b790414c1159c097af4a59b8
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2009-2014 Dovecot authors, see the included COPYING file */
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainenvirtual_save_alloc(struct mailbox_transaction_context *_t)
dac0b2e5e0f38c6d95ef1a842d891480db580236Timo Sirainen struct virtual_mailbox *mbox = (struct virtual_mailbox *)_t->box;
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen struct mailbox_transaction_context *backend_trans;
717a444a466280a84a468220f647fdcb9f3b546fTimo Sirainen ctx = (struct virtual_save_context *)_t->save_ctx;
08f24237ccc177f5b3a09b24d8a725fa47e1ee32Timo Sirainen errstr = mailbox_get_last_error(mbox->save_bbox->box,
797de45dcf6e24642ab347d5033beb92034b779dTimo Sirainen virtual_transaction_get(_t, mbox->save_bbox->box);
720692523ece4a549f7c589508d5693ee310f6b3Timo Sirainen ctx->backend_save_ctx = mailbox_save_alloc(backend_trans);
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen const char *const *kwp;
8d59f06c9422fa49b538e23ffb06eddb23c6add2Timo Sirainen unsigned int i;
8d59f06c9422fa49b538e23ffb06eddb23c6add2Timo Sirainen if (src_keywords == NULL || src_keywords->count == 0)
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen t_array_init(&kw_strings, src_keywords->count + 1);
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen mailbox_get_open_status(src_box, STATUS_KEYWORDS, &status);
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen kwp = array_idx(status.keywords, src_keywords->idx[i]);
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen return mailbox_keywords_create_valid(dest_box,
49b6e2d72cfaa5c244c798ddbae5b61489b0f728Timo Sirainenint virtual_save_begin(struct mail_save_context *_ctx, struct istream *input)
49b6e2d72cfaa5c244c798ddbae5b61489b0f728Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen (struct virtual_mailbox *)_ctx->transaction->box;
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen /* mailbox_open() failed */
193f5296d2a6b847970c222d8a261b89aae46331Timo Sirainen mail_storage_set_error(_ctx->transaction->box->storage,
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen mail_storage_set_error(_ctx->transaction->box->storage,
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen "Can't save messages to this virtual mailbox");
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen ctx->backend_box = ctx->backend_save_ctx->transaction->box;
efe78d3ba24fc866af1c79b9223dc0809ba26cadStephan Bosch virtual_copy_keywords(_ctx->transaction->box, mdata->keywords,
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen mailbox_save_set_received_date(ctx->backend_save_ctx,
4d4cd9cde9e01d4ad9354e6e30ac2f90d13042b2Timo Sirainen mailbox_save_set_from_envelope(ctx->backend_save_ctx,
4d4cd9cde9e01d4ad9354e6e30ac2f90d13042b2Timo Sirainen mailbox_save_set_guid(ctx->backend_save_ctx, mdata->guid);
debb28d107fa06d26fd194fdac523cfb32809199Timo Sirainen mailbox_save_set_min_modseq(ctx->backend_save_ctx, mdata->min_modseq);
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen mail = virtual_mail_set_backend_mail(_ctx->dest_mail,
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen mailbox_save_set_dest_mail(ctx->backend_save_ctx, mail);
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen return mailbox_save_begin(&ctx->backend_save_ctx, input);
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainenint virtual_save_continue(struct mail_save_context *_ctx)
35565557e05721a761132cec2ba1d93acacb6c14Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen return mailbox_save_continue(ctx->backend_save_ctx);
193f5296d2a6b847970c222d8a261b89aae46331Timo Sirainenint virtual_save_finish(struct mail_save_context *_ctx)
c014f12e8268bf37ca2997e632ad7c22b8d04a84Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen if (mailbox_save_finish(&ctx->backend_save_ctx) < 0)
efe78d3ba24fc866af1c79b9223dc0809ba26cadStephan Boschvoid virtual_save_cancel(struct mail_save_context *_ctx)
745f2c7424d88e368eff0a3a7650b352a9d1f0ddTimo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
f2767c736d72e6aa9a2aae5d0a9b89abae9e29e9Timo Sirainenvoid virtual_save_free(struct mail_save_context *_ctx)
f2767c736d72e6aa9a2aae5d0a9b89abae9e29e9Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;