[Commits] main.c 1.115.2.258 1.115.2.259 matcher.c 1.75.2.77 1.75.2.78 matcher.h 1.39.2.22 1.39.2.23 summary_search.c 1.15.2.73 1.15.2.74
colin at claws-mail.org
colin at claws-mail.org
Wed Sep 26 15:15:50 CEST 2012
Update of /home/claws-mail/claws/src
In directory srv:/tmp/cvs-serv9589/src
Modified Files:
Tag: gtk2
main.c matcher.c matcher.h summary_search.c
Log Message:
2012-09-26 [colin] 3.8.1cvs79
* src/main.c
* src/matcher.c
* src/matcher.h
Prepare the context strings, their translation take
CPU time. Shaves 6 seconds out of 17 on my reference
folder body search.
* src/summary_search.c
Fix a warning
Index: main.c
===================================================================
RCS file: /home/claws-mail/claws/src/main.c,v
retrieving revision 1.115.2.258
retrieving revision 1.115.2.259
diff -u -d -r1.115.2.258 -r1.115.2.259
--- main.c 21 Sep 2012 10:19:42 -0000 1.115.2.258
+++ main.c 26 Sep 2012 13:15:47 -0000 1.115.2.259
@@ -1337,6 +1337,7 @@
prefs_receive_init();
prefs_send_init();
tags_read_tags();
+ matcher_init();
#ifdef USE_ENCHANT
gtkaspell_checkers_init();
prefs_spelling_init();
@@ -1802,6 +1803,7 @@
plugin_unload_all("GTK2");
+ matcher_done();
prefs_toolbar_done();
#ifndef USE_NEW_ADDRBOOK
Index: matcher.h
===================================================================
RCS file: /home/claws-mail/claws/src/matcher.h,v
retrieving revision 1.39.2.22
retrieving revision 1.39.2.23
diff -u -d -r1.39.2.22 -r1.39.2.23
--- matcher.h 21 Sep 2012 10:19:42 -0000 1.39.2.22
+++ matcher.h 26 Sep 2012 13:15:47 -0000 1.39.2.23
@@ -142,6 +142,9 @@
MB_(AND)
};
+void matcher_init(void);
+void matcher_done(void);
+
const gchar *get_matchparser_tab_str (gint id);
gint get_matchparser_tab_id (const gchar *str);
Index: summary_search.c
===================================================================
RCS file: /home/claws-mail/claws/src/summary_search.c,v
retrieving revision 1.15.2.73
retrieving revision 1.15.2.74
diff -u -d -r1.15.2.73 -r1.15.2.74
--- summary_search.c 26 Sep 2012 12:04:49 -0000 1.15.2.73
+++ summary_search.c 26 Sep 2012 13:15:47 -0000 1.15.2.74
@@ -53,6 +53,7 @@
#include "prefs_matcher.h"
#include "manual.h"
#include "prefs_common.h"
+#include "statusbar.h"
static struct SummarySearchWindow {
GtkWidget *window;
Index: matcher.c
===================================================================
RCS file: /home/claws-mail/claws/src/matcher.c,v
retrieving revision 1.75.2.77
retrieving revision 1.75.2.78
diff -u -d -r1.75.2.77 -r1.75.2.78
--- matcher.c 26 Sep 2012 12:40:13 -0000 1.75.2.77
+++ matcher.c 26 Sep 2012 13:15:47 -0000 1.75.2.78
@@ -182,6 +182,50 @@
MATCH_ONE = 2
};
+enum {
+ CONTEXT_SUBJECT,
+ CONTEXT_FROM,
+ CONTEXT_TO,
+ CONTEXT_CC,
+ CONTEXT_NEWSGROUPS,
+ CONTEXT_IN_REPLY_TO,
+ CONTEXT_REFERENCES,
+ CONTEXT_HEADER,
+ CONTEXT_HEADER_LINE,
+ CONTEXT_BODY_LINE,
+ CONTEXT_TAG,
+ N_CONTEXT_STRS
+};
+
+static gchar *context_str[N_CONTEXT_STRS];
+
+void matcher_init(void)
+{
+ if (context_str[CONTEXT_SUBJECT] != NULL)
+ return;
+
+ context_str[CONTEXT_SUBJECT] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("Subject:"));
+ context_str[CONTEXT_FROM] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("From:"));
+ context_str[CONTEXT_TO] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("To:"));
+ context_str[CONTEXT_CC] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("Cc:"));
+ context_str[CONTEXT_NEWSGROUPS] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("Newsgroups:"));
+ context_str[CONTEXT_IN_REPLY_TO] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("In-Reply-To:"));
+ context_str[CONTEXT_REFERENCES] = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("References:"));
+ context_str[CONTEXT_HEADER] = g_strdup(_("header"));
+ context_str[CONTEXT_HEADER_LINE] = g_strdup(_("header line"));
+ context_str[CONTEXT_BODY_LINE] = g_strdup(_("body line"));
+ context_str[CONTEXT_TAG] = g_strdup(_("tag"));
+}
+
+void matcher_done(void)
+{
+ int i;
+ for (i = 0; i < N_CONTEXT_STRS; i++) {
+ g_free(context_str[i]);
+ context_str[i] = NULL;
+ }
+}
+
extern gboolean debug_filtering_session;
/*!
@@ -806,86 +850,35 @@
case MATCHCRITERIA_NOT_WATCH_THREAD:
return !MSG_IS_WATCH_THREAD(info->flags);
case MATCHCRITERIA_SUBJECT:
- return matcherprop_string_match(prop, info->subject,
- prefs_common_translated_header_name("Subject:"));
+ return matcherprop_string_match(prop, info->subject, context_str[CONTEXT_SUBJECT]);
case MATCHCRITERIA_NOT_SUBJECT:
- return !matcherprop_string_match(prop, info->subject,
- prefs_common_translated_header_name("Subject:"));
+ return !matcherprop_string_match(prop, info->subject, context_str[CONTEXT_SUBJECT]);
case MATCHCRITERIA_FROM:
+ return matcherprop_string_match(prop, info->from, context_str[CONTEXT_FROM]);
case MATCHCRITERIA_NOT_FROM:
- {
- gchar *context;
- gboolean ret;
-
- context = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("From:"));
- ret = matcherprop_string_match(prop, info->from, context);
- g_free(context);
- return (prop->criteria == MATCHCRITERIA_FROM)? ret : !ret;
- }
+ return !matcherprop_string_match(prop, info->from, context_str[CONTEXT_FROM]);
case MATCHCRITERIA_TO:
+ return matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO]);
case MATCHCRITERIA_NOT_TO:
- {
- gchar *context;
- gboolean ret;
-
- context = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("To:"));
- ret = matcherprop_string_match(prop, info->to, context);
- g_free(context);
- return (prop->criteria == MATCHCRITERIA_TO)? ret : !ret;
- }
+ return !matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO]);
case MATCHCRITERIA_CC:
+ return matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
case MATCHCRITERIA_NOT_CC:
- {
- gchar *context;
- gboolean ret;
-
- context = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("Cc:"));
- ret = matcherprop_string_match(prop, info->cc, context);
- g_free(context);
- return (prop->criteria == MATCHCRITERIA_CC)? ret : !ret;
- }
+ return !matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
case MATCHCRITERIA_TO_OR_CC:
- {
- gchar *context1, *context2;
- gboolean ret;
-
- context1 = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("To:"));
- context2 = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("Cc:"));
- ret = matcherprop_string_match(prop, info->to, context1)
- || matcherprop_string_match(prop, info->cc, context2);
- g_free(context1);
- g_free(context2);
- return ret;
- }
+ return matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO])
+ || matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
case MATCHCRITERIA_NOT_TO_AND_NOT_CC:
- {
- gchar *context1, *context2;
- gboolean ret;
-
- context1 = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("To:"));
- context2 = g_strdup_printf(_("%s header"), prefs_common_translated_header_name("Cc:"));
- ret = !(matcherprop_string_match(prop, info->to, context1)
- || matcherprop_string_match(prop, info->cc, context2));
- g_free(context1);
- g_free(context2);
- return ret;
- }
+ return !matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO])
+ && !matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
case MATCHCRITERIA_TAG:
+ return matcherprop_tag_match(prop, info, context_str[CONTEXT_TAG]);
case MATCHCRITERIA_NOT_TAG:
- {
- gboolean ret;
-
- ret = matcherprop_tag_match(prop, info, _("Tag"));
- return (prop->criteria == MATCHCRITERIA_TAG)? ret : !ret;
- }
+ return !matcherprop_tag_match(prop, info, context_str[CONTEXT_TAG]);
case MATCHCRITERIA_TAGGED:
+ return info->tags != NULL;
case MATCHCRITERIA_NOT_TAGGED:
- {
- gboolean ret;
-
- ret = (info->tags != NULL);
- return (prop->criteria == MATCHCRITERIA_TAGGED)? ret : !ret;
- }
+ return info->tags == NULL;
case MATCHCRITERIA_AGE_GREATER:
{
gboolean ret;
@@ -1090,41 +1083,17 @@
return ret;
}
case MATCHCRITERIA_NEWSGROUPS:
+ return matcherprop_string_match(prop, info->newsgroups, context_str[CONTEXT_NEWSGROUPS]);
case MATCHCRITERIA_NOT_NEWSGROUPS:
- {
- gchar *context;
- gboolean ret;
-
- context = g_strdup_printf(_("%s header"),
- prefs_common_translated_header_name("Newsgroups:"));
- ret = matcherprop_string_match(prop, info->newsgroups, context);
- g_free(context);
- return (prop->criteria == MATCHCRITERIA_NEWSGROUPS)? ret : !ret;
- }
+ return !matcherprop_string_match(prop, info->newsgroups, context_str[CONTEXT_NEWSGROUPS]);
case MATCHCRITERIA_INREPLYTO:
+ return matcherprop_string_match(prop, info->inreplyto, context_str[CONTEXT_IN_REPLY_TO]);
case MATCHCRITERIA_NOT_INREPLYTO:
- {
- gchar *context;
- gboolean ret;
-
- context = g_strdup_printf(_("%s header"),
- prefs_common_translated_header_name("In-Reply-To:"));
- ret = matcherprop_string_match(prop, info->inreplyto, context);
- g_free(context);
- return (prop->criteria == MATCHCRITERIA_INREPLYTO)? ret : !ret;
- }
+ return !matcherprop_string_match(prop, info->inreplyto, context_str[CONTEXT_IN_REPLY_TO]);
case MATCHCRITERIA_REFERENCES:
+ return matcherprop_list_match(prop, info->references, context_str[CONTEXT_REFERENCES]);
case MATCHCRITERIA_NOT_REFERENCES:
- {
- gchar *context;
- gboolean ret;
-
- context = g_strdup_printf(_("%s header"),
- prefs_common_translated_header_name("References:"));
- ret = matcherprop_list_match(prop, info->references, context);
- g_free(context);
- return (prop->criteria == MATCHCRITERIA_REFERENCES)? ret : !ret;
- }
+ return !matcherprop_list_match(prop, info->references, context_str[CONTEXT_REFERENCES]);
case MATCHCRITERIA_TEST:
return matcherprop_match_test(prop, info);
case MATCHCRITERIA_NOT_TEST:
@@ -1209,9 +1178,9 @@
if (procheader_headername_equal(header->name,
matcher->header)) {
if (matcher->criteria == MATCHCRITERIA_HEADER)
- result = matcherprop_string_match(matcher, header->body, _("header"));
+ result = matcherprop_string_match(matcher, header->body, context_str[CONTEXT_HEADER]);
else
- result = !matcherprop_string_match(matcher, header->body, _("header"));
+ result = !matcherprop_string_match(matcher, header->body, context_str[CONTEXT_HEADER]);
procheader_header_free(header);
return result;
}
@@ -1225,7 +1194,7 @@
if (!header)
return FALSE;
result = matcherprop_header_line_match(matcher,
- header->name, header->body, _("header line"));
+ header->name, header->body, context_str[CONTEXT_HEADER_LINE]);
procheader_header_free(header);
return result;
case MATCHCRITERIA_NOT_HEADERS_PART:
@@ -1234,7 +1203,7 @@
if (!header)
return FALSE;
result = !matcherprop_header_line_match(matcher,
- header->name, header->body, _("header line"));
+ header->name, header->body, context_str[CONTEXT_HEADER_LINE]);
procheader_header_free(header);
return result;
case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
@@ -1439,7 +1408,7 @@
return FALSE;
}
}
-
+
static gboolean matcherlist_match_binary_content(MatcherList *matchers, MimeInfo *partinfo)
{
FILE *outfp;
@@ -1477,7 +1446,7 @@
if (matcher->criteria == MATCHCRITERIA_NOT_BODY_PART ||
matcher->criteria == MATCHCRITERIA_NOT_MESSAGE) {
if (matcherprop_string_match(matcher, buf,
- _("body line"))) {
+ context_str[CONTEXT_BODY_LINE])) {
matcher->result = FALSE;
matcher->done = TRUE;
} else
@@ -1486,7 +1455,7 @@
} else if (matcherprop_criteria_body(matcher) ||
matcherprop_criteria_message(matcher)) {
if (matcherprop_string_match(matcher, buf,
- _("body line"))) {
+ context_str[CONTEXT_BODY_LINE])) {
matcher->result = TRUE;
matcher->done = TRUE;
}
@@ -1525,7 +1494,7 @@
if (matcher->criteria == MATCHCRITERIA_NOT_BODY_PART ||
matcher->criteria == MATCHCRITERIA_NOT_MESSAGE) {
if (matcherprop_string_match(matcher, buf,
- _("body line"))) {
+ context_str[CONTEXT_BODY_LINE])) {
matcher->result = FALSE;
matcher->done = TRUE;
} else
@@ -1534,7 +1503,7 @@
} else if (matcherprop_criteria_body(matcher) ||
matcherprop_criteria_message(matcher)) {
if (matcherprop_string_match(matcher, buf,
- _("body line"))) {
+ context_str[CONTEXT_BODY_LINE])) {
matcher->result = TRUE;
matcher->done = TRUE;
}
More information about the Commits
mailing list