* bugfix: text not ending with a newline was not quoted correctly
[modest] / src / modest-account-mgr.c
index 8831520..c5dfd8c 100644 (file)
@@ -12,6 +12,7 @@ static void    modest_account_mgr_finalize      (GObject *obj);
 
 static gchar*   get_account_keyname (const gchar *accname, const gchar *name);
 static gchar*   get_server_account_keyname (const gchar *accname, const gchar *name);
+static gchar*   get_identity_keyname (const gchar *accname, const gchar *name);
 
 /* list my signals */
 enum {
@@ -213,8 +214,8 @@ modest_account_mgr_add_server_account    (ModestAccountMgr *self,
 
        if (modest_conf_key_exists(priv->modest_conf, acckey, NULL)) {
                g_warning ("server account %s already exists", name);
-               g_free (acckey);
-               return FALSE;
+               //g_free (acckey);
+               //return FALSE;
        }
 
        /* hostname */
@@ -230,10 +231,13 @@ modest_account_mgr_add_server_account    (ModestAccountMgr *self,
        g_free (key);
 
        /* password */
-       key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PASSWORD, NULL);
-       modest_conf_set_string (priv->modest_conf, key,
-                               null_means_empty(password), NULL);
-       g_free (key);
+        if (password)
+        {
+                key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PASSWORD, NULL);
+                modest_conf_set_string (priv->modest_conf, key,
+                                        null_means_empty(password), NULL);
+                g_free (key);
+        }
 
        /* proto */
        key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PROTO, NULL);
@@ -241,7 +245,8 @@ modest_account_mgr_add_server_account    (ModestAccountMgr *self,
                                null_means_empty(proto),
                                NULL);
        g_free (key);
-
+       g_free (acckey);
+               
        return TRUE; /* FIXME: better error checking */
 }
 
@@ -274,6 +279,104 @@ modest_account_mgr_remove_server_account    (ModestAccountMgr *self,
        return retval;
 }
 
+gboolean
+modest_account_mgr_remove_identity    (ModestAccountMgr *self,
+                                            const gchar *name,
+                                            GError **err)
+{
+       ModestAccountMgrPrivate *priv;
+       gchar *acckey, *key;
+       gboolean retval;
+
+       g_return_val_if_fail (self, FALSE);
+       g_return_val_if_fail (name, FALSE);
+
+       priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+
+       acckey = g_strconcat (MODEST_IDENTITY_NAMESPACE, "/",
+                             name, NULL);
+
+       if (!modest_conf_key_exists(priv->modest_conf, acckey, NULL)) {
+               g_warning ("server account %s does not exist exist", name);
+               g_free (acckey);
+               return FALSE;
+       }
+
+       retval = modest_conf_remove_key (priv->modest_conf, acckey, NULL);
+       g_free (acckey);
+
+       return retval;
+}
+
+
+
+gboolean
+modest_account_mgr_add_identity (ModestAccountMgr *self,
+                      const gchar *name,
+                                         const gchar *email,
+                                         const gchar *replyto,
+                                         const gchar *signature,
+                      const gboolean use_signature,
+                      const gchar *id_via,
+                      const gboolean use_id_via)
+{
+       ModestAccountMgrPrivate *priv;
+       gchar *id_key, *key;
+
+       g_return_val_if_fail (self, FALSE);
+       g_return_val_if_fail (name, FALSE);
+
+       /* TODO: check already exists */
+
+       priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+       id_key = g_strconcat (MODEST_IDENTITY_NAMESPACE, "/",
+                             name, NULL);
+
+       if (modest_conf_key_exists(priv->modest_conf, id_key, NULL)) {
+               g_warning ("identity %s already exists", name);
+               //g_free (id_key);
+               //return FALSE;
+       }
+
+       /* email */
+       key = g_strconcat (id_key, "/", MODEST_ACCOUNT_EMAIL, NULL);
+       modest_conf_set_string (priv->modest_conf, key,
+                               null_means_empty(email), NULL);
+       g_free (key);
+
+       /* replyto */
+       key = g_strconcat (id_key, "/", MODEST_ACCOUNT_REPLYTO, NULL);
+       modest_conf_set_string (priv->modest_conf, key,
+                               null_means_empty(replyto), NULL);       
+       g_free (key);
+
+       /* signature */
+       key = g_strconcat (id_key, "/", MODEST_ACCOUNT_SIGNATURE, NULL);
+       modest_conf_set_string (priv->modest_conf, key,
+                               null_means_empty(signature), NULL);     
+       g_free (key);
+       
+       /* use_signature */
+       key = g_strconcat (id_key, "/", MODEST_ACCOUNT_USE_SIGNATURE, NULL);
+       modest_conf_set_bool (priv->modest_conf, key,
+                               use_signature, NULL);   
+       g_free (key);
+       
+       /* signature */
+       key = g_strconcat (id_key, "/", MODEST_ACCOUNT_ID_VIA, NULL);
+       modest_conf_set_string (priv->modest_conf, key,
+                               null_means_empty(id_via), NULL);        
+       g_free (key);
+       
+       /* use_signature */
+       key = g_strconcat (id_key, "/", MODEST_ACCOUNT_USE_ID_VIA, NULL);
+       modest_conf_set_bool (priv->modest_conf, key,
+                               use_id_via, NULL);      
+       g_free (key);
+       g_free (id_key);
+       
+       return TRUE; /* FIXME: better error checking */
+}
 
 /* strip the first /n/ character from each element */
 /* caller must make sure all elements are strings with
@@ -306,7 +409,7 @@ modest_account_mgr_server_account_names   (ModestAccountMgr *self,
        ModestAccountMgrPrivate *priv;
        const size_t prefix_len =
                strlen (MODEST_SERVER_ACCOUNT_NAMESPACE "/");
-       
+
        g_return_val_if_fail (self, NULL);
 
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
@@ -317,7 +420,7 @@ modest_account_mgr_server_account_names   (ModestAccountMgr *self,
        /* no restrictions, return everything */
        if (type == MODEST_PROTO_TYPE_ANY && !proto)
                return strip_prefix_from_elements (accounts,prefix_len);
