+ /* TODO: Should we free the items too, or just the list? */
+ g_slist_free (list);
+
+ return TRUE;
+}
+
+/**
+ * modest_account_mgr_remove_connection_specific_smtp
+ * @self: a ModestAccountMgr instance
+ * @name: the account name
+ * @connection_name: A libconic IAP connection name
+ *
+ * Disassacoiate a server account to use with the specific connection for this account.
+ *
+ * Returns: TRUE if it worked, FALSE otherwise
+ */
+gboolean modest_account_mgr_remove_connection_specific_smtp (ModestAccountMgr *self,
+ const gchar* account_name, const gchar* connection_name)
+{
+ GSList *list = modest_account_mgr_get_list (self, account_name,
+ MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST,
+ MODEST_CONF_VALUE_STRING, FALSE);
+ if (!list)
+ return FALSE;
+
+ /* The server account is in the item after the connection name: */
+ GSList *list_connection = g_slist_find_custom (list, connection_name, (GCompareFunc)strcmp);
+ if (list_connection) {
+ /* remove both items: */
+ GSList *temp = g_slist_delete_link(list_connection, list_connection);
+ temp = g_slist_delete_link(temp, g_slist_next(temp));
+ }
+
+ /* Reset the changed list: */
+ modest_account_mgr_set_list (self, account_name,
+ MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST, list,
+ MODEST_CONF_VALUE_STRING, FALSE);
+
+ /* TODO: Should we free the items too, or just the list? */
+ g_slist_free (list);
+
+ return TRUE;
+}
+
+gboolean modest_account_mgr_get_use_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name)
+{
+ return modest_account_mgr_get_bool (self, account_name,
+ MODEST_ACCOUNT_USE_CONNECTION_SPECIFIC_SMTP, FALSE);
+}
+
+gboolean modest_account_mgr_set_use_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name,
+ gboolean new_value)
+{
+ return modest_account_mgr_set_bool (self, account_name, MODEST_ACCOUNT_USE_CONNECTION_SPECIFIC_SMTP,
+ new_value, FALSE);
+}
+
+/**
+ * modest_account_mgr_get_connection_specific_smtp
+ * @self: a ModestAccountMgr instance
+ * @name: the account name
+ * @connection_name: A libconic IAP connection name
+ *
+ * Retrieve a server account to use with this specific connection for this account.
+ *
+ * Returns: a server account name to use for this connection, or NULL if none is specified.
+ */
+gchar* modest_account_mgr_get_connection_specific_smtp (ModestAccountMgr *self, const gchar* account_name,
+ const gchar* connection_name)
+{
+ gchar *result = NULL;
+
+ GSList *list = modest_account_mgr_get_list (self, account_name,
+ MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST,
+ MODEST_CONF_VALUE_STRING, FALSE);
+ if (!list)
+ return NULL;
+
+ /* The server account is in the item after the connection name: */
+ GSList *iter = list;
+ while (iter) {
+ const gchar* this_connection_name = (const gchar*)(iter->data);
+ if (strcmp (this_connection_name, connection_name) == 0) {
+ iter = g_slist_next (iter);
+
+ if (iter) {
+ const gchar* account_name = (const gchar*)(iter->data);
+ if (account_name) {
+ result = g_strdup (account_name);
+ break;