]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Add imap_search_anyset_to_uidset()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 29 Apr 2021 12:45:44 +0000 (15:45 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Wed, 5 May 2021 19:53:55 +0000 (19:53 +0000)
src/imap/imap-search-args.c
src/imap/imap-search-args.h

index 9aea1be897dcdbe187cf96f4943c3d2359e7b5e1..67e8679a265a2abf503f4179a402c32f946f4fe6 100644 (file)
@@ -173,6 +173,35 @@ int imap_search_get_seqset(struct client_command_context *cmd,
        return ret;
 }
 
+void imap_search_anyset_to_uidset(struct client_command_context *cmd,
+                                 struct mail_search_args *args)
+{
+       struct mail_search_arg *arg = args->args;
+
+       i_assert(arg->next == NULL);
+       switch (arg->type) {
+       case SEARCH_ALL:
+               if (arg->match_not)
+                       break;
+               t_array_init(&arg->value.seqset, 1);
+               seq_range_array_add_range(&arg->value.seqset, 1, (uint32_t)-1);
+               /* fall through */
+       case SEARCH_SEQSET: {
+               ARRAY_TYPE(seq_range) seqs = arg->value.seqset;
+
+               arg->type = SEARCH_UIDSET;
+               p_array_init(&arg->value.seqset, args->pool, 16);
+               mailbox_get_uid_range(cmd->client->mailbox, &seqs,
+                                     &arg->value.seqset);
+               break;
+       }
+       case SEARCH_UIDSET:
+               break;
+       default:
+               i_unreached();
+       }
+}
+
 static int imap_search_get_searchres(struct client_command_context *cmd,
                                     struct mail_search_args **search_args_r)
 {
index 53ace00fcf4d58e1f1af0ad697e3d1238329d99e..4bf6c4ce3e82fd4bb3a502cf5e103d6496e47efa 100644 (file)
@@ -24,6 +24,9 @@ int imap_search_get_anyset(struct client_command_context *cmd,
 int imap_search_get_seqset(struct client_command_context *cmd,
                           const char *set, bool uid,
                           struct mail_search_args **search_args_r);
+/* Convert search args returned by imap_search_get_anyset() to SEARCH_UIDSET. */
+void imap_search_anyset_to_uidset(struct client_command_context *cmd,
+                                 struct mail_search_args *args);
 
 void imap_search_add_changed_since(struct mail_search_args *search_args,
                                   uint64_t modseq);