]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add mailbox_keywords_merge()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 14 Mar 2019 16:58:14 +0000 (18:58 +0200)
committerMartti Rannanjärvi <martti.rannanjarvi@open-xchange.com>
Wed, 25 Sep 2019 08:25:20 +0000 (11:25 +0300)
src/lib-storage/mail-storage.h
src/lib-storage/mailbox-keywords.c

index 2fb36acdb91bb4b8039a3d2865293107b1803e57..d901b6778b0baff33931173b7a7b44e174158ec8 100644 (file)
@@ -772,6 +772,10 @@ mailbox_keywords_create_valid(struct mailbox *box,
 struct mail_keywords *
 mailbox_keywords_create_from_indexes(struct mailbox *box,
                                     const ARRAY_TYPE(keyword_indexes) *idx);
+/* Return union of two mail_keywords. They must be created in the same
+   mailbox. */
+struct mail_keywords *mailbox_keywords_merge(struct mail_keywords *keywords1,
+                                            struct mail_keywords *keywords2);
 void mailbox_keywords_ref(struct mail_keywords *keywords);
 void mailbox_keywords_unref(struct mail_keywords **keywords);
 /* Returns TRUE if keyword is valid, FALSE and error if not. */
index dce4ae4dac46f7979d24096459b33a311790b56a..78e85291e0b7d4d5b0e0ff20b45bc72b95a3cd1e 100644 (file)
@@ -84,6 +84,21 @@ mailbox_keywords_create_from_indexes(struct mailbox *box,
        return mail_index_keywords_create_from_indexes(box->index, idx);
 }
 
+struct mail_keywords *mailbox_keywords_merge(struct mail_keywords *keywords1,
+                                            struct mail_keywords *keywords2)
+{
+       ARRAY_TYPE(keyword_indexes) keywords_merged;
+
+       i_assert(keywords1->index == keywords2->index);
+
+       t_array_init(&keywords_merged, keywords1->count + keywords2->count);
+       /* duplicates are dropped by mail_index_keywords_create() */
+       array_append(&keywords_merged, keywords1->idx, keywords1->count);
+       array_append(&keywords_merged, keywords2->idx, keywords2->count);
+       return mail_index_keywords_create_from_indexes(keywords1->index,
+                                                      &keywords_merged);
+}
+
 void mailbox_keywords_ref(struct mail_keywords *keywords)
 {
        mail_index_keywords_ref(keywords);