1 /* 2 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) 3 * 4 * This library is free software: you can redistribute it and/or modify it 5 * under the terms of the GNU Lesser General Public License as published by 6 * the Free Software Foundation. 7 * 8 * This library is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 10 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 11 * for more details. 12 * 13 * You should have received a copy of the GNU Lesser General Public License 14 * along with this library. If not, see <http://www.gnu.org/licenses/>. 15 * 16 * Authors: Michael Zucchi <notzed@ximian.com> 17 * Jeffrey Stedfast <fejj@ximian.com> 18 */ 19 20 #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION) 21 #error "Only <camel/camel.h> can be included directly." 22 #endif 23 24 #ifndef CAMEL_FILTER_DRIVER_H 25 #define CAMEL_FILTER_DRIVER_H 26 27 #include <camel/camel-folder.h> 28 #include <camel/camel-uid-cache.h> 29 30 /* Standard GObject macros */ 31 #define CAMEL_TYPE_FILTER_DRIVER \ 32 (camel_filter_driver_get_type ()) 33 #define CAMEL_FILTER_DRIVER(obj) \ 34 (G_TYPE_CHECK_INSTANCE_CAST \ 35 ((obj), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriver)) 36 #define CAMEL_FILTER_DRIVER_CLASS(cls) \ 37 (G_TYPE_CHECK_CLASS_CAST \ 38 ((cls), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriverClass) 39 #define CAMEL_IS_FILTER_DRIVER(obj) \ 40 (G_TYPE_CHECK_INSTANCE_TYPE \ 41 ((obj), CAMEL_TYPE_FILTER_DRIVER)) 42 #define CAMEL_IS_FILTER_DRIVER_CLASS(cls) \ 43 (G_TYPE_CHECK_CLASS_TYPE \ 44 ((cls), CAMEL_TYPE_FILTER_DRIVER)) 45 #define CAMEL_FILTER_DRIVER_GET_CLASS(obj) \ 46 (G_TYPE_INSTANCE_GET_CLASS \ 47 ((obj), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriverClass)) 48 49 G_BEGIN_DECLS 50 51 struct _CamelSession; 52 53 typedef struct _CamelFilterDriver CamelFilterDriver; 54 typedef struct _CamelFilterDriverClass CamelFilterDriverClass; 55 typedef struct _CamelFilterDriverPrivate CamelFilterDriverPrivate; 56 57 struct _CamelFilterDriver { 58 GObject parent; 59 CamelFilterDriverPrivate *priv; 60 }; 61 62 struct _CamelFilterDriverClass { 63 GObjectClass parent_class; 64 65 /* Padding for future expansion */ 66 gpointer reserved[20]; 67 }; 68 69 /* FIXME: this maybe should change... */ 70 /* type of status for a status report */ 71 enum camel_filter_status_t { 72 CAMEL_FILTER_STATUS_NONE, 73 CAMEL_FILTER_STATUS_START, /* start of new message processed */ 74 CAMEL_FILTER_STATUS_ACTION, /* an action performed */ 75 CAMEL_FILTER_STATUS_PROGRESS, /* (an) extra update (s), if it is taking longer to process */ 76 CAMEL_FILTER_STATUS_END /* end of message */ 77 }; 78 79 typedef CamelFolder * (*CamelFilterGetFolderFunc) (CamelFilterDriver *driver, const gchar *uri, 80 gpointer user_data, GError **error); 81 /* report status */ 82 typedef void (*CamelFilterStatusFunc) (CamelFilterDriver *driver, enum camel_filter_status_t status, 83 gint pc, const gchar *desc, gpointer user_data); 84 85 typedef void (*CamelFilterShellFunc) (CamelFilterDriver *driver, gint argc, gchar **argv, gpointer user_data); 86 typedef void (*CamelFilterPlaySoundFunc) (CamelFilterDriver *driver, const gchar *filename, gpointer user_data); 87 typedef void (*CamelFilterSystemBeepFunc) (CamelFilterDriver *driver, gpointer user_data); 88 89 GType camel_filter_driver_get_type (void); 90 CamelFilterDriver *camel_filter_driver_new (struct _CamelSession *session); 91 92 /* modifiers */ 93 void camel_filter_driver_set_logfile (CamelFilterDriver *d, FILE *logfile); 94 95 void camel_filter_driver_set_status_func (CamelFilterDriver *d, CamelFilterStatusFunc func, gpointer user_data); 96 void camel_filter_driver_set_shell_func (CamelFilterDriver *d, CamelFilterShellFunc func, gpointer user_data); 97 void camel_filter_driver_set_play_sound_func (CamelFilterDriver *d, CamelFilterPlaySoundFunc func, gpointer user_data); 98 void camel_filter_driver_set_system_beep_func (CamelFilterDriver *d, CamelFilterSystemBeepFunc func, gpointer user_data); 99 void camel_filter_driver_set_folder_func (CamelFilterDriver *d, CamelFilterGetFolderFunc get_folder, gpointer user_data); 100 101 void camel_filter_driver_set_default_folder (CamelFilterDriver *d, CamelFolder *def); 102 103 void camel_filter_driver_add_rule (CamelFilterDriver *d, const gchar *name, const gchar *match, 104 const gchar *action); 105 gboolean camel_filter_driver_remove_rule_by_name (CamelFilterDriver *d, const gchar *name); 106 107 /*void camel_filter_driver_set_global(CamelFilterDriver *, const gchar *name, const gchar *value);*/ 108 109 void camel_filter_driver_flush (CamelFilterDriver *driver, GError **error); 110 111 gint camel_filter_driver_filter_message 112 (CamelFilterDriver *driver, 113 CamelMimeMessage *message, 114 CamelMessageInfo *info, 115 const gchar *uid, 116 CamelFolder *source, 117 const gchar *store_uid, 118 const gchar *original_store_uid, 119 GCancellable *cancellable, 120 GError **error); 121 gint camel_filter_driver_filter_mbox (CamelFilterDriver *driver, 122 const gchar *mbox, 123 const gchar *original_source_url, 124 GCancellable *cancellable, 125 GError **error); 126 gint camel_filter_driver_filter_folder 127 (CamelFilterDriver *driver, 128 CamelFolder *folder, 129 CamelUIDCache *cache, 130 GPtrArray *uids, 131 gboolean remove, 132 GCancellable *cancellable, 133 GError **error); 134 void camel_filter_driver_log_info (CamelFilterDriver *driver, 135 const gchar *format, 136 ...) G_GNUC_PRINTF (2, 3); 137 138 G_END_DECLS 139 140 #endif /* CAMEL_FILTER_DRIVER_H */ 141