d786763329ec50bb96041ac758ef71fef64d0098
[modest] / src / modest-server-account-settings.c
1 /* Copyright (c) 2007, 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 #include <modest-protocol-registry.h>
31 #include <modest-server-account-settings.h>
32
33 /* 'private'/'protected' functions */
34 static void   modest_server_account_settings_class_init (ModestServerAccountSettingsClass *klass);
35 static void   modest_server_account_settings_finalize   (GObject *obj);
36 static void   modest_server_account_settings_instance_init (ModestServerAccountSettings *obj);
37
38 typedef struct _ModestServerAccountSettingsPrivate ModestServerAccountSettingsPrivate;
39 struct _ModestServerAccountSettingsPrivate {
40         gchar *hostname;
41         guint port;
42         ModestProtocolType protocol;
43         gchar *username;
44         gchar *password;
45         ModestProtocolType security_protocol;
46         ModestProtocolType auth_protocol;
47         gchar *account_name;
48         gchar *uri;
49 };
50
51 #define MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE(o)     (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
52                                                            MODEST_TYPE_SERVER_ACCOUNT_SETTINGS, \
53                                                            ModestServerAccountSettingsPrivate))
54
55 /* globals */
56 static GObjectClass *parent_class = NULL;
57
58 GType
59 modest_server_account_settings_get_type (void)
60 {
61         static GType my_type = 0;
62
63         if (!my_type) {
64                 static const GTypeInfo my_info = {
65                         sizeof(ModestServerAccountSettingsClass),
66                         NULL,   /* base init */
67                         NULL,   /* base finalize */
68                         (GClassInitFunc) modest_server_account_settings_class_init,
69                         NULL,   /* class finalize */
70                         NULL,   /* class data */
71                         sizeof(ModestServerAccountSettings),
72                         0,      /* n_preallocs */
73                         (GInstanceInitFunc) modest_server_account_settings_instance_init,
74                         NULL
75                 };
76
77                 my_type = g_type_register_static (G_TYPE_OBJECT,
78                                                   "ModestServerAccountSettings",
79                                                   &my_info, 0);
80         }
81         return my_type;
82 }
83
84 static void
85 modest_server_account_settings_class_init (ModestServerAccountSettingsClass *klass)
86 {
87         GObjectClass *gobject_class;
88         gobject_class = (GObjectClass *) klass;
89
90         parent_class = g_type_class_peek_parent (klass);
91         gobject_class->finalize = modest_server_account_settings_finalize;
92
93         g_type_class_add_private (gobject_class,
94                                   sizeof(ModestServerAccountSettingsPrivate));
95 }
96
97 static void
98 modest_server_account_settings_instance_init (ModestServerAccountSettings *obj)
99 {
100         ModestServerAccountSettingsPrivate *priv;
101
102         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (obj);
103
104         priv->hostname = NULL;
105         priv->protocol = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID;
106         priv->port = 0;
107         priv->username = NULL;
108         priv->password = NULL;
109         priv->security_protocol = MODEST_PROTOCOLS_CONNECTION_NONE;
110         priv->auth_protocol = MODEST_PROTOCOLS_AUTH_NONE;
111         priv->account_name = NULL;
112         priv->uri = NULL;
113 }
114
115 static void   
116 modest_server_account_settings_finalize   (GObject *obj)
117 {
118         ModestServerAccountSettings *settings = MODEST_SERVER_ACCOUNT_SETTINGS (obj);
119         ModestServerAccountSettingsPrivate *priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
120         g_free (priv->hostname);
121         priv->hostname = NULL;
122         g_free (priv->username);
123         priv->username = NULL;
124         g_free (priv->password);
125         priv->password = NULL;
126         priv->protocol = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID;
127         priv->port = 0;
128         priv->security_protocol = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID;
129         priv->auth_protocol = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID;
130         g_free (priv->account_name);
131         priv->account_name = NULL;
132         g_free (priv->uri);
133         priv->uri = NULL;
134
135         G_OBJECT_CLASS (parent_class)->finalize (obj);
136 }
137
138 ModestServerAccountSettings*
139 modest_server_account_settings_new (void)
140 {
141         return g_object_new (MODEST_TYPE_SERVER_ACCOUNT_SETTINGS, NULL);
142 }
143
144 const gchar* 
145 modest_server_account_settings_get_hostname (ModestServerAccountSettings *settings)
146 {
147         ModestServerAccountSettingsPrivate *priv;
148
149         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), NULL);
150
151         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);   
152         return priv->hostname;
153 }
154
155 void         
156 modest_server_account_settings_set_hostname (ModestServerAccountSettings *settings,
157                                              const gchar *hostname)
158 {
159         ModestServerAccountSettingsPrivate *priv;
160
161         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
162
163         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
164         g_free (priv->hostname);
165         priv->hostname = g_strdup (hostname);
166 }
167
168 const gchar* 
169 modest_server_account_settings_get_uri (ModestServerAccountSettings *settings)
170 {
171         ModestServerAccountSettingsPrivate *priv;
172
173         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), NULL);
174
175         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);   
176         return priv->uri;
177 }
178
179 void         
180 modest_server_account_settings_set_uri (ModestServerAccountSettings *settings,
181                                         const gchar *uri)
182 {
183         ModestServerAccountSettingsPrivate *priv;
184         
185         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
186
187         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
188         g_free (priv->uri);
189         priv->uri = g_strdup (uri);
190
191 }
192
193 const gchar* 
194 modest_server_account_settings_get_username (ModestServerAccountSettings *settings)
195 {
196         ModestServerAccountSettingsPrivate *priv;
197
198         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), NULL);
199
200         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);   
201         return priv->username;
202 }
203
204 void         
205 modest_server_account_settings_set_username (ModestServerAccountSettings *settings,
206                                              const gchar *username)
207 {
208         ModestServerAccountSettingsPrivate *priv;
209
210         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
211
212         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
213         g_free (priv->username);
214         priv->username = g_strdup (username);
215 }
216
217 const gchar* 
218 modest_server_account_settings_get_password (ModestServerAccountSettings *settings)
219 {
220         ModestServerAccountSettingsPrivate *priv;
221
222         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), NULL);
223
224         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);   
225         return priv->password;
226 }
227
228 void         
229 modest_server_account_settings_set_password (ModestServerAccountSettings *settings,
230                                              const gchar *password)
231 {
232         ModestServerAccountSettingsPrivate *priv;
233
234         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
235
236         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
237         g_free (priv->password);
238         priv->password = g_strdup (password);
239 }
240
241 const gchar* 
242 modest_server_account_settings_get_account_name (ModestServerAccountSettings *settings)
243 {
244         ModestServerAccountSettingsPrivate *priv;
245
246         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), NULL);
247
248         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);   
249         return priv->account_name;
250 }
251
252 void         
253 modest_server_account_settings_set_account_name (ModestServerAccountSettings *settings,
254                                                  const gchar *account_name)
255 {
256         ModestServerAccountSettingsPrivate *priv;
257
258         /* be careful. This method should only be used internally in #ModestAccountMgr and
259          * #ModestAccountSettings. */
260
261         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
262
263         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
264         g_free (priv->account_name);
265         priv->account_name = g_strdup (account_name);
266 }
267
268 ModestProtocolType
269 modest_server_account_settings_get_protocol (ModestServerAccountSettings *settings)
270 {
271         ModestServerAccountSettingsPrivate *priv;
272
273         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), MODEST_PROTOCOL_REGISTRY_TYPE_INVALID);
274
275         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
276         return priv->protocol;
277 }
278
279 void                          
280 modest_server_account_settings_set_protocol (ModestServerAccountSettings *settings,
281                                              ModestProtocolType protocol)
282 {
283         ModestServerAccountSettingsPrivate *priv;
284
285         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
286
287         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
288         priv->protocol = protocol;
289         
290 }
291
292 guint  
293 modest_server_account_settings_get_port (ModestServerAccountSettings *settings)
294 {
295         ModestServerAccountSettingsPrivate *priv;
296
297         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), 0);
298
299         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
300         return priv->port;
301 }
302
303 void   
304 modest_server_account_settings_set_port (ModestServerAccountSettings *settings,
305                                          guint port)
306 {
307         ModestServerAccountSettingsPrivate *priv;
308
309         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
310
311         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
312         priv->port = port;
313 }
314
315 ModestProtocolType
316 modest_server_account_settings_get_security_protocol (ModestServerAccountSettings *settings)
317 {
318         ModestServerAccountSettingsPrivate *priv;
319
320         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), MODEST_PROTOCOL_REGISTRY_TYPE_INVALID);
321
322         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
323         return priv->security_protocol;
324 }
325
326 void   
327 modest_server_account_settings_set_security_protocol (ModestServerAccountSettings *settings,
328                                                       ModestProtocolType security_protocol)
329 {
330         ModestServerAccountSettingsPrivate *priv;
331
332         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
333
334         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
335         priv->security_protocol = security_protocol;
336 }
337
338 ModestProtocolType
339 modest_server_account_settings_get_auth_protocol (ModestServerAccountSettings *settings)
340 {
341         ModestServerAccountSettingsPrivate *priv;
342
343         g_return_val_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings), MODEST_PROTOCOL_REGISTRY_TYPE_INVALID);
344
345         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
346         return priv->auth_protocol;
347 }
348
349 void   
350 modest_server_account_settings_set_auth_protocol (ModestServerAccountSettings *settings,
351                                                   ModestProtocolType auth_protocol)
352 {
353         ModestServerAccountSettingsPrivate *priv;
354
355         g_return_if_fail (MODEST_IS_SERVER_ACCOUNT_SETTINGS (settings));
356
357         priv = MODEST_SERVER_ACCOUNT_SETTINGS_GET_PRIVATE (settings);
358         priv->auth_protocol = auth_protocol;
359 }
360