virtual-save.c revision 0eef579fa2714c8b6b6bc2e54c545d291e657f8f
89a126810703c666309310d0f3189e9834d70b5bTimo Sirainen/* Copyright (c) 2009-2015 Dovecot authors, see the included COPYING file */
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainenvirtual_save_alloc(struct mailbox_transaction_context *_t)
e0c3d5460d1cc0c440cb7723c8c2eef8d0afe9b9Timo Sirainen struct virtual_mailbox *mbox = (struct virtual_mailbox *)_t->box;
e0c3d5460d1cc0c440cb7723c8c2eef8d0afe9b9Timo Sirainen struct mailbox_transaction_context *backend_trans;
5ac0b0bf32898c63da086ae169674ecac151a31eTimo Sirainen ctx = (struct virtual_save_context *)_t->save_ctx;
5ac0b0bf32898c63da086ae169674ecac151a31eTimo Sirainen virtual_backend_box_open(mbox, mbox->save_bbox) < 0) {
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen errstr = mailbox_get_last_error(mbox->save_bbox->box,
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen virtual_transaction_get(_t, mbox->save_bbox->box);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen ctx->backend_save_ctx = mailbox_save_alloc(backend_trans);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen virtual_backend_box_accessed(mbox, mbox->save_bbox);
252db51b6c0a605163326b3ea5d09e9936ca3b29Timo Sirainen const char *const *kwp;
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen unsigned int i;
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen if (src_keywords == NULL || src_keywords->count == 0)
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen t_array_init(&kw_strings, src_keywords->count + 1);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen mailbox_get_open_status(src_box, STATUS_KEYWORDS, &status);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen kwp = array_idx(status.keywords, src_keywords->idx[i]);
20344c0e814139e3c365fbb9287478f91512089eTimo Sirainen return mailbox_keywords_create_valid(dest_box,
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainenint virtual_save_begin(struct mail_save_context *_ctx, struct istream *input)
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen (struct virtual_mailbox *)_ctx->transaction->box;
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen /* mailbox_open() failed */
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen mail_storage_set_error(_ctx->transaction->box->storage,
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen mail_storage_set_error(_ctx->transaction->box->storage,
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen "Can't save messages to this virtual mailbox");
601f5f14c6cde28f0e0c6ca7c5d735315d3d48dfTimo Sirainen ctx->backend_box = ctx->backend_save_ctx->transaction->box;
601f5f14c6cde28f0e0c6ca7c5d735315d3d48dfTimo Sirainen virtual_copy_keywords(_ctx->transaction->box, mdata->keywords,
602a0434db30d8e3292d1c161a803d96a879a74fTimo Sirainen mailbox_save_set_received_date(ctx->backend_save_ctx,
602a0434db30d8e3292d1c161a803d96a879a74fTimo Sirainen mailbox_save_set_from_envelope(ctx->backend_save_ctx,
602a0434db30d8e3292d1c161a803d96a879a74fTimo Sirainen mailbox_save_set_guid(ctx->backend_save_ctx, mdata->guid);
c9bf63e9094761767a63ac6b189bcf60bcffdc44Timo Sirainen mailbox_save_set_min_modseq(ctx->backend_save_ctx, mdata->min_modseq);
602a0434db30d8e3292d1c161a803d96a879a74fTimo Sirainen mail = virtual_mail_set_backend_mail(_ctx->dest_mail,
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen mailbox_save_set_dest_mail(ctx->backend_save_ctx, mail);
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainen return mailbox_save_begin(&ctx->backend_save_ctx, input);
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainenint virtual_save_continue(struct mail_save_context *_ctx)
c9bf63e9094761767a63ac6b189bcf60bcffdc44Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
c9bf63e9094761767a63ac6b189bcf60bcffdc44Timo Sirainen return mailbox_save_continue(ctx->backend_save_ctx);
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainenint virtual_save_finish(struct mail_save_context *_ctx)
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainen if (mailbox_save_finish(&ctx->backend_save_ctx) < 0)
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainenvoid virtual_save_cancel(struct mail_save_context *_ctx)
7e1f68ad71d3485f1882142837b01f7a98ca8467Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
e0c3d5460d1cc0c440cb7723c8c2eef8d0afe9b9Timo Sirainenvoid virtual_save_free(struct mail_save_context *_ctx)
e0c3d5460d1cc0c440cb7723c8c2eef8d0afe9b9Timo Sirainen struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;