* fix all compiler warnings (when using gtk/ frontend)
[modest] / src / modest-account-mgr-helpers.c
index ffe4445..74766fd 100644 (file)
 
 #include <modest-account-mgr-helpers.h>
 #include <modest-account-mgr-priv.h>
-
+#include <tny-simple-list.h>
+#include <modest-runtime.h>
+#include <string.h>
 
 gboolean
-modest_account_mgr_account_set_enabled (ModestAccountMgr *self, const gchar* name,
+modest_account_mgr_set_enabled (ModestAccountMgr *self, const gchar* name,
                                        gboolean enabled)
 {
        return modest_account_mgr_set_bool (self, name,
@@ -42,7 +44,7 @@ modest_account_mgr_account_set_enabled (ModestAccountMgr *self, const gchar* nam
 
 
 gboolean
-modest_account_mgr_account_get_enabled (ModestAccountMgr *self, const gchar* name)
+modest_account_mgr_get_enabled (ModestAccountMgr *self, const gchar* name)
 {
        return modest_account_mgr_get_bool (self, name,
                                            MODEST_ACCOUNT_ENABLED, FALSE,
@@ -58,8 +60,8 @@ modest_account_mgr_get_server_account_data (ModestAccountMgr *self, const gchar*
        
        g_return_val_if_fail (modest_account_mgr_account_exists (self, name,
                                                                 TRUE, NULL), NULL);    
-       data = g_new0 (ModestServerAccountData, 1);
-
+       data = g_slice_new0 (ModestServerAccountData);
+       
        data->account_name = g_strdup (name);
        data->hostname     = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_HOSTNAME,
@@ -76,6 +78,11 @@ modest_account_mgr_get_server_account_data (ModestAccountMgr *self, const gchar*
        data->password     = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_PASSWORD,
                                                            TRUE, NULL);
+
+       data->options = modest_account_mgr_get_list (self, name,
+                                                    MODEST_ACCOUNT_OPTIONS,
+                                                    MODEST_CONF_VALUE_STRING,
+                                                    TRUE, NULL);
        return data;
 }
 
@@ -101,7 +108,16 @@ modest_account_mgr_free_server_account_data (ModestAccountMgr *self,
        g_free (data->password);
        data->password = NULL;
        
-       g_free (data);
+       if (data->options) {
+               GSList *tmp = data->options;
+               while (tmp) {
+                       g_free (tmp->data);
+                       tmp = g_slist_next (tmp);
+               }
+               g_slist_free (data->options);
+       }
+
+       g_slice_free (ModestServerAccountData, data);
 }
 
 ModestAccountData*
@@ -114,20 +130,20 @@ modest_account_mgr_get_account_data     (ModestAccountMgr *self, const gchar* na
        g_return_val_if_fail (name, NULL);
        g_return_val_if_fail (modest_account_mgr_account_exists (self, name,
                                                                 FALSE, NULL), NULL);   
-       data = g_new0 (ModestAccountData, 1);
+       data = g_slice_new0 (ModestAccountData);
 
        data->account_name = g_strdup (name);
 
        data->display_name = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_DISPLAY_NAME,
                                                            FALSE, NULL);
-       data->fullname      = modest_account_mgr_get_string (self, name,
+       data->fullname      = modest_account_mgr_get_string (self, name,
                                                              MODEST_ACCOUNT_FULLNAME,
                                                               FALSE, NULL);
        data->email        = modest_account_mgr_get_string (self, name,
                                                            MODEST_ACCOUNT_EMAIL,
                                                            FALSE, NULL);
-       data->enabled      = modest_account_mgr_account_get_enabled (self, name);
+       data->enabled      = modest_account_mgr_get_enabled (self, name);
 
        /* store */
        server_account     = modest_account_mgr_get_string (self, name,
@@ -171,7 +187,7 @@ modest_account_mgr_free_account_data (ModestAccountMgr *self, ModestAccountData
        modest_account_mgr_free_server_account_data (self, data->store_account);
        modest_account_mgr_free_server_account_data (self, data->transport_account);
        
-       g_free (data);
+       g_slice_free (ModestAccountData, data);
 }
 
 
@@ -197,6 +213,7 @@ modest_account_mgr_get_default_account  (ModestAccountMgr *self)
                g_free (account);
                return NULL;
        }
+
        return account;
 }
 
@@ -219,4 +236,84 @@ modest_account_mgr_set_default_account  (ModestAccountMgr *self, const gchar* ac
 }
 
 
+TnyAccount*
+modest_account_mgr_get_tny_account (ModestAccountMgr *self, const gchar* account_name,
+                                       TnyAccountType type)
+{
+       TnyAccount      *account = NULL;
+       TnyList         *accounts;
+       TnyIterator     *iter;
+       gchar           *server_account;
+       const gchar     *conf_key;
+       
+       g_return_val_if_fail (self, NULL);
+       g_return_val_if_fail (account_name, NULL);
+
+       switch (type) {
+       case TNY_ACCOUNT_TYPE_STORE:
+               conf_key = MODEST_ACCOUNT_STORE_ACCOUNT; break;
+       case TNY_ACCOUNT_TYPE_TRANSPORT:
+               conf_key = MODEST_ACCOUNT_TRANSPORT_ACCOUNT; break;
+       default:
+               g_return_val_if_reached (NULL);
+       }
+       
+       server_account = modest_account_mgr_get_string (self, account_name, conf_key, FALSE, NULL);
+       if (!server_account) {
+               g_printerr ("modest: no %s account specified for %s\n",
+                           type == TNY_ACCOUNT_TYPE_TRANSPORT ? "transport" : "store", account_name);
+               return NULL;
+       }
+       
+       accounts = tny_simple_list_new ();
+       tny_account_store_get_accounts (TNY_ACCOUNT_STORE(modest_runtime_get_account_store()),
+                                       accounts, type);        
+       iter = tny_list_create_iterator (accounts);     
+       while (tny_iterator_is_done (iter)) {
+               account = TNY_ACCOUNT(tny_iterator_get_current(iter));
+               if (strcmp (tny_account_get_id (account), server_account) == 0)
+                       break;
+               g_object_unref (G_OBJECT(account));
+       }
+       
+       g_object_unref (G_OBJECT(iter));
+       g_object_unref (G_OBJECT(accounts));
+       
+       if (!account)
+               g_printerr ("modest: no tny %s account found for %s\n",
+                           type == TNY_ACCOUNT_TYPE_TRANSPORT ? "transport" : "store", account_name);
+       else {
+               /* sanity check */
+               if ((type == TNY_ACCOUNT_TYPE_TRANSPORT && !TNY_IS_TRANSPORT_ACCOUNT(account)) ||
+                   (type == TNY_ACCOUNT_TYPE_STORE && !TNY_IS_STORE_ACCOUNT(account))) {
+                       g_printerr ("modest: tny %s acccount found for %s, but was expecting %s account\n",
+                                   type == TNY_ACCOUNT_TYPE_TRANSPORT ? "transport" : "store", account_name,
+                                   type == TNY_ACCOUNT_TYPE_TRANSPORT ? "store" : "transport");
+                       g_object_unref (G_OBJECT(account));
+                       account = NULL;
+               }
+       }
+       return account;
+}
+
 
+gchar*
+modest_account_mgr_get_from_string (ModestAccountMgr *self, const gchar* name)
+{
+       gchar *fullname, *email, *from;
+       
+       g_return_val_if_fail (self, NULL);
+       g_return_val_if_fail (name, NULL);
+
+       fullname      = modest_account_mgr_get_string (self, name,MODEST_ACCOUNT_FULLNAME,
+                                                      FALSE, NULL);
+       email         = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_EMAIL,
+                                                      FALSE, NULL);
+       from = g_strdup_printf ("%s <%s>",
+                               fullname ? fullname : "",
+                               email    ? email    : "");
+       g_free (fullname);
+       g_free (email);
+
+       return from;
+}