[evolution-data-server] Bug #529743 - Add "Any header" filter and search folder condition
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug #529743 - Add "Any header" filter and search folder condition
- Date: Mon, 3 Dec 2012 12:27:57 +0000 (UTC)
commit db51f791e18b5f30b0da4a6a91042afb49b53840
Author: Milan Crha <mcrha redhat com>
Date: Mon Dec 3 13:27:33 2012 +0100
Bug #529743 - Add "Any header" filter and search folder condition
camel/camel-filter-search.c | 33 +++++++++++++++++++++++++++++----
camel/camel-folder-search.c | 8 +++++---
2 files changed, 34 insertions(+), 7 deletions(-)
---
diff --git a/camel/camel-filter-search.c b/camel/camel-filter-search.c
index 0c5e3ad..6366437 100644
--- a/camel/camel-filter-search.c
+++ b/camel/camel-filter-search.c
@@ -171,15 +171,39 @@ check_header_in_message_info (CamelMessageInfo *info,
name = argv[0]->value.string;
g_return_val_if_fail (name != NULL, FALSE);
+ /* test against any header */
+ if (!*name) {
+ gint jj;
+
+ for (jj = 0; jj < G_N_ELEMENTS (known_headers); jj++) {
+ value = camel_message_info_ptr (info, known_headers[jj].info_key);
+ if (!value)
+ continue;
+
+ if (known_headers[jj].info_key == CAMEL_MESSAGE_INFO_SUBJECT)
+ type = CAMEL_SEARCH_TYPE_ENCODED;
+ else
+ type = CAMEL_SEARCH_TYPE_ADDRESS_ENCODED;
+
+ for (ii = 1; ii < argc && !*matched; ii++) {
+ if (argv[ii]->type == CAMEL_SEXP_RES_STRING)
+ *matched = camel_search_header_match (value, argv[ii]->value.string, how, type, NULL);
+ }
+
+ if (*matched)
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
value = NULL;
for (ii = 0; ii < G_N_ELEMENTS (known_headers); ii++) {
found = g_ascii_strcasecmp (name, known_headers[ii].header_name) == 0;
if (found) {
value = camel_message_info_ptr (info, known_headers[ii].info_key);
- if (known_headers[ii].info_key == CAMEL_MESSAGE_INFO_FROM ||
- known_headers[ii].info_key == CAMEL_MESSAGE_INFO_TO ||
- known_headers[ii].info_key == CAMEL_MESSAGE_INFO_CC)
+ if (known_headers[ii].info_key != CAMEL_MESSAGE_INFO_SUBJECT)
type = CAMEL_SEARCH_TYPE_ADDRESS_ENCODED;
break;
}
@@ -246,7 +270,8 @@ check_header (struct _CamelSExp *f,
}
for (header = mime_part->headers; header && !matched; header = header->next) {
- if (!g_ascii_strcasecmp (header->name, name)) {
+ /* empty name means any header */
+ if (!name || !*name || !g_ascii_strcasecmp (header->name, name)) {
for (i = 1; i < argc && !matched; i++) {
if (argv[i]->type == CAMEL_SEXP_RES_STRING)
matched = camel_search_header_match (header->value, argv[i]->value.string, how, type, charset);
diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c
index 0c78be1..6ef7f98 100644
--- a/camel/camel-folder-search.c
+++ b/camel/camel-folder-search.c
@@ -1119,9 +1119,10 @@ check_header (struct _CamelSExp *f,
for (j = 0; j < words->len && truth; j++) {
if (message) {
for (raw_header = ((CamelMimePart *) message)->headers; raw_header; raw_header = raw_header->next) {
- if (!g_ascii_strcasecmp (raw_header->name, headername)) {
+ /* empty name means any header */
+ if (!headername || !*headername || !g_ascii_strcasecmp (raw_header->name, headername)) {
if (camel_search_header_match (raw_header->value, words->words[j]->word, how, type, charset))
- break;;
+ break;
}
}
@@ -1133,7 +1134,8 @@ check_header (struct _CamelSExp *f,
} else {
if (message) {
for (raw_header = ((CamelMimePart *) message)->headers; raw_header && !truth; raw_header = raw_header->next) {
- if (!g_ascii_strcasecmp (raw_header->name, headername)) {
+ /* empty name means any header */
+ if (!headername || !*headername || !g_ascii_strcasecmp (raw_header->name, headername)) {
truth = camel_search_header_match (raw_header->value, argv[i]->value.string, how, type, charset);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]