1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  * Copyright (C) 2012 Red Hat, Inc. (www.redhat.com)
4  *
5  * This library is free software: you can redistribute it and/or modify it
6  * under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation.
8  *
9  * This library is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
12  * for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this library. If not, see <http://www.gnu.org/licenses/>.
16  *
17  * Authors: Milan Crha <mcrha@redhat.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_VEE_DATA_CACHE_H
25 #define CAMEL_VEE_DATA_CACHE_H
26 
27 #include <camel/camel-folder.h>
28 
29 /* Standard GObject macros */
30 #define CAMEL_TYPE_VEE_SUBFOLDER_DATA \
31 	(camel_vee_subfolder_data_get_type ())
32 #define CAMEL_VEE_SUBFOLDER_DATA(obj) \
33 	(G_TYPE_CHECK_INSTANCE_CAST \
34 	((obj), CAMEL_TYPE_VEE_SUBFOLDER_DATA, CamelVeeSubfolderData))
35 #define CAMEL_VEE_SUBFOLDER_DATA_CLASS(cls) \
36 	(G_TYPE_CHECK_CLASS_CAST \
37 	((cls), CAMEL_TYPE_VEE_SUBFOLDER_DATA, CamelVeeSubfolderDataClass))
38 #define CAMEL_IS_VEE_SUBFOLDER_DATA(obj) \
39 	(G_TYPE_CHECK_INSTANCE_TYPE \
40 	((obj), CAMEL_TYPE_VEE_SUBFOLDER_DATA))
41 #define CAMEL_IS_VEE_SUBFOLDER_DATA_CLASS(cls) \
42 	(G_TYPE_CHECK_CLASS_TYPE \
43 	((cls), CAMEL_TYPE_VEE_SUBFOLDER_DATA))
44 #define CAMEL_VEE_SUBFOLDER_DATA_GET_CLASS(obj) \
45 	(G_TYPE_INSTANCE_GET_CLASS \
46 	((obj), CAMEL_TYPE_VEE_SUBFOLDER_DATA, CamelVeeSubfolderDataClass))
47 
48 #define CAMEL_TYPE_VEE_MESSAGE_INFO_DATA \
49 	(camel_vee_message_info_data_get_type ())
50 #define CAMEL_VEE_MESSAGE_INFO_DATA(obj) \
51 	(G_TYPE_CHECK_INSTANCE_CAST \
52 	((obj), CAMEL_TYPE_VEE_MESSAGE_INFO_DATA, CamelVeeMessageInfoData))
53 #define CAMEL_VEE_MESSAGE_INFO_DATA_CLASS(cls) \
54 	(G_TYPE_CHECK_CLASS_CAST \
55 	((cls), CAMEL_TYPE_VEE_MESSAGE_INFO_DATA, CamelVeeMessageInfoDataClass))
56 #define CAMEL_IS_VEE_MESSAGE_INFO_DATA(obj) \
57 	(G_TYPE_CHECK_INSTANCE_TYPE \
58 	((obj), CAMEL_TYPE_VEE_MESSAGE_INFO_DATA))
59 #define CAMEL_IS_VEE_MESSAGE_INFO_DATA_CLASS(cls) \
60 	(G_TYPE_CHECK_CLASS_TYPE \
61 	((cls), CAMEL_TYPE_VEE_MESSAGE_INFO_DATA))
62 #define CAMEL_VEE_MESSAGE_INFO_DATA_GET_CLASS(obj) \
63 	(G_TYPE_INSTANCE_GET_CLASS \
64 	((obj), CAMEL_TYPE_VEE_MESSAGE_INFO_DATA, CamelVeeMessageInfoDataClass))
65 
66 #define CAMEL_TYPE_VEE_DATA_CACHE \
67 	(camel_vee_data_cache_get_type ())
68 #define CAMEL_VEE_DATA_CACHE(obj) \
69 	(G_TYPE_CHECK_INSTANCE_CAST \
70 	((obj), CAMEL_TYPE_VEE_DATA_CACHE, CamelVeeDataCache))
71 #define CAMEL_VEE_DATA_CACHE_CLASS(cls) \
72 	(G_TYPE_CHECK_CLASS_CAST \
73 	((cls), CAMEL_TYPE_VEE_DATA_CACHE, CamelVeeDataCacheClass))
74 #define CAMEL_IS_VEE_DATA_CACHE(obj) \
75 	(G_TYPE_CHECK_INSTANCE_TYPE \
76 	((obj), CAMEL_TYPE_VEE_DATA_CACHE))
77 #define CAMEL_IS_VEE_DATA_CACHE_CLASS(cls) \
78 	(G_TYPE_CHECK_CLASS_TYPE \
79 	((cls), CAMEL_TYPE_VEE_DATA_CACHE))
80 #define CAMEL_VEE_DATA_CACHE_GET_CLASS(obj) \
81 	(G_TYPE_INSTANCE_GET_CLASS \
82 	((obj), CAMEL_TYPE_VEE_DATA_CACHE, CamelVeeDataCacheClass))
83 
84 G_BEGIN_DECLS
85 
86 typedef struct _CamelVeeSubfolderData CamelVeeSubfolderData;
87 typedef struct _CamelVeeSubfolderDataClass CamelVeeSubfolderDataClass;
88 typedef struct _CamelVeeSubfolderDataPrivate CamelVeeSubfolderDataPrivate;
89 
90 typedef struct _CamelVeeMessageInfoData CamelVeeMessageInfoData;
91 typedef struct _CamelVeeMessageInfoDataClass CamelVeeMessageInfoDataClass;
92 typedef struct _CamelVeeMessageInfoDataPrivate CamelVeeMessageInfoDataPrivate;
93 
94 typedef struct _CamelVeeDataCache CamelVeeDataCache;
95 typedef struct _CamelVeeDataCacheClass CamelVeeDataCacheClass;
96 typedef struct _CamelVeeDataCachePrivate CamelVeeDataCachePrivate;
97 
98 /**
99  * CamelForeachInfoData:
100  * @mi_data: a #CamelVeeMessageInfoData
101  * @subfolder: a #CamelFolder which @mi_data references
102  * @user_data: custom user data
103  *
104  * A callback prototype for camel_vee_data_cache_foreach_message_info_data()
105  **/
106 typedef void (*CamelForeachInfoData) (CamelVeeMessageInfoData *mi_data, CamelFolder *subfolder, gpointer user_data);
107 
108 /**
109  * CamelVeeSubfolderData:
110  *
111  * Contains only private data that should be read and manipulated using the
112  * functions below.
113  *
114  * Since: 3.6
115  **/
116 struct _CamelVeeSubfolderData {
117 	/*< private >*/
118 	GObject parent;
119 	CamelVeeSubfolderDataPrivate *priv;
120 };
121 
122 struct _CamelVeeSubfolderDataClass {
123 	GObjectClass parent_class;
124 
125 	/* Padding for future expansion */
126 	gpointer reserved[20];
127 };
128 
129 GType		camel_vee_subfolder_data_get_type
130 						(void) G_GNUC_CONST;
131 CamelVeeSubfolderData *
132 		camel_vee_subfolder_data_new	(CamelFolder *folder);
133 CamelFolder *	camel_vee_subfolder_data_get_folder
134 						(CamelVeeSubfolderData *data);
135 const gchar *	camel_vee_subfolder_data_get_folder_id
136 						(CamelVeeSubfolderData *data);
137 
138 /* ----------------------------------------------------------------------- */
139 
140 /**
141  * CamelVeeMessageInfoData:
142  *
143  * Contains only private data that should be read and manipulated using the
144  * functions below.
145  *
146  * Since: 3.6
147  **/
148 struct _CamelVeeMessageInfoData {
149 	/*< private >*/
150 	GObject parent;
151 	CamelVeeMessageInfoDataPrivate *priv;
152 };
153 
154 struct _CamelVeeMessageInfoDataClass {
155 	GObjectClass parent_class;
156 
157 	/* Padding for future expansion */
158 	gpointer reserved[20];
159 };
160 
161 GType		camel_vee_message_info_data_get_type
162 						(void) G_GNUC_CONST;
163 CamelVeeMessageInfoData *
164 		camel_vee_message_info_data_new
165 						(CamelVeeSubfolderData *subfolder_data,
166 						 const gchar *orig_message_uid);
167 CamelVeeSubfolderData *
168 		camel_vee_message_info_data_get_subfolder_data
169 						(CamelVeeMessageInfoData *data);
170 const gchar *	camel_vee_message_info_data_get_orig_message_uid
171 						(CamelVeeMessageInfoData *data);
172 const gchar *	camel_vee_message_info_data_get_vee_message_uid
173 						(CamelVeeMessageInfoData *data);
174 
175 /* ----------------------------------------------------------------------- */
176 
177 /**
178  * CamelVeeDataCache:
179  *
180  * Contains only private data that should be read and manipulated using the
181  * functions below.
182  *
183  * Since: 3.6
184  **/
185 struct _CamelVeeDataCache {
186 	/*< private >*/
187 	GObject parent;
188 	CamelVeeDataCachePrivate *priv;
189 };
190 
191 struct _CamelVeeDataCacheClass {
192 	GObjectClass parent_class;
193 
194 	/* Padding for future expansion */
195 	gpointer reserved[20];
196 };
197 
198 GType		camel_vee_data_cache_get_type	(void) G_GNUC_CONST;
199 CamelVeeDataCache *
200 		camel_vee_data_cache_new	(void);
201 void		camel_vee_data_cache_add_subfolder
202 						(CamelVeeDataCache *data_cache,
203 						 CamelFolder *subfolder);
204 void		camel_vee_data_cache_remove_subfolder
205 						(CamelVeeDataCache *data_cache,
206 						 CamelFolder *subfolder);
207 CamelVeeSubfolderData *
208 		camel_vee_data_cache_get_subfolder_data
209 						(CamelVeeDataCache *data_cache,
210 						 CamelFolder *folder);
211 gboolean	camel_vee_data_cache_contains_message_info_data
212 						(CamelVeeDataCache *data_cache,
213 						 CamelFolder *folder,
214 						 const gchar *orig_message_uid);
215 CamelVeeMessageInfoData *
216 		camel_vee_data_cache_get_message_info_data
217 						(CamelVeeDataCache *data_cache,
218 						 CamelFolder *folder,
219 						 const gchar *orig_message_uid);
220 CamelVeeMessageInfoData *
221 		camel_vee_data_cache_get_message_info_data_by_vuid
222 						(CamelVeeDataCache *data_cache,
223 						 const gchar *vee_message_uid);
224 void		camel_vee_data_cache_foreach_message_info_data
225 						(CamelVeeDataCache *data_cache,
226 						 CamelFolder *fromfolder,
227 						 CamelForeachInfoData func,
228 						 gpointer user_data);
229 void		camel_vee_data_cache_remove_message_info_data
230 						(CamelVeeDataCache *data_cache,
231 						 CamelVeeMessageInfoData *mi_data);
232 
233 G_END_DECLS
234 
235 #endif /* CAMEL_VEE_DATA_CACHE_H */
236