X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-account-store.c;h=0bc5b2362fa6df28c840e32d4b0e95363db8e268;hb=e5346c62591ebffaf5218c77f2687c637390a713;hp=25bd212ec166198684d664950b00687177e7bfb3;hpb=93d564f187ed22d1acc94f6cb9994c61754c9f80;p=modest diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 25bd212..0bc5b23 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -145,6 +145,9 @@ struct _ModestTnyAccountStorePrivate { 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), \ @@ -275,6 +278,12 @@ modest_tny_account_store_instance_init (ModestTnyAccountStore *obj) 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: @@ -793,6 +802,12 @@ modest_tny_account_store_finalize (GObject *obj) 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, @@ -1640,6 +1655,15 @@ insert_account (ModestTnyAccountStore *self, 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); @@ -1689,6 +1713,27 @@ on_account_removed (ModestAccountMgr *acc_mgr, /* 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);