-       
+
        /* otherwise, filter out the none-matching ones */
        cursor = accounts;
        while (cursor) {
@@ -363,7 +466,7 @@ modest_account_mgr_account_names  (ModestAccountMgr *self, GError **err)
        accounts = modest_conf_list_subkeys (priv->modest_conf,
                                             MODEST_ACCOUNT_NAMESPACE,
                                             err);
-       return strip_prefix_from_elements (accounts, prefix_len);       
+       return strip_prefix_from_elements (accounts, prefix_len);
 }
 
 
@@ -374,10 +477,10 @@ get_account_string (ModestAccountMgr *self, const gchar *name,
                    GError **err)
 {
        ModestAccountMgrPrivate *priv;
-       
+
        gchar *keyname;
        gchar * retval;
-       
+
        g_return_val_if_fail (self, NULL);
        g_return_val_if_fail (name, NULL);
        g_return_val_if_fail (key, NULL);
@@ -386,11 +489,11 @@ get_account_string (ModestAccountMgr *self, const gchar *name,
                keyname = get_server_account_keyname (name, key);
        else
                keyname = get_account_keyname (name, key);
-       
+
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
        retval = modest_conf_get_string (priv->modest_conf,keyname,err);
        g_free (keyname);
-       
+
        return retval;
 }
 
@@ -409,6 +512,27 @@ modest_account_mgr_get_account_string (ModestAccountMgr *self, const gchar *name
        return get_account_string (self, name, key, FALSE, err);
 }
 
+gchar*
+modest_account_mgr_get_identity_string (ModestAccountMgr *self, const gchar *name,
+                   const gchar *key, GError **err)
+{
+       ModestAccountMgrPrivate *priv;
+
+       gchar *keyname;
+       gchar * retval;
+
+       g_return_val_if_fail (self, NULL);
+       g_return_val_if_fail (name, NULL);
+       g_return_val_if_fail (key, NULL);
+
+       keyname = get_identity_keyname (name, key);
+       
+       priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+       retval = modest_conf_get_string (priv->modest_conf,keyname,err);
+       g_free (keyname);
+
+       return retval;
+}
 
 
 static gint
@@ -417,7 +541,7 @@ get_account_int (ModestAccountMgr *self, const gchar *name,
                 GError **err)
 {
        ModestAccountMgrPrivate *priv;
-       
+
        gchar *keyname;
        gint retval;
 
@@ -433,7 +557,7 @@ get_account_int (ModestAccountMgr *self, const gchar *name,
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
        retval = modest_conf_get_int (priv->modest_conf,keyname,err);
        g_free (keyname);
-       
+
        return retval;
 }
 
@@ -460,14 +584,14 @@ get_account_bool (ModestAccountMgr *self, const gchar *name,
                  GError **err)
 {
        ModestAccountMgrPrivate *priv;
-       
+
        gchar *keyname;
        gboolean retval;
 
        g_return_val_if_fail (self, -1);
        g_return_val_if_fail (name, -1);
        g_return_val_if_fail (key, -1);
-       
+
        if (server_account)
                keyname = get_server_account_keyname (name, key);
        else
@@ -476,7 +600,7 @@ get_account_bool (ModestAccountMgr *self, const gchar *name,
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
        retval = modest_conf_get_int (priv->modest_conf,keyname,err);
        g_free (keyname);
-       
+
        return retval;
 }
 
@@ -506,7 +630,7 @@ set_account_string  (ModestAccountMgr *self, const gchar *name,
                     GError **err)
 {
        ModestAccountMgrPrivate *priv;
-       
+
        gchar *keyname;
        gboolean retval;
 
@@ -556,10 +680,10 @@ set_account_int  (ModestAccountMgr *self, const gchar *name,
                  GError **err)
 {
        ModestAccountMgrPrivate *priv;
-       
+
        gchar *keyname;
        gboolean retval;
-       
+
        g_return_val_if_fail (self, FALSE);
        g_return_val_if_fail (name, FALSE);
        g_return_val_if_fail (key, FALSE);
@@ -570,7 +694,7 @@ set_account_int  (ModestAccountMgr *self, const gchar *name,
                keyname = get_account_keyname (name, key);
 
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
-       
+
        retval = modest_conf_set_int (priv->modest_conf,keyname,val,err);
 
        g_free (keyname);
@@ -605,21 +729,21 @@ set_account_bool  (ModestAccountMgr *self, const gchar *name,
                   GError **err)
 {
        ModestAccountMgrPrivate *priv;
-       
+
        gchar *keyname;
        gboolean retval;
-       
+
        g_return_val_if_fail (self, FALSE);
        g_return_val_if_fail (name, FALSE);
        g_return_val_if_fail (key, FALSE);
-       
+
        if (server_account)
                keyname = get_server_account_keyname (name, key);
        else
                keyname = get_account_keyname (name, key);
-       
+
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
-       
+
        retval = modest_conf_set_bool (priv->modest_conf,keyname,val,err);
 
        g_free (keyname);
@@ -661,14 +785,14 @@ account_exists (ModestAccountMgr *self, const gchar *name, gboolean server_accou
        g_return_val_if_fail (self, FALSE);
        g_return_val_if_fail (name, FALSE);
 
-       if (server_account) 
+       if (server_account)
                keyname = get_account_keyname (name, NULL);
        else
                keyname = get_server_account_keyname (name, NULL);
 
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
        retval = modest_conf_key_exists (priv->modest_conf,keyname,err);
-       
+
        g_free (keyname);
        return retval;
 }
@@ -682,7 +806,6 @@ modest_account_mgr_server_account_exists (ModestAccountMgr *self, const gchar *n
 }
 
 
-
 gboolean
 modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name,
                                   GError **err)
@@ -690,6 +813,13 @@ modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name,
        return account_exists (self, name, FALSE, err);
 }
 
+gboolean
+modest_account_mgr_identity_exists (ModestAccountMgr *self, const gchar *name,
+                                  GError **err)
+{
+       return account_exists (self, name, TRUE, err);
+}
+
 
 
 /* must be freed by caller */
@@ -698,9 +828,12 @@ get_account_keyname (const gchar *accname, const gchar *name)
 {
        if (name)
                return g_strconcat
-                       (accname, "/", name, NULL);
+                        (MODEST_ACCOUNT_NAMESPACE, "/",
+                         accname, "/", name, NULL);
        else
-               return g_strdup (accname);
+                return g_strconcat
+                        (MODEST_ACCOUNT_NAMESPACE, "/",
+                         accname, NULL);
 }
 
 
@@ -717,3 +850,17 @@ get_server_account_keyname (const gchar *accname, const gchar *name)
                        (MODEST_SERVER_ACCOUNT_NAMESPACE, "/",
                         accname, NULL);
 }
+
+/* must be freed by caller */
+static gchar*
+get_identity_keyname (const gchar *accname, const gchar *name)
+{
+       if (name)
+               return g_strconcat
+                       (MODEST_IDENTITY_NAMESPACE "/",
+                        accname, "/", name, NULL);
+       else
+               return g_strconcat
+                       (MODEST_IDENTITY_NAMESPACE, "/",
+                        accname, NULL);
+}