test the mbox provider.
[platform/upstream/evolution-data-server.git] / camel / camel-folder.h
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /* camelFolder.h : Abstract class for an email folder */
3
4 /* 
5  *
6  * Author : 
7  *  Bertrand Guiheneuf <bertrand@helixcode.com>
8  *
9  * Copyright 1999, 2000 HelixCode (http://www.helixcode.com) .
10  *
11  * This program is free software; you can redistribute it and/or 
12  * modify it under the terms of the GNU General Public License as 
13  * published by the Free Software Foundation; either version 2 of the
14  * License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
24  * USA
25  */
26
27
28 #ifndef CAMEL_FOLDER_H
29 #define CAMEL_FOLDER_H 1
30
31
32 #ifdef __cplusplus
33 extern "C" {
34 #pragma }
35 #endif /* __cplusplus }*/
36
37 #include <gtk/gtk.h>
38
39 typedef struct _CamelFolder CamelFolder;
40
41 #include "camel-store.h"
42 #include "camel-mime-message.h"
43 #include "camel-folder-summary.h"
44 #include "camel-exception.h"
45
46 #define CAMEL_FOLDER_TYPE     (camel_folder_get_type ())
47 #define CAMEL_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_FOLDER_TYPE, CamelFolder))
48 #define CAMEL_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_FOLDER_TYPE, CamelFolderClass))
49 #define CAMEL_IS_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_FOLDER_TYPE))
50
51 typedef enum {
52         FOLDER_OPEN,
53         FOLDER_CLOSE
54 } CamelFolderState;
55
56 typedef enum {
57         FOLDER_OPEN_UNKNOWN = 0,   /* folder open mode is unknown */
58         FOLDER_OPEN_READ    = 1,   /* folder is read only         */ 
59         FOLDER_OPEN_WRITE   = 2,   /* folder is write only        */ 
60         FOLDER_OPEN_RW      = 3    /* folder is read/write        */ 
61 } CamelFolderOpenMode;
62
63 typedef void (*CamelFolderAsyncCallback) ();
64
65 struct _CamelFolder
66 {
67         GtkObject parent_object;
68         
69         gboolean can_hold_folders;
70         gboolean can_hold_messages;
71         CamelFolderOpenMode open_mode;
72         CamelFolderState open_state;
73         gchar *name;
74         gchar *full_name;
75         CamelStore *parent_store;
76         CamelFolder *parent_folder;
77         GList *permanent_flags;
78
79         gboolean has_summary_capability;
80         CamelFolderSummary *summary;
81
82         gboolean has_uid_capability;
83
84 };
85
86
87
88 typedef struct {
89         GtkObjectClass parent_class;
90         
91         /* Virtual methods */   
92         void   (*init_with_store)  (CamelFolder *folder, 
93                                     CamelStore *parent_store, 
94                                     CamelException *ex);
95
96         void   (*open) (CamelFolder *folder, 
97                         CamelFolderOpenMode mode, 
98                         CamelException *ex);
99         
100         void   (*close) (CamelFolder *folder, 
101                          gboolean expunge, 
102                          CamelException *ex);
103
104         void   (*open_async) (CamelFolder *folder, 
105                               CamelFolderOpenMode mode, 
106                               CamelFolderAsyncCallback callback, 
107                               gpointer user_data, 
108                               CamelException *ex);
109
110         void   (*close_async) (CamelFolder *folder, 
111                                gboolean expunge, 
112                                CamelFolderAsyncCallback callback, 
113                                gpointer user_data, 
114                                CamelException *ex);
115
116         void   (*set_name)  (CamelFolder *folder, 
117                              const gchar *name, 
118                              CamelException *ex);
119
120         /*      void   (*set_full_name) (CamelFolder *folder, const gchar *name); */
121         
122         const gchar *  (*get_name)  (CamelFolder *folder, 
123                                      CamelException *ex);
124
125         const gchar *  (*get_full_name)  (CamelFolder *folder, 
126                                           CamelException *ex);
127
128         gboolean   (*can_hold_folders)   (CamelFolder *folder, 
129                                           CamelException *ex);
130
131         gboolean   (*can_hold_messages)  (CamelFolder *folder, 
132                                           CamelException *ex);
133
134         gboolean   (*exists)  (CamelFolder *folder, 
135                                CamelException *ex);
136
137         gboolean   (*is_open) (CamelFolder *folder, 
138                                CamelException *ex);
139
140         CamelFolder *  (*get_subfolder)  (CamelFolder *folder, 
141                                           const gchar *folder_name, 
142                                           CamelException *ex);
143
144         gboolean   (*create)  (CamelFolder *folder,
145                                CamelException *ex);
146
147         gboolean   (*delete)  (CamelFolder *folder, 
148                                gboolean recurse, 
149                                CamelException *ex);
150         
151         gboolean   (*delete_messages) (CamelFolder *folder, 
152                                        CamelException *ex);
153
154         CamelFolder *  (*get_parent_folder)   (CamelFolder *folder, 
155                                                CamelException *ex);
156
157         CamelStore *  (*get_parent_store) (CamelFolder *folder, 
158                                            CamelException *ex);
159
160         CamelFolderOpenMode (*get_mode)   (CamelFolder *folder, 
161                                            CamelException *ex);
162
163         GList *  (*list_subfolders)   (CamelFolder *folder, 
164                                        CamelException *ex);
165
166         GList *  (*expunge)  (CamelFolder *folder, 
167                            CamelException *ex);
168
169         gboolean (*has_message_number_capability) (CamelFolder *folder, CamelException *ex);
170
171         CamelMimeMessage * (*get_message_by_number) (CamelFolder *folder, 
172                                                      gint number, 
173                                                      CamelException *ex);
174         
175         gint   (*get_message_count)   (CamelFolder *folder, 
176                                        CamelException *ex);
177
178         void (*append_message)  (CamelFolder *folder, 
179                                  CamelMimeMessage *message, 
180                                  CamelException *ex);
181         
182         const GList * (*list_permanent_flags) (CamelFolder *folder, 
183                                                CamelException *ex);
184
185         void   (*copy_message_to) (CamelFolder *folder, 
186                                    CamelMimeMessage *message, 
187                                    CamelFolder *dest_folder, 
188                                    CamelException *ex);
189         
190         gboolean (*has_uid_capability) (CamelFolder *folder);
191
192         const gchar * (*get_message_uid)  (CamelFolder *folder, 
193                                            CamelMimeMessage *message, 
194                                            CamelException *ex);
195
196         CamelMimeMessage * (*get_message_by_uid)  (CamelFolder *folder, 
197                                                    const gchar *uid, 
198                                                    CamelException *ex);
199
200         GList * (*get_uid_list)  (CamelFolder *folder, 
201                                   CamelException *ex);
202
203 } CamelFolderClass;
204
205
206
207 /* Standard Gtk function */
208 GtkType camel_folder_get_type (void);
209
210
211 /* public methods */
212
213
214
215 CamelFolder *camel_folder_get_subfolder (CamelFolder *folder, 
216                                       gchar *folder_name, 
217                                       CamelException *ex);
218
219 void camel_folder_open (CamelFolder *folder, 
220                         CamelFolderOpenMode mode, 
221                         CamelException *ex);
222
223
224 void camel_folder_close (CamelFolder *folder, 
225                          gboolean expunge, 
226                          CamelException *ex);
227
228 gboolean camel_folder_create (CamelFolder *folder, CamelException *ex);
229 CamelFolder *camel_folder_get_parent_folder (CamelFolder *folder, CamelException *ex);
230 CamelStore *camel_folder_get_parent_store (CamelFolder *folder, CamelException *ex);
231 GList *camel_folder_list_subfolders (CamelFolder *folder, CamelException *ex);
232
233
234 /* delete operations */
235 gboolean camel_folder_delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
236 gboolean camel_folder_delete_messages (CamelFolder *folder, CamelException *ex);
237 GList *camel_folder_expunge (CamelFolder *folder, CamelException *ex);
238
239
240 /* folder name manipulation operations */
241 void camel_folder_set_name (CamelFolder *folder, 
242                             const gchar *name, 
243                             CamelException *ex);
244 const gchar *camel_folder_get_name (CamelFolder *folder, CamelException *ex);
245 const gchar *camel_folder_get_full_name (CamelFolder *folder, CamelException *ex);
246
247
248 /* various properties accessors */
249 gboolean camel_folder_exists (CamelFolder *folder, CamelException *ex);
250 const GList *camel_folder_list_permanent_flags (CamelFolder *folder, CamelException *ex);
251 CamelFolderOpenMode camel_folder_get_mode (CamelFolder *folder, CamelException *ex);
252 gboolean camel_folder_is_open (CamelFolder *folder, CamelException *ex);
253
254
255
256 /* message manipulation */
257 void  camel_folder_append_message  (CamelFolder *folder, 
258                                     CamelMimeMessage *message, CamelException *ex);
259 void camel_folder_copy_message_to (CamelFolder *folder, 
260                                    CamelMimeMessage *message, 
261                                    CamelFolder *dest_folder, 
262                                    CamelException *ex);
263
264
265 /* summary related operations */
266 gboolean camel_folder_has_summary_capability (CamelFolder *folder, CamelException *ex);
267 CamelFolderSummary *camel_folder_get_summary (CamelFolder *folder, CamelException *ex);
268
269
270 /* number based access operations */
271 gboolean camel_folder_has_message_number_capability (CamelFolder *folder, CamelException *ex);
272 CamelMimeMessage *camel_folder_get_message_by_number (CamelFolder *folder, 
273                                                       gint number, CamelException *ex);
274 gint camel_folder_get_message_count (CamelFolder *folder, CamelException *ex);
275
276
277 /* uid based access operations */
278 gboolean camel_folder_has_uid_capability (CamelFolder *folder, CamelException *ex);
279 const gchar * camel_folder_get_message_uid (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
280 CamelMimeMessage *camel_folder_get_message_by_uid  (CamelFolder *folder, const gchar *uid, CamelException *ex);
281 GList *camel_folder_get_uid_list  (CamelFolder *folder, CamelException *ex);
282
283
284
285
286
287
288 #ifdef __cplusplus
289 }
290 #endif /* __cplusplus */
291
292 #endif /* CAMEL_FOLDER_H */
293