New function to remove a filter rule by name.
[platform/upstream/evolution-data-server.git] / camel / camel-filter-driver.h
1 /*
2  *  Copyright (C) 2000 Ximian Inc.
3  *
4  *  Authors: Michael Zucchi <notzed@ximian.com>
5  *           Jeffrey Stedfast <fejj@ximian.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of version 2 of the GNU General Public
9  * License as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public
17  * License along with this program; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21
22 #ifndef _CAMEL_FILTER_DRIVER_H
23 #define _CAMEL_FILTER_DRIVER_H
24
25 #include <glib.h>
26 #include <camel/camel-object.h>
27 #include <camel/camel-session.h>
28 #include <camel/camel-folder.h>
29 #include <camel/camel-uid-cache.h>
30
31 #define CAMEL_FILTER_DRIVER_TYPE   (camel_filter_driver_get_type())
32 #define CAMEL_FILTER_DRIVER(obj)         CAMEL_CHECK_CAST (obj, camel_filter_driver_get_type (), CamelFilterDriver)
33 #define CAMEL_FILTER_DRIVER_CLASS(klass) CAMEL__CHECK_CLASS_CAST (klass, camel_filter_driver_get_type (), CamelFilterDriverClass)
34 #define CAMEL_IS_FILTER_DRIVER(obj)      CAMEL_CHECK_TYPE (obj, camel_filter_driver_get_type ())
35
36 typedef struct _CamelFilterDriverClass CamelFilterDriverClass;
37
38 struct _CamelFilterDriver {
39         CamelObject parent;
40
41         struct _CamelFilterDriverPrivate *priv;
42 };
43
44 struct _CamelFilterDriverClass {
45         CamelObjectClass parent_class;
46 };
47
48 /* FIXME: this maybe should change... */
49 /* type of status for a status report */
50 enum camel_filter_status_t {
51         CAMEL_FILTER_STATUS_NONE,
52         CAMEL_FILTER_STATUS_START,      /* start of new message processed */
53         CAMEL_FILTER_STATUS_ACTION,     /* an action performed */
54         CAMEL_FILTER_STATUS_PROGRESS,   /* (an) extra update(s), if its taking longer to process */
55         CAMEL_FILTER_STATUS_END,        /* end of message */
56 };
57
58 typedef CamelFolder * (*CamelFilterGetFolderFunc) (CamelFilterDriver *driver, const char *uri,
59                                                    void *data, CamelException *ex);
60 /* report status */
61 typedef void (CamelFilterStatusFunc) (CamelFilterDriver *driver, enum camel_filter_status_t status,
62                                       int pc, const char *desc, void *data);
63
64 typedef void (CamelFilterShellExecFunc) (CamelFilterDriver *driver, const char *command, void *data);
65 typedef void (CamelFilterPlaySoundFunc) (CamelFilterDriver *driver, const char *filename, void *data);
66
67 CamelType          camel_filter_driver_get_type (void);
68 CamelFilterDriver  *camel_filter_driver_new     (void);
69
70 /* modifiers */
71 void camel_filter_driver_set_logfile          (CamelFilterDriver *d, FILE *logfile);
72
73 void camel_filter_driver_set_status_func      (CamelFilterDriver *d, CamelFilterStatusFunc *func, void *data);
74 void camel_filter_driver_set_shell_exec_func  (CamelFilterDriver *d, CamelFilterShellExecFunc *func, void *data);
75 void camel_filter_driver_set_play_sound_func  (CamelFilterDriver *d, CamelFilterPlaySoundFunc *func, void *data);
76 void camel_filter_driver_set_folder_func      (CamelFilterDriver *d, CamelFilterGetFolderFunc fetcher, void *data);
77
78 void camel_filter_driver_set_default_folder   (CamelFilterDriver *d, CamelFolder *def);
79
80 void camel_filter_driver_add_rule             (CamelFilterDriver *d, const char *name, const char *match,
81                                                const char *action);
82 int  camel_filter_driver_remove_rule_by_name  (CamelFilterDriver *d, const char *name);
83
84 /*void camel_filter_driver_set_global(CamelFilterDriver *, const char *name, const char *value);*/
85
86 void camel_filter_driver_flush                (CamelFilterDriver *driver, CamelException *ex);
87
88 int  camel_filter_driver_filter_message       (CamelFilterDriver *driver, CamelMimeMessage *message,
89                                                CamelMessageInfo *info, const char *uri,
90                                                CamelFolder *source, const char *source_url,
91                                                const char *original_source_url, CamelException *ex);
92
93 int  camel_filter_driver_filter_mbox          (CamelFilterDriver *driver, const char *mbox,
94                                                const char *original_source_url, CamelException *ex);
95
96 int  camel_filter_driver_filter_folder        (CamelFilterDriver *driver, CamelFolder *folder, CamelUIDCache *cache,
97                                                GPtrArray *uids, gboolean remove, CamelException *ex);
98
99 #if 0
100 /* generate the search query/action string for a filter option */
101 void camel_filter_driver_expand_option (CamelFilterDriver *d, GString *s, GString *action, struct filter_option *op);
102
103 /* get info about rules (options) */
104 int camel_filter_driver_rule_count (CamelFilterDriver *d);
105 struct filter_option *camel_filter_driver_rule_get (CamelFilterDriver *d, int n);
106 #endif
107
108 #endif /* ! _CAMEL_FILTER_DRIVER_H */