struct mail_search_arg *or_arg, *orig_arg = *argp;
const char *error, *orig_token = orig_arg->value.str;
- languages = fts_user_get_all_languages(backend->ns->user);
+ if ((*argp)->type == SEARCH_HEADER &&
+ !fts_header_has_language((*argp)->hdr_field_name)) {
+ /* use only the data-language */
+ languages = fts_user_get_data_languages(backend->ns->user);
+ } else {
+ languages = fts_user_get_all_languages(backend->ns->user);
+ }
/* OR together all the different expansions for different languages.
it's enough for one of them to match. */
struct fts_language_list *lang_list;
struct fts_user_language *data_lang;
- ARRAY_TYPE(fts_user_language) languages;
+ ARRAY_TYPE(fts_user_language) languages, data_languages;
};
static MODULE_CONTEXT_DEFINE_INIT(fts_user_module,
&user_lang->filter, &error) < 0)
i_unreached();
i_assert(user_lang->filter != NULL);
+
+ p_array_init(&fuser->data_languages, user->pool, 1);
+ array_append(&fuser->data_languages, &user_lang, 1);
+
fuser->data_lang = user_lang;
return 0;
}
return &fuser->languages;
}
+const ARRAY_TYPE(fts_user_language) *
+fts_user_get_data_languages(struct mail_user *user)
+{
+ struct fts_user *fuser = FTS_USER_CONTEXT(user);
+
+ return &fuser->data_languages;
+}
+
struct fts_user_language *fts_user_get_data_lang(struct mail_user *user)
{
struct fts_user *fuser = FTS_USER_CONTEXT(user);
const ARRAY_TYPE(fts_user_language) *
fts_user_get_all_languages(struct mail_user *user);
struct fts_user_language *fts_user_get_data_lang(struct mail_user *user);
+const ARRAY_TYPE(fts_user_language) *
+fts_user_get_data_languages(struct mail_user *user);
int fts_mail_user_init(struct mail_user *user, const char **error_r);
void fts_mail_user_deinit(struct mail_user *user);