#include <tny-account-store.h>
#include <tny-store-account.h>
#include <tny-transport-account.h>
-#include <tny-device.h>
#include <tny-simple-list.h>
#include <tny-account-store.h>
#include <tny-camel-transport-account.h>
#include <tny-camel-imap-store-account.h>
#include <tny-camel-pop-store-account.h>
+#include <modest-runtime.h>
#include <modest-marshal.h>
#include <modest-protocol-info.h>
#include <modest-local-folder-info.h>
struct _ModestTnyAccountStorePrivate {
gchar *cache_dir;
GHashTable *password_hash;
- TnyDevice *device;
ModestAccountMgr *account_mgr;
TnySessionCamel *session;
+ TnyDevice *device;
/* we cache them here */
GSList *store_accounts;
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);
account_list_free (GSList *accounts)
{
GSList *cursor = accounts;
+ gboolean debug = modest_runtime_get_debug_flags() & MODEST_RUNTIME_DEBUG_DEBUG_OBJECTS;
+
while (cursor) {
g_object_unref (G_OBJECT(cursor->data));
+ if (debug && G_IS_OBJECT(cursor->data))
+ g_warning ("BUG: account %s still holds %d ref(s)",
+ tny_account_get_id (TNY_ACCOUNT(cursor->data)),
+ G_OBJECT(cursor->data)->ref_count);
cursor = cursor->next;
}
g_slist_free (accounts);
account_list_free (priv->transport_accounts);
priv->transport_accounts = NULL;
-
g_signal_emit (G_OBJECT(self), signals[ACCOUNT_UPDATE_SIGNAL], 0,
account);
}
{
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 (priv->device);
- priv->device = NULL;
- }
if (priv->password_hash) {
g_hash_table_destroy (priv->password_hash);
}
if (priv->account_mgr) {
- g_object_unref (priv->account_mgr);
+ g_object_unref (G_OBJECT(priv->account_mgr));
priv->account_mgr = NULL;
}
-
- if (priv->session) {
- camel_object_unref (CAMEL_OBJECT(priv->session));
- priv->session = 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;
account_list_free (priv->transport_accounts);
priv->transport_accounts = NULL;
+
+ if (priv->session) {
+ camel_object_unref (CAMEL_OBJECT(priv->session));
+ if (debug && CAMEL_IS_OBJECT(priv->session))
+ g_warning ("BUG: TnyCamelSession still holds %d ref(s)",
+ 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);
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 ());
/* 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);
}
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;
}
} 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;
+ }
}
{
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;
}