1 /* modest-identity-mgr.c */
3 /* insert (c)/licensing information) */
6 #include "modest-identity-mgr.h"
8 /* 'private'/'protected' functions */
9 static void modest_identity_mgr_class_init (ModestIdentityMgrClass * klass);
10 static void modest_identity_mgr_init (ModestIdentityMgr * obj);
11 static void modest_identity_mgr_finalize (GObject * obj);
13 static gchar *get_identity_keyname (const gchar * accname,
23 typedef struct _ModestIdentityMgrPrivate ModestIdentityMgrPrivate;
24 struct _ModestIdentityMgrPrivate {
25 ModestConf *modest_conf;
28 #define MODEST_IDENTITY_MGR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
29 MODEST_TYPE_IDENTITY_MGR, \
30 ModestIdentityMgrPrivate))
32 static GObjectClass *parent_class = NULL;
34 /* uncomment the following if you have defined any signals */
35 /* static guint signals[LAST_SIGNAL] = {0}; */
38 modest_identity_mgr_get_type (void)
40 static GType my_type = 0;
43 static const GTypeInfo my_info = {
44 sizeof (ModestIdentityMgrClass),
46 NULL, /* base finalize */
47 (GClassInitFunc) modest_identity_mgr_class_init,
48 NULL, /* class finalize */
49 NULL, /* class data */
50 sizeof (ModestIdentityMgr),
52 (GInstanceInitFunc) modest_identity_mgr_init,
55 my_type = g_type_register_static (G_TYPE_OBJECT,
63 modest_identity_mgr_class_init (ModestIdentityMgrClass * klass)
65 GObjectClass *gobject_class;
67 gobject_class = (GObjectClass *) klass;
69 parent_class = g_type_class_peek_parent (klass);
70 gobject_class->finalize = modest_identity_mgr_finalize;
72 g_type_class_add_private (gobject_class,
73 sizeof (ModestIdentityMgrPrivate));
75 /* signal definitions go here, e.g.: */
76 /* signals[MY_SIGNAL_1] = */
77 /* g_signal_new ("my_signal_1",....); */
78 /* signals[MY_SIGNAL_2] = */
79 /* g_signal_new ("my_signal_2",....); */
85 modest_identity_mgr_init (ModestIdentityMgr * obj)
87 ModestIdentityMgrPrivate *priv =
88 MODEST_IDENTITY_MGR_GET_PRIVATE (obj);
89 priv->modest_conf = NULL;
93 modest_identity_mgr_finalize (GObject * obj)
95 ModestIdentityMgr *self = MODEST_IDENTITY_MGR (obj);
96 ModestIdentityMgrPrivate *priv =
97 MODEST_IDENTITY_MGR_GET_PRIVATE (self);
99 g_object_unref (G_OBJECT (priv->modest_conf));
100 priv->modest_conf = NULL;
104 modest_identity_mgr_new (ModestConf * conf)
107 ModestIdentityMgrPrivate *priv;
109 g_return_val_if_fail (conf, NULL);
111 obj = G_OBJECT (g_object_new (MODEST_TYPE_IDENTITY_MGR, NULL));
112 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (obj);
115 * increase the ref count on the modest_conf. Normally, the
116 * ModestConf should outlive the ModestIdentityMgr though
118 g_object_ref (G_OBJECT (priv->modest_conf = conf));
124 modest_identity_mgr_remove_identity (ModestIdentityMgr * self,
125 const gchar * name, GError ** err)
127 ModestIdentityMgrPrivate *priv;
131 g_return_val_if_fail (self, FALSE);
132 g_return_val_if_fail (name, FALSE);
134 if (!modest_identity_mgr_identity_exists (self, name, err)) {
135 g_warning ("identity doest not exist");
139 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
140 key = get_identity_keyname (name, NULL);
142 retval = modest_conf_remove_key (priv->modest_conf, key, NULL);
150 null_means_empty (const gchar * str)
152 return str ? str : "";
157 modest_identity_mgr_add_identity (ModestIdentityMgr * self,
159 const gchar * realname,
161 const gchar * replyto,
162 const gchar * signature,
163 const gboolean use_signature,
164 const gchar * id_via,
165 const gboolean use_id_via)
167 ModestIdentityMgrPrivate *priv;
170 g_return_val_if_fail (self, FALSE);
171 g_return_val_if_fail (name, FALSE);
173 /* TODO: check already exists */
175 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
176 id_key = g_strconcat (MODEST_IDENTITY_NAMESPACE, "/", name, NULL);
178 if (modest_conf_key_exists (priv->modest_conf, id_key, NULL)) {
179 g_warning ("identity %s already exists", name);
185 key = g_strconcat (id_key, "/", MODEST_IDENTITY_REALNAME, NULL);
186 modest_conf_set_string (priv->modest_conf, key,
187 null_means_empty (realname), NULL);
191 key = g_strconcat (id_key, "/", MODEST_IDENTITY_EMAIL, NULL);
192 modest_conf_set_string (priv->modest_conf, key,
193 null_means_empty (email), NULL);
197 key = g_strconcat (id_key, "/", MODEST_IDENTITY_REPLYTO, NULL);
198 modest_conf_set_string (priv->modest_conf, key,
199 null_means_empty (replyto), NULL);
203 key = g_strconcat (id_key, "/", MODEST_IDENTITY_SIGNATURE, NULL);
204 modest_conf_set_string (priv->modest_conf, key,
205 null_means_empty (signature), NULL);
209 key = g_strconcat (id_key, "/", MODEST_IDENTITY_USE_SIGNATURE, NULL);
210 modest_conf_set_bool (priv->modest_conf, key, use_signature, NULL);
214 key = g_strconcat (id_key, "/", MODEST_IDENTITY_ID_VIA, NULL);
215 modest_conf_set_string (priv->modest_conf, key,
216 null_means_empty (id_via), NULL);
220 key = g_strconcat (id_key, "/", MODEST_IDENTITY_USE_ID_VIA, NULL);
221 modest_conf_set_bool (priv->modest_conf, key, use_id_via, NULL);
226 return TRUE; /* FIXME: better error checking */
229 /* strip the first /n/ character from each element */
230 /* caller must make sure all elements are strings with
231 * length >= n, and also that data can be freed.
233 /* this function is copied from modest-account-mgr. Maybe it should be moved
234 * to modest-list-utils or the like...
237 strip_prefix_from_elements (GSList * lst, guint n)
239 GSList *cursor = lst;
242 gchar *str = (gchar *) cursor->data;
244 cursor->data = g_strdup (str + n);
246 cursor = cursor->next;
252 modest_identity_mgr_identity_names (ModestIdentityMgr * self, GError ** err)
255 ModestIdentityMgrPrivate *priv;
256 const size_t prefix_len = strlen (MODEST_IDENTITY_NAMESPACE "/");
259 g_return_val_if_fail (self, NULL);
261 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
263 identities = modest_conf_list_subkeys (priv->modest_conf,
264 MODEST_IDENTITY_NAMESPACE,
266 return strip_prefix_from_elements (identities, prefix_len);
271 modest_identity_mgr_get_identity_string (ModestIdentityMgr * self,
273 const gchar * key, GError ** err)
275 ModestIdentityMgrPrivate *priv;
280 g_return_val_if_fail (self, NULL);
281 g_return_val_if_fail (name, NULL);
282 g_return_val_if_fail (key, NULL);
284 keyname = get_identity_keyname (name, key);
286 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
287 retval = modest_conf_get_string (priv->modest_conf, keyname, err);
295 modest_identity_mgr_get_identity_int (ModestIdentityMgr * self,
296 const gchar * name, const gchar * key,
299 ModestIdentityMgrPrivate *priv;
304 g_return_val_if_fail (self, -1);
305 g_return_val_if_fail (name, -1);
306 g_return_val_if_fail (key, -1);
308 keyname = get_identity_keyname (name, key);
309 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
310 retval = modest_conf_get_int (priv->modest_conf, keyname, err);
319 modest_identity_mgr_get_identity_bool (ModestIdentityMgr * self,
320 const gchar * name, const gchar * key,
323 ModestIdentityMgrPrivate *priv;
328 g_return_val_if_fail (self, FALSE);
329 g_return_val_if_fail (name, FALSE);
330 g_return_val_if_fail (key, FALSE);
332 keyname = get_identity_keyname (name, key);
334 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
335 retval = modest_conf_get_bool (priv->modest_conf, keyname, err);
343 modest_identity_mgr_set_identity_string (ModestIdentityMgr * self,
345 const gchar * key, const gchar * val,
348 ModestIdentityMgrPrivate *priv;
353 g_return_val_if_fail (self, FALSE);
354 g_return_val_if_fail (name, FALSE);
355 g_return_val_if_fail (key, FALSE);
357 keyname = get_identity_keyname (name, key);
359 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
361 retval = modest_conf_set_string (priv->modest_conf, keyname, val,
370 modest_identity_mgr_set_identity_int (ModestIdentityMgr * self,
371 const gchar * name, const gchar * key,
372 const gint val, GError ** err)
374 ModestIdentityMgrPrivate *priv;
379 g_return_val_if_fail (self, FALSE);
380 g_return_val_if_fail (name, FALSE);
381 g_return_val_if_fail (key, FALSE);
383 keyname = get_identity_keyname (name, key);
385 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
387 retval = modest_conf_set_int (priv->modest_conf, keyname, val, err);
395 modest_identy_mgr_set_identity_bool (ModestIdentityMgr * self,
396 const gchar * name, const gchar * key,
397 gboolean val, GError ** err)
399 ModestIdentityMgrPrivate *priv;
404 g_return_val_if_fail (self, FALSE);
405 g_return_val_if_fail (name, FALSE);
406 g_return_val_if_fail (key, FALSE);
408 keyname = get_identity_keyname (name, key);
410 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
412 retval = modest_conf_set_bool (priv->modest_conf, keyname, val, err);
420 modest_identity_mgr_identity_exists (ModestIdentityMgr * self,
421 const gchar * name, GError ** err)
423 ModestIdentityMgrPrivate *priv;
428 g_return_val_if_fail (self, FALSE);
429 g_return_val_if_fail (name, FALSE);
431 keyname = get_identity_keyname (name, NULL);
433 priv = MODEST_IDENTITY_MGR_GET_PRIVATE (self);
434 retval = modest_conf_key_exists (priv->modest_conf, keyname, err);
441 /* must be freed by caller */
443 get_identity_keyname (const gchar * idname, const gchar * name)
447 (MODEST_IDENTITY_NAMESPACE, "/",
448 idname, "/", name, NULL);
451 (MODEST_IDENTITY_NAMESPACE, "/", idname, NULL);