11 #define PREFSBUFSIZE 1024
14 GSList * global_scoring = NULL;
16 ScoringProp * scoringprop_new(MatcherList * matchers, int score)
18 ScoringProp * scoring;
20 scoring = g_new0(ScoringProp, 1);
21 scoring->matchers = matchers;
22 scoring->score = score;
27 ScoringProp * scoringprop_copy(ScoringProp *src)
32 new = g_new0(ScoringProp, 1);
33 new->matchers = g_new0(MatcherList, 1);
34 for (tmp = src->matchers->matchers; tmp != NULL && tmp->data != NULL;) {
35 MatcherProp *matcher = (MatcherProp *)tmp->data;
37 new->matchers->matchers = g_slist_append(new->matchers->matchers,
38 matcherprop_copy(matcher));
41 new->matchers->bool_and = src->matchers->bool_and;
42 new->score = src->score;
47 void scoringprop_free(ScoringProp * prop)
49 g_return_if_fail(prop);
50 matcherlist_free(prop->matchers);
54 gint scoringprop_score_message(ScoringProp * scoring, MsgInfo * info)
56 if (matcherlist_match(scoring->matchers, info))
57 return scoring->score;
62 gint score_message(GSList * scoring_list, MsgInfo * info)
68 for(l = scoring_list ; l != NULL ; l = g_slist_next(l)) {
69 ScoringProp * scoring = (ScoringProp *) l->data;
71 add_score = (scoringprop_score_message(scoring, info));
72 if (add_score == MAX_SCORE || add_score == MIN_SCORE) {
82 syntax for scoring config
84 file ~/.sylpheed/scoringrc
86 header "x-mailing" match "toto" score -10
87 subject match "regexp" & to regexp "regexp" score 50
88 subject match "regexp" | to regexpcase "regexp" | age_sup 5 score 30
90 if score is = MIN_SCORE (-999), no more match is done in the list
91 if score is = MAX_SCORE (-999), no more match is done in the list
95 gchar * scoringprop_to_string(ScoringProp * prop)
101 list_str = matcherlist_to_string(prop->matchers);
103 if (list_str == NULL)
106 score_str = itos(prop->score);
107 scoring_str = g_strconcat(list_str, " score ", score_str, NULL);
113 void prefs_scoring_free(GSList * prefs_scoring)
115 while (prefs_scoring != NULL) {
116 ScoringProp * scoring = (ScoringProp *) prefs_scoring->data;
117 scoringprop_free(scoring);
118 prefs_scoring = g_slist_remove(prefs_scoring, scoring);
122 static gboolean prefs_scoring_free_func(GNode *node, gpointer data)
124 FolderItem *item = node->data;
129 prefs_scoring_free(item->prefs->scoring);
130 item->prefs->scoring = NULL;
135 void prefs_scoring_clear(void)
139 for (cur = folder_get_list() ; cur != NULL ; cur = g_list_next(cur)) {
142 folder = (Folder *) cur->data;
143 g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
144 prefs_scoring_free_func, NULL);
147 prefs_scoring_free(global_scoring);
148 global_scoring = NULL;
152 *\brief Clear up scoring for folder
154 void prefs_scoring_clear_folder(Folder *folder)
156 g_return_if_fail(folder);
157 g_return_if_fail(folder->node);
158 g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
159 prefs_scoring_free_func, NULL);