new matcher config file parser
[claws.git] / src / matcher.h
1 #ifndef MATCHER_H
2
3 #define MATCHER_H
4
5 #include <sys/types.h>
6 #include <regex.h>
7 #include <glib.h>
8 #include "procmsg.h"
9
10 /*
11 enum {
12 */
13         /* msginfo flags */
14 /*
15         MATCHING_ALL,
16         MATCHING_UNREAD,
17         MATCHING_NOT_UNREAD,
18         MATCHING_NEW,
19         MATCHING_NOT_NEW,
20         MATCHING_MARKED,
21         MATCHING_NOT_MARKED,
22         MATCHING_DELETED,
23         MATCHING_NOT_DELETED,
24         MATCHING_REPLIED,
25         MATCHING_NOT_REPLIED,
26         MATCHING_FORWARDED,
27         MATCHING_NOT_FORWARDED,
28 */
29         /* msginfo headers */
30 /*
31         MATCHING_SUBJECT,
32         MATCHING_NOT_SUBJECT,
33         MATCHING_FROM,
34         MATCHING_NOT_FROM,
35         MATCHING_TO,
36         MATCHING_NOT_TO,
37         MATCHING_CC,
38         MATCHING_NOT_CC,
39         MATCHING_TO_OR_CC,
40         MATCHING_NOT_TO_AND_NOT_CC,
41         MATCHING_AGE_GREATER,
42         MATCHING_AGE_LOWER,
43         MATCHING_NEWSGROUPS,
44         MATCHING_NOT_NEWSGROUPS,
45         MATCHING_INREPLYTO,
46         MATCHING_NOT_INREPLYTO,
47         MATCHING_REFERENCES,
48         MATCHING_NOT_REFERENCES,
49         MATCHING_SCORE_GREATER,
50         MATCHING_SCORE_LOWER,
51 */
52         /* file content */
53 /*
54         MATCHING_HEADER,
55         MATCHING_NOT_HEADER,
56         MATCHING_MESSAGE,
57         MATCHING_NOT_MESSAGE,
58         MATCHING_HEADERS_PART,
59         MATCHING_NOT_HEADERS_PART,
60         MATCHING_BODY_PART,
61         MATCHING_NOT_BODY_PART,
62         MATCHING_EXECUTE,
63         MATCHING_NOT_EXECUTE,
64 */
65         /* scoring */
66 /*
67         MATCHING_SCORE,
68 */
69         /* filtering */
70 /*
71         MATCHING_ACTION_MOVE,
72         MATCHING_ACTION_COPY,
73         MATCHING_ACTION_DELETE,
74         MATCHING_ACTION_MARK,
75         MATCHING_ACTION_MARK_AS_READ,
76         MATCHING_ACTION_UNMARK,
77         MATCHING_ACTION_MARK_AS_UNREAD,
78         MATCHING_ACTION_FORWARD,
79         MATCHING_ACTION_FORWARD_AS_ATTACHMENT,
80 */
81         /* MATCHING_ACTION_EXECUTE, */
82 /*
83         MATCHING_MATCH,
84         MATCHING_REGEXP,
85         MATCHING_MATCHCASE,
86         MATCHING_REGEXPCASE
87 };
88 */
89
90 struct _MatcherProp {
91         int matchtype;
92         int criteria;
93         gchar * header;
94         gchar * expr;
95         int value;
96         regex_t * preg;
97         int error;
98         gboolean result;
99 };
100
101 typedef struct _MatcherProp MatcherProp;
102
103 struct _MatcherList {
104         GSList * matchers;
105         gboolean bool_and;
106 };
107
108 typedef struct _MatcherList MatcherList;
109
110 gchar * get_matchparser_tab_str(gint id);
111 MatcherProp * matcherprop_new(gint criteria, gchar * header,
112                               gint matchtype, gchar * expr,
113                               int age);
114 void matcherprop_free(MatcherProp * prop);
115 /*
116 MatcherProp * matcherprop_parse(gchar ** str);
117 */
118
119 gboolean matcherprop_match(MatcherProp * prop, MsgInfo * info);
120
121 MatcherList * matcherlist_new(GSList * matchers, gboolean bool_and);
122 void matcherlist_free(MatcherList * cond);
123 /*
124 MatcherList * matcherlist_parse(gchar ** str);
125 */
126
127 gboolean matcherlist_match(MatcherList * cond, MsgInfo * info);
128
129 /*
130 gint matcher_parse_keyword(gchar ** str);
131 gint matcher_parse_number(gchar ** str);
132 gboolean matcher_parse_boolean_op(gchar ** str);
133 gchar * matcher_parse_regexp(gchar ** str);
134 gchar * matcher_parse_str(gchar ** str);
135 */
136 gchar * matcherprop_to_string(MatcherProp * matcher);
137 gchar * matcherlist_to_string(MatcherList * matchers);
138 gchar * matching_build_command(gchar * cmd, MsgInfo * info);
139
140 #endif