X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-account-mgr-helpers.c;h=74766fd0919ca6b8839e8b1028ebd8bbf4355639;hp=ffe4445c91202b3ea165e4c952590f5be8ee2b98;hb=b94b783d9801be57422fdf478ae5bdafbc7200a7;hpb=6ad0c7e0fbf8462c0a41c0a42bf34adbb127fe4e diff --git a/src/modest-account-mgr-helpers.c b/src/modest-account-mgr-helpers.c index ffe4445..74766fd 100644 --- a/src/modest-account-mgr-helpers.c +++ b/src/modest-account-mgr-helpers.c @@ -29,10 +29,12 @@ #include #include - +#include +#include +#include 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; +}