static void modest_tny_account_store_forget_password_in_memory (ModestTnyAccountStore *self,
const gchar *server_account_name);
-static void add_connection_specific_transport_accounts (ModestTnyAccountStore *self,
- const gchar *account_name);
+static void add_connection_specific_transport_accounts (ModestTnyAccountStore *self);
/* list my signals */
enum {
TnyList *store_accounts;
TnyList *transport_accounts;
TnyList *store_accounts_outboxes;
+
+ /* Matches transport accounts and outbox folder */
+ GHashTable *outbox_of_transport;
};
#define MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
priv->session = NULL;
priv->device = NULL;
+ priv->outbox_of_transport =
+ g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ NULL,
+ NULL);
+
/* An in-memory store of passwords,
* for passwords that are not remembered in the configuration,
* so they need to be asked for from the user once in each session:
priv->account_settings_dialog_hash = NULL;
}
+ if (priv->outbox_of_transport) {
+ g_hash_table_destroy (priv->outbox_of_transport);
+ priv->outbox_of_transport = NULL;
+ }
+
+
/* Disconnect VFS signals */
volume_monitor = gnome_vfs_get_volume_monitor ();
if (g_signal_handler_is_connected (volume_monitor,
case TNY_ACCOUNT_ERROR_TRY_CONNECT_AUTHENTICATION_NOT_SUPPORTED:
g_debug ("%s: Handling GError domain=%d, code=%d (authentication not supported), message=%s",
__FUNCTION__, error->domain, error->code, error->message);
- /* TODO: This needs a logical ID for the string: */
+ /*
+ A more helpful error message than what the UI spec wants
prompt = g_strdup_printf(
_("Incorrect Account Settings:\nThe secure authentication method is not supported.\n%s"),
error->message);
+ */
+
+ /* This is "Secure connection failed", even though the logical ID has _certificate_ in the name: */
+ prompt = g_strdup (_("mail_ni_ssl_certificate_error"));
+
break;
case TNY_ACCOUNT_ERROR_TRY_CONNECT_CERTIFICATE:
g_debug ("%s: Handling GError domain=%d, code=%d (certificatae), message=%s",
__FUNCTION__, error->domain, error->code, error->message);
+
+ /* TODO: This needs a logical ID and/or some specified way to ask the different certificate questions: */
prompt = g_strdup_printf(
_("Certificate Problem:\n%s"),
error->message);
/* TODO: Remove the internal error message for the real release.
* This is just so the testers can give us more information: */
+ /* However, I haven't seen this for a few weeks, so maybe the users
+ * will never see it. murrayc. */
/* prompt = _("Modest account not yet fully configured."); */
prompt = g_strdup_printf(
"%s\n (Internal error message, often very misleading):\n%s",
static TnyAccount*
get_smtp_specific_transport_account_for_open_connection (ModestTnyAccountStore *self,
- const gchar *account_name)
+ const gchar *account_name)
{
/* Get the current connection: */
TnyDevice *device = modest_runtime_get_device ();
return NULL;
g_return_val_if_fail (self, NULL);
- g_return_val_if_fail (account_name, NULL);
#ifdef MODEST_PLATFORM_MAEMO
/* Get the connection-specific transport acccount, if any: */
ModestAccountMgr *account_manager = modest_runtime_get_account_mgr ();
- /* Check if this account has connection-specific SMTP enabled */
- if (!modest_account_mgr_get_use_connection_specific_smtp (account_manager, account_name)) {
- return NULL;
- }
+ /* Check if this account has connection-specific SMTP enabled */
+ if (!modest_account_mgr_get_use_connection_specific_smtp (account_manager, account_name)) {
+ return NULL;
+ }
gchar* server_account_name = modest_account_mgr_get_connection_specific_smtp (account_manager,
- account_name, connection_name);
+ connection_name);
/* printf ("DEBUG: %s: server_account_name=%s\n", __FUNCTION__, server_account_name); */
if (!server_account_name) {
tny_list_append (priv->transport_accounts, G_OBJECT (transport_account));
/* Add connection-specific transport accounts */
- add_connection_specific_transport_accounts (self, account);
+ add_connection_specific_transport_accounts (self);
/* Create per account local outbox */
account_outbox =
local_account = modest_tny_account_store_get_local_folders_account (MODEST_TNY_ACCOUNT_STORE (self));
modest_tny_local_folders_account_add_folder_to_outbox (MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (local_account),
per_account_outbox);
+ /* Add the pair to the hash table */
+ g_hash_table_insert (priv->outbox_of_transport,
+ transport_account,
+ per_account_outbox);
+
+ /* Notify that the local folders account chaned */
+ if (notify)
+ g_signal_emit (G_OBJECT (self), signals [ACCOUNT_CHANGED_SIGNAL], 0, local_account);
+
g_object_unref (local_account);
g_object_unref (per_account_outbox);
/* If there was any problem creating the account, for example,
with the configuration system this could not exist */
if (transport_account) {
+ TnyAccount *local_account = NULL;
+ TnyFolder *outbox = NULL;
+ ModestTnyAccountStorePrivate *priv = NULL;
+
+ /* Remove the OUTBOX of the account from the global outbox */
+ priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
+ outbox = g_hash_table_lookup (priv->outbox_of_transport, transport_account);
+
+ if (TNY_IS_FOLDER (outbox)) {
+ local_account = modest_tny_account_store_get_local_folders_account (self);
+ modest_tny_local_folders_account_remove_folder_from_outbox (MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (local_account),
+ outbox);
+ g_hash_table_remove (priv->outbox_of_transport, transport_account);
+
+ /* Notify the change in the local account */
+ g_signal_emit (G_OBJECT (self), signals [ACCOUNT_CHANGED_SIGNAL], 0, local_account);
+ g_object_unref (local_account);
+ } else {
+ g_warning ("Removing a transport account that has no outbox");
+ }
+
/* Notify the observers */
g_signal_emit (G_OBJECT (self), signals [ACCOUNT_REMOVED_SIGNAL], 0, transport_account);
g_object_unref (transport_account);
}
static void
-add_connection_specific_transport_accounts (ModestTnyAccountStore *self,
- const gchar *account_name)
+add_connection_specific_transport_accounts (ModestTnyAccountStore *self)
{
ModestTnyAccountStorePrivate *priv = NULL;
GSList *list_specifics = NULL, *iter = NULL;
priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
- list_specifics = modest_account_mgr_get_list (priv->account_mgr,
- account_name,
- MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST,
- MODEST_CONF_VALUE_STRING, FALSE);
+ ModestConf *conf = modest_runtime_get_conf ();
+
+ GError *err = NULL;
+ list_specifics = modest_conf_get_list (conf,
+ MODEST_CONF_CONNECTION_SPECIFIC_SMTP_LIST,
+ MODEST_CONF_VALUE_STRING, &err);
+ if (err) {
+ g_printerr ("modest: %s: error getting list: %s\n.", __FUNCTION__, err->message);
+ g_error_free (err);
+ err = NULL;
+ }
/* Look at each connection-specific transport account for the
* modest account: */
priv->session,
transport_account_name);
if (tny_account) {
- modest_tny_account_set_parent_modest_account_name_for_server_account (tny_account,
- account_name);
g_object_set_data (G_OBJECT(tny_account),
"account_store",
(gpointer)self);