X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-tny-account-store.c;h=bfe6814f22ce48de6e1ad7cc1d47fe737a812648;hb=2cde5e36398aac1867bf045e10c90657e659b509;hp=f3384e02e35201273d7597c041f75ac239161c59;hpb=98df4aae51f0f37b7fd1158e86f132d528aaf3b3;p=modest diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index f3384e0..bfe6814 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -34,12 +34,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include #include @@ -73,9 +73,9 @@ typedef struct _ModestTnyAccountStorePrivate ModestTnyAccountStorePrivate; struct _ModestTnyAccountStorePrivate { gchar *cache_dir; GHashTable *password_hash; - TnyDevice *device; ModestAccountMgr *account_mgr; TnySessionCamel *session; + TnyDevice *device; /* we cache them here */ GSList *store_accounts; @@ -166,8 +166,8 @@ modest_tny_account_store_instance_init (ModestTnyAccountStore *obj) priv->cache_dir = NULL; priv->account_mgr = NULL; - priv->device = NULL; priv->session = NULL; + priv->device = NULL; priv->password_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); @@ -177,8 +177,13 @@ static void account_list_free (GSList *accounts) { GSList *cursor = accounts; + while (cursor) { g_object_unref (G_OBJECT(cursor->data)); + if (G_IS_OBJECT(cursor->data)) { /* check twice... */ + const gchar *id = tny_account_get_id(TNY_ACCOUNT(cursor->data)); + modest_runtime_verify_object_death(cursor->data,id); + } cursor = cursor->next; } g_slist_free (accounts); @@ -222,7 +227,6 @@ on_account_changed (ModestAccountMgr *acc_mgr, const gchar *account, gboolean se account_list_free (priv->transport_accounts); priv->transport_accounts = NULL; - g_signal_emit (G_OBJECT(self), signals[ACCOUNT_UPDATE_SIGNAL], 0, account); } @@ -333,14 +337,11 @@ modest_tny_account_store_finalize (GObject *obj) { ModestTnyAccountStore *self = MODEST_TNY_ACCOUNT_STORE(obj); ModestTnyAccountStorePrivate *priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); + + gboolean debug = modest_runtime_get_debug_flags() & MODEST_RUNTIME_DEBUG_DEBUG_OBJECTS; g_free (priv->cache_dir); priv->cache_dir = NULL; - - if (priv->device) { - g_object_unref (G_OBJECT(priv->device)); - priv->device = NULL; - } if (priv->password_hash) { g_hash_table_destroy (priv->password_hash); @@ -352,6 +353,11 @@ modest_tny_account_store_finalize (GObject *obj) priv->account_mgr = NULL; } + if (priv->device) { + g_object_unref (G_OBJECT(priv->device)); + priv->device = NULL; + } + /* this includes the local folder */ account_list_free (priv->store_accounts); priv->store_accounts = NULL; @@ -361,22 +367,25 @@ modest_tny_account_store_finalize (GObject *obj) if (priv->session) { camel_object_unref (CAMEL_OBJECT(priv->session)); + if (debug && CAMEL_IS_OBJECT(priv->session)) + g_warning ("%s:%d: TnyCamelSession still holds a refcount of %d", + __FILE__,__LINE__,CAMEL_OBJECT(priv->session)->ref_count); priv->session = NULL; } - G_OBJECT_CLASS(parent_class)->finalize (obj); } ModestTnyAccountStore* -modest_tny_account_store_new (ModestAccountMgr *account_mgr) { +modest_tny_account_store_new (ModestAccountMgr *account_mgr, TnyDevice *device) { GObject *obj; ModestTnyAccountStorePrivate *priv; TnyList *list; g_return_val_if_fail (account_mgr, NULL); + g_return_val_if_fail (device, NULL); obj = G_OBJECT(g_object_new(MODEST_TYPE_TNY_ACCOUNT_STORE, NULL)); priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(obj); @@ -384,6 +393,9 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr) { priv->account_mgr = account_mgr; g_object_ref (G_OBJECT(priv->account_mgr)); + priv->device = device; + g_object_ref (priv->device); + priv->session = tny_session_camel_new (TNY_ACCOUNT_STORE(obj)); tny_session_camel_set_ui_locker (priv->session, tny_gtk_lockable_new ()); @@ -442,15 +454,19 @@ get_accounts (TnyAccountStore *self, TnyList *list, TnyAccountType type) /* only return enabled accounts */ if (modest_account_mgr_get_enabled(priv->account_mgr, account_name)) { TnyAccount *tny_account = - modest_tny_account_new_from_account (priv->account_mgr, account_name, - type, priv->session, get_password, + modest_tny_account_new_from_account (priv->account_mgr, + account_name, + type, priv->session, + get_password, forget_password); if (tny_account) { /* something went wrong */ - g_object_set_data (G_OBJECT(tny_account), "account_store", (gpointer)self); + g_object_set_data (G_OBJECT(tny_account), "account_store", + (gpointer)self); tny_list_prepend (list, G_OBJECT(tny_account)); accounts = g_slist_append (accounts, tny_account); /* cache it */ } else - g_printerr ("modest: failed to create account for %s\n", account_name); + g_printerr ("modest: failed to create account for %s\n", + account_name); } g_free (account_name); } @@ -480,8 +496,10 @@ modest_tny_account_store_get_accounts (TnyAccountStore *self, TnyList *list, priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); if (request_type == TNY_ACCOUNT_STORE_BOTH) { - modest_tny_account_store_get_accounts (self, list, TNY_ACCOUNT_STORE_STORE_ACCOUNTS); - modest_tny_account_store_get_accounts (self, list, TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS); + modest_tny_account_store_get_accounts (self, list, + TNY_ACCOUNT_STORE_STORE_ACCOUNTS); + modest_tny_account_store_get_accounts (self, list, + TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS); return; } @@ -495,11 +513,14 @@ modest_tny_account_store_get_accounts (TnyAccountStore *self, TnyList *list, } else if (request_type == TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS) { if (!priv->transport_accounts) - priv->transport_accounts = get_accounts (self, list, TNY_ACCOUNT_TYPE_TRANSPORT); + priv->transport_accounts = + get_accounts (self, list, TNY_ACCOUNT_TYPE_TRANSPORT); else get_cached_accounts (self, list, TNY_ACCOUNT_TYPE_TRANSPORT); - } else + } else { g_return_if_reached (); /* incorrect req type */ + return; + } } @@ -526,13 +547,14 @@ modest_tny_account_store_get_device (TnyAccountStore *self) { ModestTnyAccountStorePrivate *priv; - priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self); - - if (!priv->device) - priv->device = tny_platform_factory_new_device - (modest_tny_platform_factory_get_instance()); + g_return_val_if_fail (self, NULL); - return g_object_ref (G_OBJECT(priv->device)); + priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); + + if (priv->device) + return g_object_ref (G_OBJECT(priv->device)); + else + return NULL; }