time_t date;
int tz_offset;
bool have_tz_offset;
+ uint8_t guid[MAIL_GUID_128_SIZE];
switch (arg->type) {
/* internal dates */
if (strcasecmp(str, "INBOX") == 0)
return strcasecmp(arg->value.str, "INBOX") == 0;
return strcmp(str, arg->value.str) == 0;
+ case SEARCH_MAILBOX_GUID:
+ if (mailbox_get_guid(ctx->mail->box, guid) < 0)
+ return -1;
+
+ return strcmp(mail_guid_128_to_string(guid),
+ arg->value.str) == 0;
case SEARCH_MAILBOX_GLOB:
if (mail_get_special(ctx->mail, MAIL_FETCH_MAILBOX_NAME,
&str) < 0)
case SEARCH_TEXT_FAST:
case SEARCH_GUID:
case SEARCH_MAILBOX:
+ case SEARCH_MAILBOX_GUID:
case SEARCH_MAILBOX_GLOB:
return TRUE;
}
return mail_search_build_str(ctx, SEARCH_MAILBOX_GLOB);
}
+static struct mail_search_arg *
+human_search_mailbox_guid(struct mail_search_build_context *ctx)
+{
+ return mail_search_build_str(ctx, SEARCH_MAILBOX_GUID);
+}
+
static const struct mail_search_register_arg human_register_args[] = {
{ "OR", human_search_or },
/* Other Dovecot extensions: */
{ "GUID", human_search_guid },
- { "MAILBOX", human_search_mailbox }
+ { "MAILBOX", human_search_mailbox },
+ { "MAILBOX-GUID", human_search_mailbox_guid }
};
struct mail_search_register *
case SEARCH_TEXT_FAST:
case SEARCH_GUID:
case SEARCH_MAILBOX:
+ case SEARCH_MAILBOX_GUID:
case SEARCH_MAILBOX_GLOB:
new_arg->value.str = p_strdup(pool, arg->value.str);
break;
case SEARCH_TEXT_FAST:
case SEARCH_GUID:
case SEARCH_MAILBOX:
+ case SEARCH_MAILBOX_GUID:
case SEARCH_MAILBOX_GLOB:
/* don't bother doing case-insensitive comparison. it must not
be done for guid/mailbox, and for others we should support
SEARCH_INTHREAD,
SEARCH_GUID,
SEARCH_MAILBOX,
+ SEARCH_MAILBOX_GUID,
SEARCH_MAILBOX_GLOB
};