modest_account_mgr_set_enabled (ModestAccountMgr *self, const gchar* name,
gboolean enabled)
{
- return modest_account_mgr_set_bool (self, name,
- MODEST_ACCOUNT_ENABLED, enabled,
- FALSE, NULL);
+ return modest_account_mgr_set_bool (self, name, MODEST_ACCOUNT_ENABLED, enabled,FALSE);
}
gboolean
modest_account_mgr_get_enabled (ModestAccountMgr *self, const gchar* name)
{
- return modest_account_mgr_get_bool (self, name,
- MODEST_ACCOUNT_ENABLED, FALSE,
- NULL);
+ return modest_account_mgr_get_bool (self, name, MODEST_ACCOUNT_ENABLED, FALSE);
}
+static gint
+compare_option_strings_for_name (const gchar* a, const gchar* b)
+{
+ /* printf(" debug: compare_option_strings_for_name():a=%s, b=%s\n", a, b); */
+ const gchar* sep = strchr(a, '=');
+ if (!sep)
+ return -1;
+
+ gint len = sep - a;
+ if(len <= 0)
+ return -1;
+
+ /* Get the part of the string before the =.
+ * Note that this allocation is inefficient just so we can do a strcmp. */
+ gchar* name = g_malloc (len+1);
+ memcpy(name, a, len);
+ name[len] = 0; /* Null-termination. */
+
+ /* printf(" debug: name=%s\n", name); */
+
+ gint result = strcmp (name, b);
+
+ g_free (name);
+
+ return result;
+}
+
+gchar*
+modest_server_account_data_get_option_value (GSList* options_list, const gchar* option_name)
+{
+ if (!options_list)
+ return NULL;
+
+ gchar *result = NULL;
+ GSList* option = g_slist_find_custom(options_list, option_name, (GCompareFunc)compare_option_strings_for_name);
+ if(option) {
+ /* Get the value part of the key=value pair: */
+ const gchar* pair = (const gchar*)option->data;
+
+ const gchar* sep = strchr(pair, '=');
+ if (sep) {
+ gint len = sep - pair;
+ if(len > 0) {
+ result = g_strdup(sep+1);
+
+ /* Avoid returning an empty string instead of NULL. */
+ if(result && strlen(result) == 0) {
+ g_free(result);
+ result = NULL;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+gboolean
+modest_server_account_data_get_option_bool (GSList* options_list, const gchar* option_name)
+{
+ if (!options_list)
+ return FALSE;
+
+ gboolean result = FALSE;
+ GSList* option = g_slist_find_custom(options_list, option_name, (GCompareFunc)strcmp);
+ if(option) {
+ return TRUE;
+ }
+
+ return result;
+}
+
+ModestProtocol
+modest_server_account_get_option_secure_auth (ModestAccountMgr *self,
+ const gchar* account_name)
+{
+ ModestProtocol result = MODEST_PROTOCOL_AUTH_NONE;
+ gchar* value =modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_AUTH_MECH,
+ TRUE /* server account */);
+ if (value) {
+ if (strcmp(value, MODEST_ACCOUNT_AUTH_MECH_VALUE_NONE) == 0)
+ result = MODEST_PROTOCOL_AUTH_NONE;
+ else if (strcmp(value, MODEST_ACCOUNT_AUTH_MECH_VALUE_PASSWORD) == 0)
+ result = MODEST_PROTOCOL_AUTH_PASSWORD;
+ else if (strcmp(value, MODEST_ACCOUNT_AUTH_MECH_VALUE_CRAMMD5) == 0)
+ result = MODEST_PROTOCOL_AUTH_CRAMMD5;
+
+ g_free (value);
+ }
+
+ return result;
+}
+
+void
+modest_server_account_set_option_secure_auth (ModestAccountMgr *self,
+ const gchar* account_name, ModestProtocol secure_auth)
+{
+ /* Get the conf string for the enum value: */
+ const gchar* str_value = NULL;
+ if (secure_auth == MODEST_PROTOCOL_AUTH_NONE)
+ str_value = MODEST_ACCOUNT_AUTH_MECH_VALUE_NONE;
+ else if (secure_auth == MODEST_PROTOCOL_AUTH_PASSWORD)
+ str_value = MODEST_ACCOUNT_AUTH_MECH_VALUE_PASSWORD;
+ else if (secure_auth == MODEST_PROTOCOL_AUTH_CRAMMD5)
+ str_value = MODEST_ACCOUNT_AUTH_MECH_VALUE_CRAMMD5;
+
+ /* Set it in the configuration: */
+ modest_account_mgr_set_string (self, account_name, MODEST_ACCOUNT_AUTH_MECH, str_value, TRUE);
+}
+
+ModestProtocol
+modest_server_account_data_get_option_security (ModestServerAccountData *account_data)
+{
+ ModestProtocol result = MODEST_PROTOCOL_SECURITY_NONE;
+ gchar* value = modest_server_account_data_get_option_value (account_data->options,
+ MODEST_ACCOUNT_OPTION_SECURITY);
+ if (value) {
+ if (strcmp(value, MODEST_ACCOUNT_OPTION_SECURITY_VALUE_NONE) == 0)
+ result = MODEST_PROTOCOL_SECURITY_NONE;
+ else if (strcmp(value, MODEST_ACCOUNT_OPTION_SECURITY_VALUE_NORMAL) == 0)
+ result = MODEST_PROTOCOL_SECURITY_TLS;
+ else if (strcmp(value, MODEST_ACCOUNT_OPTION_SECURITY_VALUE_SSL) == 0)
+ result = MODEST_PROTOCOL_SECURITY_SSL;
+
+ g_free (value);
+ }
+
+ return result;
+}
+
+void
+modest_server_account_set_option_security (ModestAccountMgr *self,
+ const gchar* account_name, ModestProtocol security)
+{
+ GSList *options_list = modest_account_mgr_get_list (self, account_name, MODEST_ACCOUNT_OPTIONS,
+ MODEST_CONF_VALUE_STRING, TRUE);
+
+ if(options_list) {
+ /* Remove the item if it exists already: */
+ GSList* option = NULL;
+ do {
+ g_slist_find_custom(options_list, MODEST_ACCOUNT_OPTION_SECURITY, (GCompareFunc)compare_option_strings_for_name);
+ if(option)
+ options_list = g_slist_remove (options_list, option->data);
+ } while(option);
+ }
+
+ /* Add the new item to the list: */
+ const gchar* str_value = NULL;
+ if (security == MODEST_PROTOCOL_SECURITY_NONE)
+ str_value = MODEST_ACCOUNT_OPTION_SECURITY_VALUE_NONE;
+ else if (security == MODEST_PROTOCOL_SECURITY_TLS)
+ str_value = MODEST_ACCOUNT_OPTION_SECURITY_VALUE_NORMAL;
+ else if (security == MODEST_PROTOCOL_SECURITY_SSL)
+ str_value = MODEST_ACCOUNT_OPTION_SECURITY_VALUE_SSL;
+
+ if (str_value) {
+ gchar* pair = g_strdup_printf(MODEST_ACCOUNT_OPTION_SECURITY "=%s", str_value);
+ options_list = g_slist_append(options_list, pair);
+ }
+
+ /* Set it in the configuration: */
+ modest_account_mgr_set_list (self, account_name, MODEST_ACCOUNT_OPTIONS, options_list,
+ MODEST_CONF_VALUE_STRING, TRUE);
+
+ /* TODO: Should we free the items too, or just the list? */
+ g_slist_free (options_list);
+}
+
+gchar*
+modest_account_mgr_get_server_account_option (ModestAccountMgr *self,
+ const gchar* account_name, const gchar* option_name)
+{
+ GSList *option_list = modest_account_mgr_get_list (self, account_name, MODEST_ACCOUNT_OPTIONS,
+ MODEST_CONF_VALUE_STRING, TRUE);
+ if (!option_list)
+ return NULL;
+
+ gchar *result = modest_server_account_data_get_option_value (option_list, option_name);
+
+ /* TODO: Should we free the items too, or just the list? */
+ g_slist_free (option_list);
+
+ return result;
+}
static ModestServerAccountData*
modest_account_mgr_get_server_account_data (ModestAccountMgr *self, const gchar* name)
ModestServerAccountData *data;
gchar *proto;
- g_return_val_if_fail (modest_account_mgr_account_exists (self, name,
- TRUE, NULL), NULL);
+ g_return_val_if_fail (modest_account_mgr_account_exists (self, name, TRUE), NULL);
data = g_slice_new0 (ModestServerAccountData);
data->account_name = g_strdup (name);
- data->hostname = modest_account_mgr_get_string (self, name,
- MODEST_ACCOUNT_HOSTNAME,
- TRUE, NULL);
- data->username = modest_account_mgr_get_string (self, name,
- MODEST_ACCOUNT_USERNAME,
- TRUE, NULL);
-
- proto = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_PROTO,
- TRUE, NULL);
- data->proto = modest_protocol_info_get_protocol (proto);
+ data->hostname = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_HOSTNAME,TRUE);
+ data->username = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_USERNAME,TRUE);
+ proto = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_PROTO, TRUE);
+ data->proto = modest_protocol_info_get_protocol (proto);
g_free (proto);
-
- data->last_updated = modest_account_mgr_get_int (self, name,
- MODEST_ACCOUNT_LAST_UPDATED,
- TRUE, NULL);
+ data->last_updated = modest_account_mgr_get_int (self, name, MODEST_ACCOUNT_LAST_UPDATED,TRUE);
- data->password = modest_account_mgr_get_string (self, name,
- MODEST_ACCOUNT_PASSWORD,
- TRUE, NULL);
-
- data->uri = modest_account_mgr_get_string (self, name,
- MODEST_ACCOUNT_URI,
- TRUE, NULL);
- data->options = modest_account_mgr_get_list (self, name,
- MODEST_ACCOUNT_OPTIONS,
- MODEST_CONF_VALUE_STRING,
- TRUE, NULL);
+ data->password = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_PASSWORD, TRUE);
+ data->uri = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_URI,TRUE);
+ data->options = modest_account_mgr_get_list (self, name, MODEST_ACCOUNT_OPTIONS,
+ MODEST_CONF_VALUE_STRING, TRUE);
return data;
}
g_slice_free (ModestServerAccountData, data);
}
+/** You must use modest_account_mgr_free_account_data() on the result.
+ */
ModestAccountData*
modest_account_mgr_get_account_data (ModestAccountMgr *self, const gchar* name)
{
g_return_val_if_fail (self, NULL);
g_return_val_if_fail (name, NULL);
- g_return_val_if_fail (modest_account_mgr_account_exists (self, name,
- FALSE, NULL), NULL);
+ g_return_val_if_fail (modest_account_mgr_account_exists (self, name,FALSE), NULL);
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);
+ FALSE);
data->fullname = modest_account_mgr_get_string (self, name,
MODEST_ACCOUNT_FULLNAME,
- FALSE, NULL);
+ FALSE);
data->email = modest_account_mgr_get_string (self, name,
MODEST_ACCOUNT_EMAIL,
- FALSE, NULL);
+ FALSE);
data->is_enabled = modest_account_mgr_get_enabled (self, name);
default_account = modest_account_mgr_get_default_account (self);
/* store */
server_account = modest_account_mgr_get_string (self, name,
MODEST_ACCOUNT_STORE_ACCOUNT,
- FALSE, NULL);
+ FALSE);
if (server_account) {
data->store_account =
- modest_account_mgr_get_server_account_data (self,
- server_account);
+ modest_account_mgr_get_server_account_data (self, server_account);
g_free (server_account);
}
/* transport */
server_account = modest_account_mgr_get_string (self, name,
MODEST_ACCOUNT_TRANSPORT_ACCOUNT,
- FALSE, NULL);
+ FALSE);
if (server_account) {
data->transport_account =
- modest_account_mgr_get_server_account_data (self,
- server_account);
+ modest_account_mgr_get_server_account_data (self, server_account);
g_free (server_account);
}
{
gchar *account;
ModestConf *conf;
+ GError *err = NULL;
g_return_val_if_fail (self, NULL);
conf = MODEST_ACCOUNT_MGR_GET_PRIVATE (self)->modest_conf;
- account = modest_conf_get_string (conf, MODEST_CONF_DEFAULT_ACCOUNT,
- NULL);
+ account = modest_conf_get_string (conf, MODEST_CONF_DEFAULT_ACCOUNT, &err);
+
+ if (err) {
+ g_printerr ("modest: failed to get '%s': %s\n",
+ MODEST_CONF_DEFAULT_ACCOUNT, err->message);
+ g_error_free (err);
+ g_free (account);
+ return NULL;
+ }
/* it's not really an error if there is no default account */
if (!account)
return NULL;
/* sanity check */
- if (!modest_account_mgr_account_exists (self, account, FALSE, NULL)) {
+ if (!modest_account_mgr_account_exists (self, account, FALSE)) {
g_printerr ("modest: default account does not exist\n");
g_free (account);
return NULL;
g_return_val_if_fail (self, FALSE);
g_return_val_if_fail (account, FALSE);
- g_return_val_if_fail (modest_account_mgr_account_exists (self, account, FALSE, NULL),
+ g_return_val_if_fail (modest_account_mgr_account_exists (self, account, FALSE),
FALSE);
conf = MODEST_ACCOUNT_MGR_GET_PRIVATE (self)->modest_conf;
}
-
-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)
{
g_return_val_if_fail (name, NULL);
fullname = modest_account_mgr_get_string (self, name,MODEST_ACCOUNT_FULLNAME,
- FALSE, NULL);
+ FALSE);
email = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_EMAIL,
- FALSE, NULL);
+ FALSE);
from = g_strdup_printf ("%s <%s>",
fullname ? fullname : "",
email ? email : "");