Add new quicksearch for header's content only
• The new “H S” filter searches for mail that contains string S in the content of any non-internal header. Based on patches¹² by H.Merijn Brand <h.m.brand@xs4all.nl>, with some reversion, refactoring, minor improvements and fixed typos. ¹ http://lists.claws-mail.org/pipermail/devel/2014-August/001257.html ² http://lists.claws-mail.org/pipermail/devel/2014-August/001258.html
This commit is contained in:
parent
9d30727d92
commit
b29a924ece
3
README
3
README
|
@ -393,7 +393,8 @@ http://www.claws-mail.org/plugins.php
|
|||
E S true if execute "S" succeeds
|
||||
f S messages originating from user S
|
||||
F forwarded messages
|
||||
h S messages which contain header S
|
||||
h S messages which contain S in any header name or value
|
||||
H S messages which contain S in the value of any header
|
||||
i S messages which contain S in Message-Id header
|
||||
I S messages which contain S in inreplyto header
|
||||
k # messages which are marked with color #
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 2012 the Claws Mail team
|
||||
* Copyright (C) 2012-2014 the Claws Mail team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -162,6 +162,7 @@ gchar *advsearch_expand_search_string(const gchar *search_string)
|
|||
{ "f", "from", 1, TRUE, TRUE },
|
||||
{ "F", "forwarded", 0, FALSE, FALSE },
|
||||
{ "h", "headers_part", 1, TRUE, TRUE },
|
||||
{ "H", "headers_cont", 1, TRUE, TRUE },
|
||||
{ "ha", "has_attachments", 0, FALSE, FALSE },
|
||||
{ "i", "header \"Message-ID\"", 1, TRUE, TRUE },
|
||||
{ "I", "inreplyto", 1, TRUE, TRUE },
|
||||
|
|
|
@ -463,7 +463,8 @@ static gchar *search_descr_strings[] = {
|
|||
"f S", N_("messages originating from user S"),
|
||||
"F", N_("forwarded messages"),
|
||||
"ha", N_("messages which have attachments"),
|
||||
"h S", N_("messages which contain header S"),
|
||||
"h S", N_("messages which contain S in any header name or value"),
|
||||
"H S", N_("messages which contain S in the value of any header"),
|
||||
"i S", N_("messages which contain S in Message-ID header"),
|
||||
"I S", N_("messages which contain S in In-Reply-To header"),
|
||||
"k #", N_("messages which are marked with color #"),
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
|
||||
* Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -2098,6 +2098,7 @@ static IMAPSearchKey* search_make_key(MatcherProp* match, gboolean* is_all)
|
|||
case MATCHCRITERIA_NOT_HEADER: invert = TRUE; matchertype = MATCHCRITERIA_HEADER; break;
|
||||
case MATCHCRITERIA_NOT_TAG: invert = TRUE; matchertype = MATCHCRITERIA_TAG; break;
|
||||
case MATCHCRITERIA_NOT_HEADERS_PART: invert = TRUE; matchertype = MATCHCRITERIA_HEADERS_PART; break;
|
||||
case MATCHCRITERIA_NOT_HEADERS_CONT: invert = TRUE; matchertype = MATCHCRITERIA_HEADERS_CONT; break;
|
||||
case MATCHCRITERIA_NOT_MESSAGE: invert = TRUE; matchertype = MATCHCRITERIA_MESSAGE; break;
|
||||
case MATCHCRITERIA_NOT_BODY_PART: invert = TRUE; matchertype = MATCHCRITERIA_BODY_PART; break;
|
||||
case MATCHCRITERIA_NOT_TO_AND_NOT_CC: invert = TRUE; matchertype = MATCHCRITERIA_TO_OR_CC; break;
|
||||
|
@ -2143,6 +2144,7 @@ static IMAPSearchKey* search_make_key(MatcherProp* match, gboolean* is_all)
|
|||
break;
|
||||
|
||||
case MATCHCRITERIA_HEADERS_PART:
|
||||
case MATCHCRITERIA_HEADERS_CONT:
|
||||
result = imap_search_and(
|
||||
imap_search_not(imap_search_new(IMAP_SEARCH_CRITERIA_BODY, NULL, match->expr, 0)),
|
||||
imap_search_new(IMAP_SEARCH_CRITERIA_MESSAGE, NULL, match->expr, 0)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 2002-2012 by the Claws Mail Team and Hiroyuki Yamamoto
|
||||
* Copyright (C) 2002-2014 by the Claws Mail Team and Hiroyuki Yamamoto
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -135,6 +135,8 @@ static const MatchParser matchparser_tab[] = {
|
|||
{MATCHCRITERIA_NOT_HEADER, "~header"},
|
||||
{MATCHCRITERIA_HEADERS_PART, "headers_part"},
|
||||
{MATCHCRITERIA_NOT_HEADERS_PART, "~headers_part"},
|
||||
{MATCHCRITERIA_HEADERS_CONT, "headers_cont"},
|
||||
{MATCHCRITERIA_NOT_HEADERS_CONT, "~headers_cont"},
|
||||
{MATCHCRITERIA_MESSAGE, "message"},
|
||||
{MATCHCRITERIA_NOT_MESSAGE, "~message"},
|
||||
{MATCHCRITERIA_BODY_PART, "body_part"},
|
||||
|
@ -620,18 +622,32 @@ const gchar *debug_context)
|
|||
}
|
||||
|
||||
static gboolean matcherprop_header_line_match(MatcherProp *prop, const gchar *hdr,
|
||||
const gchar *str, const gchar *debug_context)
|
||||
const gchar *str, const gboolean both,
|
||||
const gchar *debug_context)
|
||||
{
|
||||
gchar *line = NULL;
|
||||
gboolean res = FALSE;
|
||||
|
||||
if (hdr == NULL || str == NULL)
|
||||
return FALSE;
|
||||
|
||||
line = g_strdup_printf("%s %s", hdr, str);
|
||||
res = matcherprop_string_match(prop, line, debug_context);
|
||||
g_free(line);
|
||||
|
||||
if (both) {
|
||||
/* Search in all header names and content.
|
||||
*/
|
||||
gchar *line = g_strdup_printf("%s %s", hdr, str);
|
||||
res = matcherprop_string_match(prop, line, debug_context);
|
||||
g_free(line);
|
||||
} else {
|
||||
/* Search only in content and exclude private headers.
|
||||
* E.g.: searching for "H foo" in folder x/foo would return
|
||||
* *all* mail as SCF and RMID will match.
|
||||
* Searching for "H sent" would return all resent messages
|
||||
* as "Resent-From: whatever" will match.
|
||||
*/
|
||||
if (procheader_header_is_internal(hdr))
|
||||
return FALSE;
|
||||
res = matcherprop_string_match(prop, str, debug_context);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -1305,21 +1321,27 @@ static gboolean matcherprop_match_one_header(MatcherProp *matcher,
|
|||
}
|
||||
break;
|
||||
case MATCHCRITERIA_HEADERS_PART:
|
||||
case MATCHCRITERIA_HEADERS_CONT:
|
||||
case MATCHCRITERIA_MESSAGE:
|
||||
header = procheader_parse_header(buf);
|
||||
if (!header)
|
||||
return FALSE;
|
||||
result = matcherprop_header_line_match(matcher,
|
||||
header->name, header->body, context_str[CONTEXT_HEADER_LINE]);
|
||||
header->name, header->body,
|
||||
(matcher->criteria == MATCHCRITERIA_HEADERS_PART),
|
||||
context_str[CONTEXT_HEADER_LINE]);
|
||||
procheader_header_free(header);
|
||||
return result;
|
||||
case MATCHCRITERIA_NOT_HEADERS_CONT:
|
||||
case MATCHCRITERIA_NOT_HEADERS_PART:
|
||||
case MATCHCRITERIA_NOT_MESSAGE:
|
||||
header = procheader_parse_header(buf);
|
||||
if (!header)
|
||||
return FALSE;
|
||||
result = !matcherprop_header_line_match(matcher,
|
||||
header->name, header->body, context_str[CONTEXT_HEADER_LINE]);
|
||||
header->name, header->body,
|
||||
(matcher->criteria == MATCHCRITERIA_NOT_HEADERS_PART),
|
||||
context_str[CONTEXT_HEADER_LINE]);
|
||||
procheader_header_free(header);
|
||||
return result;
|
||||
case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
|
||||
|
@ -1391,7 +1413,9 @@ static gboolean matcherprop_criteria_headers(const MatcherProp *matcher)
|
|||
case MATCHCRITERIA_HEADER:
|
||||
case MATCHCRITERIA_NOT_HEADER:
|
||||
case MATCHCRITERIA_HEADERS_PART:
|
||||
case MATCHCRITERIA_HEADERS_CONT:
|
||||
case MATCHCRITERIA_NOT_HEADERS_PART:
|
||||
case MATCHCRITERIA_NOT_HEADERS_CONT:
|
||||
case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
|
||||
case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
|
||||
return TRUE;
|
||||
|
@ -1446,6 +1470,7 @@ static gboolean matcherlist_match_headers(MatcherList *matchers, FILE *fp)
|
|||
|
||||
/* determine the match range (all, any are our concern here) */
|
||||
if (matcher->criteria == MATCHCRITERIA_NOT_HEADERS_PART ||
|
||||
matcher->criteria == MATCHCRITERIA_NOT_HEADERS_CONT ||
|
||||
matcher->criteria == MATCHCRITERIA_NOT_MESSAGE) {
|
||||
match = MATCH_ALL;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 2002-2012 by the Claws Mail Team and Hiroyuki Yamamoto
|
||||
* Copyright (C) 2002-2014 by the Claws Mail Team and Hiroyuki Yamamoto
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -96,6 +96,7 @@ enum {
|
|||
MC_(SCORE_GREATER), MC_(SCORE_LOWER),
|
||||
MC_(HEADER), MC_(NOT_HEADER),
|
||||
MC_(HEADERS_PART), MC_(NOT_HEADERS_PART),
|
||||
MC_(HEADERS_CONT), MC_(NOT_HEADERS_CONT),
|
||||
MC_(MESSAGE), MC_(NOT_MESSAGE),
|
||||
MC_(BODY_PART), MC_(NOT_BODY_PART),
|
||||
MC_(TEST), MC_(NOT_TEST),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
%{
|
||||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (c) 2001-2007 by Hiroyuki Yamamoto & The Claws Mail Team
|
||||
* Copyright (c) 2001-2014 by Hiroyuki Yamamoto & The Claws Mail Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -324,6 +324,7 @@ int matcher_parserwrap(void)
|
|||
%token MATCHER_REFERENCES MATCHER_NOT_REFERENCES MATCHER_SCORE_GREATER
|
||||
%token MATCHER_SCORE_LOWER MATCHER_HEADER MATCHER_NOT_HEADER
|
||||
%token MATCHER_HEADERS_PART MATCHER_NOT_HEADERS_PART MATCHER_MESSAGE
|
||||
%token MATCHER_HEADERS_CONT MATCHER_NOT_HEADERS_CONT
|
||||
%token MATCHER_NOT_MESSAGE MATCHER_BODY_PART MATCHER_NOT_BODY_PART
|
||||
%token MATCHER_TEST MATCHER_NOT_TEST MATCHER_MATCHCASE MATCHER_MATCH
|
||||
%token MATCHER_REGEXPCASE MATCHER_REGEXP MATCHER_SCORE MATCHER_MOVE
|
||||
|
@ -1121,6 +1122,24 @@ MATCHER_ALL
|
|||
expr = $3;
|
||||
prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
|
||||
}
|
||||
| MATCHER_HEADERS_CONT match_type MATCHER_STRING
|
||||
{
|
||||
gint criteria = 0;
|
||||
gchar *expr = NULL;
|
||||
matcher_is_fast = FALSE;
|
||||
criteria = MATCHCRITERIA_HEADERS_CONT;
|
||||
expr = $3;
|
||||
prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
|
||||
}
|
||||
| MATCHER_NOT_HEADERS_CONT match_type MATCHER_STRING
|
||||
{
|
||||
gint criteria = 0;
|
||||
gchar *expr = NULL;
|
||||
matcher_is_fast = FALSE;
|
||||
criteria = MATCHCRITERIA_NOT_HEADERS_CONT;
|
||||
expr = $3;
|
||||
prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
|
||||
}
|
||||
| MATCHER_FOUND_IN_ADDRESSBOOK MATCHER_STRING
|
||||
{
|
||||
header = g_strdup($2);
|
||||
|
|
|
@ -244,11 +244,12 @@ Filename -- should not be modified
|
|||
=item regexpcase WHERE WHAT
|
||||
|
||||
The matching functions have a special syntax. The first argument
|
||||
is either any of to_or_cc, body_part, headers_part, message, to,
|
||||
from, subject, cc, newsgroups, inreplyto, references, or tag (those
|
||||
strings may or may not be quoted), the patter matching works on
|
||||
that area. If it is any other string (which must then be quoted),
|
||||
this string is taken to be the name of a header field.
|
||||
is either any of to_or_cc, body_part, headers_part, headers_cont,
|
||||
message, to, from, subject, cc, newsgroups, inreplyto,
|
||||
references, or tag (those strings may or may not be quoted), the
|
||||
pattern matching works on that area. If it is any other string
|
||||
(which must then be quoted), this string is taken to be the name
|
||||
of a header field.
|
||||
|
||||
The second argument is the string to look for. For match,
|
||||
matchcase, regexp and regexpcase we have case sensitive normal
|
||||
|
|
|
@ -1708,7 +1708,7 @@ static int perl_init(void)
|
|||
" qw(forwarded locked colorlabel match matchcase),\n"
|
||||
" qw(regexp regexpcase test),\n"
|
||||
" qw(to cc subject from to_or_cc newsgroups inreplyto),\n"
|
||||
" qw(references body_part headers_part message),\n"
|
||||
" qw(references body_part headers_part headers_cont message),\n"
|
||||
" qw(size_greater size_smaller size_equal),\n"
|
||||
" qw(score_greater score_lower score_equal),\n"
|
||||
" qw(age_greater age_lower partial tagged $permanent));\n"
|
||||
|
@ -1737,6 +1737,7 @@ static int perl_init(void)
|
|||
"sub references { return \"references\"; }\n"
|
||||
"sub body_part { return \"body_part\"; }\n"
|
||||
"sub headers_part { return \"headers_part\"; }\n"
|
||||
"sub headers_cont { return \"headers_cont\"; }\n"
|
||||
"sub message { return \"message\"; }\n"
|
||||
"# access the mail directly\n"
|
||||
"sub header {\n"
|
||||
|
@ -1994,6 +1995,16 @@ static int perl_init(void)
|
|||
" return ($myheader =~ m/$what/) unless $nocase;\n"
|
||||
" return ($myheader =~ m/$what/i);\n"
|
||||
" }\n"
|
||||
" } elsif($where eq \"headers_cont\") {\n"
|
||||
" (my $myheader = header_as_string_()) =~ s{^\\S+:\\s*}{};\n"
|
||||
" if(not $regexp) {\n"
|
||||
" $myheader =~ s/\\s+/ /g;\n"
|
||||
" return (index($myheader,$what) != -1) unless $nocase;\n"
|
||||
" return (index(lc2_($myheader),lc2_($what)) != -1);\n"
|
||||
" } else {\n"
|
||||
" return ($myheader =~ m/$what/) unless $nocase;\n"
|
||||
" return ($myheader =~ m/$what/i);\n"
|
||||
" }\n"
|
||||
" } elsif($where eq \"message\") {\n"
|
||||
" my $message = header_as_string_();\n"
|
||||
" $message .= \"\\n\".body();\n"
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# intended to get you started. If you choose to use the Perl plugin,
|
||||
# consider rewriting your rules.
|
||||
#
|
||||
# Copyright (C) 2004 Holger Berndt
|
||||
# Copyright (C) 2004-2014 Holger Berndt
|
||||
#
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
|
@ -128,6 +128,7 @@ sub convert {
|
|||
$token eq "inreplyto" or
|
||||
$token eq "references" or
|
||||
$token eq "headers_part" or
|
||||
$token eq "headers_cont" or
|
||||
$token eq "body_part" or
|
||||
$token eq "message") {
|
||||
my $match = shift;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
|
||||
* Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -186,7 +186,9 @@ enum {
|
|||
CRITERIA_SIGNED = 38,
|
||||
|
||||
CRITERIA_AGE_GREATER_HOURS = 39,
|
||||
CRITERIA_AGE_LOWER_HOURS = 40
|
||||
CRITERIA_AGE_LOWER_HOURS = 40,
|
||||
|
||||
CRITERIA_HEADERS_CONT = 41
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -379,6 +381,7 @@ static void prefs_matcher_models_create(void)
|
|||
|
||||
store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
|
||||
COMBOBOX_ADD(store, _("headers part"), CRITERIA_HEADERS_PART);
|
||||
COMBOBOX_ADD(store, _("headers values"), CRITERIA_HEADERS_CONT);
|
||||
COMBOBOX_ADD(store, _("body part"), CRITERIA_BODY_PART);
|
||||
COMBOBOX_ADD(store, _("whole message"), CRITERIA_MESSAGE);
|
||||
matcher.model_phrase = GTK_TREE_MODEL(store);
|
||||
|
@ -1148,6 +1151,9 @@ static gint prefs_matcher_get_criteria_from_matching(gint matching_id)
|
|||
case MATCHCRITERIA_NOT_HEADERS_PART:
|
||||
case MATCHCRITERIA_HEADERS_PART:
|
||||
return CRITERIA_HEADERS_PART;
|
||||
case MATCHCRITERIA_NOT_HEADERS_CONT:
|
||||
case MATCHCRITERIA_HEADERS_CONT:
|
||||
return CRITERIA_HEADERS_CONT;
|
||||
case MATCHCRITERIA_NOT_HEADER:
|
||||
case MATCHCRITERIA_HEADER:
|
||||
return CRITERIA_HEADER;
|
||||
|
@ -1263,6 +1269,8 @@ static gint prefs_matcher_get_matching_from_criteria(gint criteria_id)
|
|||
return MATCHCRITERIA_HEADER;
|
||||
case CRITERIA_HEADERS_PART:
|
||||
return MATCHCRITERIA_HEADERS_PART;
|
||||
case CRITERIA_HEADERS_CONT:
|
||||
return MATCHCRITERIA_HEADERS_CONT;
|
||||
case CRITERIA_BODY_PART:
|
||||
return MATCHCRITERIA_BODY_PART;
|
||||
case CRITERIA_MESSAGE:
|
||||
|
@ -1347,6 +1355,8 @@ static gint prefs_matcher_not_criteria(gint matcher_criteria)
|
|||
return MATCHCRITERIA_NOT_HEADER;
|
||||
case MATCHCRITERIA_HEADERS_PART:
|
||||
return MATCHCRITERIA_NOT_HEADERS_PART;
|
||||
case MATCHCRITERIA_HEADERS_CONT:
|
||||
return MATCHCRITERIA_NOT_HEADERS_CONT;
|
||||
case MATCHCRITERIA_MESSAGE:
|
||||
return MATCHCRITERIA_NOT_MESSAGE;
|
||||
case MATCHCRITERIA_TEST:
|
||||
|
@ -1411,6 +1421,7 @@ static gint prefs_matcher_get_pred(const gint criteria)
|
|||
case CRITERIA_REFERENCES:
|
||||
case CRITERIA_HEADER:
|
||||
case CRITERIA_HEADERS_PART:
|
||||
case CRITERIA_HEADERS_CONT:
|
||||
case CRITERIA_BODY_PART:
|
||||
case CRITERIA_MESSAGE:
|
||||
case CRITERIA_TAG:
|
||||
|
@ -1514,6 +1525,7 @@ static MatcherProp *prefs_matcher_dialog_to_matcher(void)
|
|||
case CRITERIA_INREPLYTO:
|
||||
case CRITERIA_REFERENCES:
|
||||
case CRITERIA_HEADERS_PART:
|
||||
case CRITERIA_HEADERS_CONT:
|
||||
case CRITERIA_BODY_PART:
|
||||
case CRITERIA_MESSAGE:
|
||||
expr = gtk_entry_get_text(GTK_ENTRY(matcher.string_entry));
|
||||
|
@ -1829,6 +1841,10 @@ static void prefs_matcher_second_criteria_sel(GtkWidget *widget,
|
|||
gtk_label_set_text(GTK_LABEL(matcher.match_label),
|
||||
_("Headers part"));
|
||||
break;
|
||||
case CRITERIA_HEADERS_CONT:
|
||||
gtk_label_set_text(GTK_LABEL(matcher.match_label),
|
||||
_("Headers values"));
|
||||
break;
|
||||
case CRITERIA_BODY_PART:
|
||||
gtk_label_set_text(GTK_LABEL(matcher.match_label),
|
||||
_("Body part"));
|
||||
|
@ -2317,6 +2333,7 @@ static void prefs_matcher_set_criteria(const gint criteria)
|
|||
match_criteria = MATCH_HEADER;
|
||||
break;
|
||||
case CRITERIA_HEADERS_PART:
|
||||
case CRITERIA_HEADERS_CONT:
|
||||
case CRITERIA_BODY_PART:
|
||||
case CRITERIA_MESSAGE:
|
||||
match_criteria = MATCH_PHRASE;
|
||||
|
@ -2448,6 +2465,7 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
|
|||
case MATCHCRITERIA_NOT_REFERENCES:
|
||||
case MATCHCRITERIA_NOT_HEADER:
|
||||
case MATCHCRITERIA_NOT_HEADERS_PART:
|
||||
case MATCHCRITERIA_NOT_HEADERS_CONT:
|
||||
case MATCHCRITERIA_NOT_MESSAGE:
|
||||
case MATCHCRITERIA_NOT_BODY_PART:
|
||||
case MATCHCRITERIA_NOT_TEST:
|
||||
|
@ -2470,6 +2488,7 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
|
|||
case MATCHCRITERIA_NOT_INREPLYTO:
|
||||
case MATCHCRITERIA_NOT_REFERENCES:
|
||||
case MATCHCRITERIA_NOT_HEADERS_PART:
|
||||
case MATCHCRITERIA_NOT_HEADERS_CONT:
|
||||
case MATCHCRITERIA_NOT_BODY_PART:
|
||||
case MATCHCRITERIA_NOT_MESSAGE:
|
||||
case MATCHCRITERIA_NOT_TEST:
|
||||
|
@ -2483,6 +2502,7 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
|
|||
case MATCHCRITERIA_INREPLYTO:
|
||||
case MATCHCRITERIA_REFERENCES:
|
||||
case MATCHCRITERIA_HEADERS_PART:
|
||||
case MATCHCRITERIA_HEADERS_CONT:
|
||||
case MATCHCRITERIA_BODY_PART:
|
||||
case MATCHCRITERIA_MESSAGE:
|
||||
case MATCHCRITERIA_TEST:
|
||||
|
@ -2593,6 +2613,7 @@ static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
|
|||
case CRITERIA_REFERENCES:
|
||||
case CRITERIA_HEADER:
|
||||
case CRITERIA_HEADERS_PART:
|
||||
case CRITERIA_HEADERS_CONT:
|
||||
case CRITERIA_BODY_PART:
|
||||
case CRITERIA_MESSAGE:
|
||||
case CRITERIA_TAG:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
|
||||
* Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1091,3 +1091,31 @@ void procheader_entries_free (HeaderEntry *entries)
|
|||
}
|
||||
}
|
||||
|
||||
gboolean procheader_header_is_internal(const gchar *hdr_name)
|
||||
{
|
||||
const gchar *internal_hdrs[] = {
|
||||
"AF:", "NF:", "PS:", "SRH:", "SFN:", "DSR:", "MID:", "CFG:",
|
||||
"PT:", "S:", "RQ:", "SSV:", "NSV:", "SSH:", "R:", "MAID:",
|
||||
"SCF:", "RMID:", "FMID:", "NAID:",
|
||||
"X-Claws-Account-Id:",
|
||||
"X-Claws-Sign:",
|
||||
"X-Claws-Encrypt:",
|
||||
"X-Claws-Privacy-System:",
|
||||
"X-Claws-Auto-Wrapping:",
|
||||
"X-Claws-Auto-Indent:",
|
||||
"X-Claws-End-Special-Headers:",
|
||||
"X-Sylpheed-Account-Id:",
|
||||
"X-Sylpheed-Sign:",
|
||||
"X-Sylpheed-Encrypt:",
|
||||
"X-Sylpheed-Privacy-System:",
|
||||
"X-Sylpheed-End-Special-Headers:",
|
||||
NULL
|
||||
};
|
||||
int i;
|
||||
|
||||
for (i = 0; internal_hdrs[i]; i++) {
|
||||
if (!strcmp(hdr_name, internal_hdrs[i]))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
|
||||
* Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
|
||||
* Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -95,4 +95,5 @@ gint procheader_get_header_from_msginfo (MsgInfo *msginfo,
|
|||
|
||||
HeaderEntry *procheader_entries_from_str(const gchar *str);
|
||||
void procheader_entries_free (HeaderEntry *entries);
|
||||
gboolean procheader_header_is_internal (const gchar *hdr_name);
|
||||
#endif /* __PROCHEADER_H__ */
|
||||
|
|
|
@ -1874,27 +1874,6 @@ void textview_set_position(TextView *textview, gint pos)
|
|||
gtkut_text_view_set_position(text, pos);
|
||||
}
|
||||
|
||||
static gboolean header_is_internal(Header *header)
|
||||
{
|
||||
const gchar *internal_hdrs[] =
|
||||
{"AF:", "NF:", "PS:", "SRH:", "SFN:", "DSR:", "MID:",
|
||||
"CFG:", "PT:", "S:", "RQ:", "SSV:", "NSV:", "SSH:",
|
||||
"R:", "MAID:", "SCF:", "RMID:", "FMID:", "NAID:",
|
||||
"X-Claws-Account-Id:", "X-Claws-Sign:", "X-Claws-Encrypt:",
|
||||
"X-Claws-Privacy-System:", "X-Claws-End-Special-Headers:",
|
||||
"X-Sylpheed-Account-Id:", "X-Sylpheed-Sign:", "X-Sylpheed-Encrypt:",
|
||||
"X-Claws-Auto-Wrapping:", "X-Claws-Auto-Indent:",
|
||||
"X-Sylpheed-Privacy-System:", "X-Sylpheed-End-Special-Headers:",
|
||||
NULL};
|
||||
int i;
|
||||
|
||||
for (i = 0; internal_hdrs[i]; i++) {
|
||||
if (!strcmp(header->name, internal_hdrs[i]))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
|
||||
{
|
||||
gchar buf[BUFFSIZE];
|
||||
|
@ -1910,7 +1889,7 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
|
|||
sorted_headers = g_ptr_array_new();
|
||||
for (i = 0; i < headers->len; i++) {
|
||||
header = g_ptr_array_index(headers, i);
|
||||
if (!header_is_internal(header))
|
||||
if (!procheader_header_is_internal(header->name))
|
||||
g_ptr_array_add(sorted_headers, header);
|
||||
else
|
||||
procheader_header_free(header);
|
||||
|
@ -1953,7 +1932,7 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
|
|||
if (prefs_common.show_other_header) {
|
||||
for (i = 0; i < headers->len; i++) {
|
||||
header = g_ptr_array_index(headers, i);
|
||||
if (!header_is_internal(header)) {
|
||||
if (!procheader_header_is_internal(header->name)) {
|
||||
g_ptr_array_add(sorted_headers, header);
|
||||
} else {
|
||||
procheader_header_free(header);
|
||||
|
|
|
@ -179,6 +179,8 @@ foreach my $element ($xmlobj->child("filter")->children("rule")) {
|
|||
}
|
||||
if ($condition eq "match-any-header") {
|
||||
$new_filter .= "headers_part ";
|
||||
} elsif ($condition eq "match-header-content") {
|
||||
$new_filter .= "headers_cont ";
|
||||
} elsif ($condition eq "match-to-or-cc") {
|
||||
$new_filter .= "to_or_cc ";
|
||||
} elsif ($condition eq "match-body-text") {
|
||||
|
|
Loading…
Reference in a new issue