]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: maildir - Use index keywords only when saving mail
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 21 May 2018 11:31:58 +0000 (14:31 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 21 May 2018 11:46:48 +0000 (14:46 +0300)
This fixes mail attachment keywords to work with maildir too.

src/lib-storage/index/maildir/maildir-save.c

index e756705fa72bffaa5fd0b127691dc5d6e059afc4..3aac4f772fd7140378c618599d719d41ed19ee39 100644 (file)
@@ -175,11 +175,6 @@ maildir_save_add(struct mail_save_context *_ctx, const char *tmp_fname,
        ctx->files_tail = &mf->next;
        ctx->files_count++;
 
-       if (mdata->keywords != NULL) {
-               p_array_init(&mf->keywords, ctx->pool, keyword_count);
-               array_append(&mf->keywords, mdata->keywords->idx, keyword_count);
-               ctx->have_keywords = TRUE;
-       }
        if (mdata->pop3_uidl != NULL)
                mf->pop3_uidl = p_strdup(ctx->pool, mdata->pop3_uidl);
        mf->pop3_order = mdata->pop3_order;
@@ -556,6 +551,20 @@ static int maildir_save_finish_real(struct mail_save_context *_ctx)
        output_errstr = t_strdup(o_stream_get_error(_ctx->data.output));
        o_stream_destroy(&_ctx->data.output);
 
+       ARRAY_TYPE(keyword_indexes) keyword_idx;
+       t_array_init(&keyword_idx, 8);
+       mail_index_lookup_keywords(ctx->ctx.transaction->view, ctx->seq,
+                                  &keyword_idx);
+
+       if (array_count(&keyword_idx) > 0) {
+               /* copy keywords */
+               p_array_init(&ctx->file_last->keywords, ctx->pool,
+                            array_count(&keyword_idx));
+               array_copy(&ctx->file_last->keywords.arr, 0, &keyword_idx.arr, 0,
+                          array_count(&keyword_idx));
+               ctx->have_keywords = TRUE;
+       }
+
        if (storage->set->parsed_fsync_mode != FSYNC_MODE_NEVER &&
            !ctx->failed) {
                if (fsync(ctx->fd) < 0) {