Do not exclude embedded messages in remove attachment dialogs
[modest] / src / modest-account-protocol.h
1 /* Copyright (c) 2008, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30
31 /* modest-account-settings.h */
32
33 #ifndef __MODEST_ACCOUNT_PROTOCOL_H__
34 #define __MODEST_ACCOUNT_PROTOCOL_H__
35
36 #include "widgets/modest-account-settings-dialog.h"
37 #include "modest-protocol.h"
38 #include "widgets/modest-wizard-dialog.h"
39 #include "modest-pair.h"
40 #include <tny-account.h>
41 #include <tny-list.h>
42
43 G_BEGIN_DECLS
44
45 /* convenience macros */
46 #define MODEST_TYPE_ACCOUNT_PROTOCOL             (modest_account_protocol_get_type())
47 #define MODEST_ACCOUNT_PROTOCOL(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_ACCOUNT_PROTOCOL,ModestAccountProtocol))
48 #define MODEST_ACCOUNT_PROTOCOL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_ACCOUNT_PROTOCOL,ModestAccountProtocolClass))
49 #define MODEST_IS_ACCOUNT_PROTOCOL(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_ACCOUNT_PROTOCOL))
50 #define MODEST_IS_ACCOUNT_PROTOCOL_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_ACCOUNT_PROTOCOL))
51 #define MODEST_ACCOUNT_PROTOCOL_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_ACCOUNT_PROTOCOL,ModestAccountProtocolClass))
52
53 typedef struct _ModestAccountProtocol      ModestAccountProtocol;
54 typedef struct _ModestAccountProtocolClass ModestAccountProtocolClass;
55
56 typedef void (*ModestAccountProtocolCheckSupportFunc) (ModestAccountProtocol *self, 
57                                                        gboolean supported, gpointer userdata);
58
59
60 struct _ModestAccountProtocol {
61         ModestProtocol parent;
62 };
63
64 struct _ModestAccountProtocolClass {
65         ModestProtocolClass parent_class;
66
67         /* Virtual methods */
68         TnyAccount * (*create_account) (ModestAccountProtocol *self);
69         ModestAccountSettingsDialog* (*create_account_settings_dialog) (ModestAccountProtocol* self);
70         ModestPairList* (*get_easysetupwizard_tabs) (ModestAccountProtocol* self);
71         ModestWizardDialogResponseOverrideFunc (*get_wizard_response_override) (ModestAccountProtocol *self);
72         void (*save_settings) (ModestAccountProtocol *self, ModestAccountSettingsDialog *dialog, ModestAccountSettings *settings);
73         void (*save_wizard_settings) (ModestAccountProtocol *self, GList *wizard_pages, ModestAccountSettings *settings);
74         gboolean (*is_supported) (ModestAccountProtocol *self);
75         void (*check_support) (ModestAccountProtocol *self, ModestAccountProtocolCheckSupportFunc func, gpointer userdata);
76         gchar * (*get_from) (ModestAccountProtocol *self, const gchar *account_id, const gchar *mailbox);
77         ModestPairList * (*get_from_list) (ModestAccountProtocol *self, const gchar *account_id);
78         gchar * (*get_signature) (ModestAccountProtocol *self, const gchar *account_id, const gchar *mailbox, gboolean *has_signature);
79 };
80
81 /**
82  * modest_account_protocol_get_type:
83  *
84  * Returns: GType of the account protocol type
85  */
86 GType  modest_account_protocol_get_type   (void) G_GNUC_CONST;
87
88 /**
89  * modest_account_protocol_new:
90  *
91  * creates a new instance of #ModestAccountProtocol
92  *
93  * Returns: a #ModestAccountProtocol
94  */
95 ModestProtocol*    modest_account_protocol_new (const gchar *name, const gchar *display_name, 
96                                                 guint port, guint alternate_port,
97                                                 GType account_g_type);
98
99 /**
100  * modest_account_protocol_get_port:
101  * @self: a #ModestAccountProtocol
102  *
103  * get the protocol standard port
104  *
105  * Returns: a string
106  */
107 guint modest_account_protocol_get_port (ModestAccountProtocol *self);
108
109 /**
110  * modest_account_protocol_set_port:
111  * @self: a #ModestAccountProtocol
112  * @port: a #guint
113  *
114  * set @port as the protocol standard port
115  */
116 void         modest_account_protocol_set_port (ModestAccountProtocol *self,
117                                                guint port);
118
119 /**
120  * modest_account_protocol_get_alternate_port:
121  * @self: a #ModestAccountProtocol
122  *
123  * get the protocol standard alternate_port
124  *
125  * Returns: a #guint
126  */
127 guint modest_account_protocol_get_alternate_port (ModestAccountProtocol *self);
128
129 /**
130  * modest_account_protocol_set_alternate_port:
131  * @self: a #ModestAccountProtocol
132  * @alternate_port: a #guint
133  *
134  * set @alternate_port as the protocol alternate port
135  */
136 void         modest_account_protocol_set_alternate_port (ModestAccountProtocol *self,
137                                                          guint alternate_port);
138
139 /**
140  * modest_account_protocol_set_account_options:
141  * @self: a #ModestAccountProtocol
142  * @account_options: a #TnyList of account options and their values
143  *
144  * set the account options that will be passed to TnyCamelAccount for this protocol.
145  * This replaces previous option lists for this protocol
146  */
147 void modest_account_protocol_set_account_options (ModestAccountProtocol *self,
148                                                   TnyList *account_options);
149
150 /**
151  * modest_account_protocol_get_account_options:
152  * @self: a #ModestAccountProtocol
153  *
154  * obtain the account options for this account protocol.
155  *
156  * Returns: a caller-owner copy of the account options list.
157  */
158 TnyList *modest_account_protocol_get_account_options (ModestAccountProtocol *self);
159
160 /**
161  * modest_account_protocol_has_custom_secure_auth_mech:
162  * @self: a #ModestAccountProtocol
163  * @auth_protocol_type: a #ModestProtocolType for an auth protocol
164  *
165  * checks whether there's a custom secure auth mech camel string for @auth_protocol_type.
166  *
167  * Returns: %TRUE if registered, %FALSE otherwise
168  */
169 gboolean
170 modest_account_protocol_has_custom_secure_auth_mech (ModestAccountProtocol *self, ModestProtocolType auth_protocol_type);
171
172 /**
173  * modest_account_protocol_get_custom_secure_auth_mech:
174  * @self: a #ModestAccountProtocol
175  * @auth_protocol_type: a #ModestProtocolType for an auth protocol
176  *
177  * obtains the secure auth mech of @auth_protocol_type in protocol. Be careful as %NULL does not imply
178  * there's no custom auth mech registered (you can register %NULL). To check if it's registered, just
179  * use modest_account_protocol_has_custom_secure_auth_mech().
180  *
181  * Returns: the secure auth mech for this auth protocol type that will be passed to camel.
182  */
183 const gchar *
184 modest_account_protocol_get_custom_secure_auth_mech (ModestAccountProtocol *self, ModestProtocolType auth_protocol_type);
185
186 /**
187  * modest_account_protocol_unset_custom_secure_auth_mech:
188  * @self: a #ModestAccountProtocol
189  * @auth_protocol_type: a #ModestProtocolType for an auth protocol
190  *
191  * Unsets the secure auth meth of @auth_protocol_type in protocol.
192  */
193 void
194 modest_account_protocol_unset_custom_secure_auth_mech (ModestAccountProtocol *self, ModestProtocolType auth_protocol_type);
195
196 /**
197  * modest_account_protocol_set_custom_secure_auth_mech:
198  * @self: a #ModestAccountProtocol
199  * @auth_protocol_type: a #ModestProtocolType for an auth protocol
200  * @secure_auth_mech: a string or %NULL
201  *
202  * sets the secure auth mech of @auth_protocol_type in protocol. Be careful as %NULL does not imply
203  * there's no custom auth mech registered (you can register %NULL). If you set %NULL you're regitering %NULL as the custom secure auth
204  * mechanism instead of unsetting it.
205  */
206 void
207 modest_account_protocol_set_custom_secure_auth_mech (ModestAccountProtocol *self, ModestProtocolType auth_protocol_type, const gchar *secure_auth_mech);
208
209 /**
210  * modest_account_protocol_get_account_g_type:
211  * @self: a #ModestAccountProtocol
212  *
213  * get the protocol type used for factoring new TnyAccount
214  *
215  * Returns: a #GType
216  */
217 GType modest_account_protocol_get_account_g_type (ModestAccountProtocol *self);
218
219 /**
220  * modest_account_protocol_set_account_g_type:
221  * @self: a #ModestAccountProtocol
222  * @account_g_type: a #GType
223  *
224  * set @account_g_type as the type modest_account_protocol_create_account will
225  * instanciate
226  */
227 void         modest_account_protocol_set_account_g_type (ModestAccountProtocol *self,
228                                                          GType account_g_type);
229
230 /**
231  * modest_account_protocol_create_account:
232  * @self: a #ModestAccountProtocol
233  *
234  * create a new account instance for this protocol
235  *
236  * Returns: a #TnyAccount
237  */
238 TnyAccount * modest_account_protocol_create_account (ModestAccountProtocol *self);
239
240 /**
241  * modest_account_protocol_get_account_settings_dialog:
242  * @self: a #ModestAccountProtocol
243  * @account_name: the name of the account we're creating the dialog for
244  * 
245  * retrieves the account settings dialog used to setup the account
246  * represented by this protocol
247  * 
248  * Returns: a #ModestAccountSettingsDialog
249  **/
250 ModestAccountSettingsDialog* modest_account_protocol_get_account_settings_dialog (ModestAccountProtocol *self,
251                                                                                   const gchar *account_name);
252
253 ModestPairList* modest_account_protocol_get_easysetupwizard_tabs (ModestAccountProtocol *self);
254
255 /**
256  * modest_account_protocol_save_settings:
257  * @self: this #ModestAccountProtocol
258  * @dialog: a #ModestAccountSettingsDialog
259  * @settings: the #ModestAccountSettings
260  * 
261  * this function stores the values held by the account settings dialog
262  * in the account settings object that is passed as argument
263  *
264  * NOTE: this function provides a default implementation that calls
265  * the save_settings method of the acocunt settings dialog. So if your
266  * implementation do not do anything more just do not redefine it
267  **/
268 void modest_account_protocol_save_settings (ModestAccountProtocol *self, 
269                                             ModestAccountSettingsDialog *dialog,
270                                             ModestAccountSettings *settings);
271
272 /**
273  * modest_account_protocol_save_wizard_settings:
274  * @self: this #ModestAccountProtocol
275  * @wizard_pages: a list of #ModestEasysetupWizardPage
276  * @settings: the #ModestAccountSettings
277  * 
278  * this function stores the data input by the users in the wizard in
279  * the account settings object passed as argument
280  **/
281 void modest_account_protocol_save_wizard_settings (ModestAccountProtocol *self, 
282                                                    GList *wizard_pages,
283                                                    ModestAccountSettings *settings);
284
285 /**
286  * modest_account_protocol_get_wizard_response_override:
287  * @self: a #ModestAccountProtocol
288  *
289  * obtains the method that should be used to override wizard response behavior when the
290  * wizard is setting up this account type.
291  *
292  * Returns: a #ModestWizardDialogResponseOverrideFunc
293  */
294 ModestWizardDialogResponseOverrideFunc modest_account_protocol_get_wizard_response_override (ModestAccountProtocol *self);
295
296
297 /**
298  * modest_account_protocol_check_support:
299  * @self: a #ModestAccountProtocol
300  * @func: a #ModestAccountProtocolCheckSupportFunc
301  * @userdata: a gpointer
302  *
303  * This method checks asynchronously if the account protocol @self is
304  * supported. Once checked, @func will be called with the result in the
305  * mainloop.
306  *
307  * modest_account_protocol_is_supported() should return the cached response
308  * from this method.
309  */
310 void modest_account_protocol_check_support (ModestAccountProtocol *self, 
311                                             ModestAccountProtocolCheckSupportFunc func, 
312                                             gpointer userdata);
313 /**
314  * modest_account_protocol_is_supported:
315  * @self: a #ModestAccountProtocol
316  *
317  * Determines if the account protocol is supported on this device.
318  *
319  * Returns: %TRUE if the protocol is supported, %FALSE otherwise
320  */
321 gboolean modest_account_protocol_is_supported (ModestAccountProtocol *self);
322
323 /**
324  * modest_account_protocol_get_from:
325  * @self: a #ModestAccountProtocol
326  * @account_id: a transport account name
327  * @mailbox: a mailbox
328  *
329  * Obtain the From: string for the account and mailbox. Should be used only
330  * with transports with multi mailbox support.
331  *
332  * Returns: a newly allocated string
333  */
334 gchar *modest_account_protocol_get_from (ModestAccountProtocol *self,
335                                          const gchar *account_id,
336                                          const gchar *mailbox);
337
338 /**
339  * modest_account_protocol_get_from_list:
340  * @self: a #ModestAccountProtocol
341  * @account_id: a transport account name
342  *
343  * Obtain a list of pairs (mailbox - From: string) for filling the From picker.
344  *
345  * Returns: a ModestPairList
346  */
347 ModestPairList *modest_account_protocol_get_from_list (ModestAccountProtocol *self,
348                                                        const gchar *account_id);
349
350 /**
351  * modest_account_protocol_get_signature:
352  * @self: a #ModestAccountProtocol
353  * @account_id: a transport account name
354  * @mailbox: a mailbox
355  *
356  * Obtain the signature string for the account and mailbox. Should be used only
357  * with transports with multi mailbox support.
358  *
359  * Returns: a newly allocated string
360  */
361 gchar *modest_account_protocol_get_signature (ModestAccountProtocol *self,
362                                               const gchar *account_id,
363                                               const gchar *mailbox,
364                                               gboolean *has_signature);
365
366 G_END_DECLS
367
368 #endif /* __MODEST_ACCOUNT_PROTOCOL_H__ */