X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-account-store.c;h=9d46e757d8b2a22a698d20799b6c8bb297a03a44;hp=46516acc1be21e9eab9b3b68a8810d54bf9c77d6;hb=43e62768748b9385ba4ba926c14c59ed2eaa3f9f;hpb=aa562c8bc5bec4125180a5d3b940610bd93cf823 diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 46516ac..9d46e75 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -244,6 +244,23 @@ account_list_free (GSList *accounts) g_slist_free (accounts); } + + +/* disconnect the list of TnyAccounts */ +static void +account_list_disconnect (GSList *accounts) +{ + GSList *cursor = accounts; + + while (cursor) { + if (TNY_IS_CAMEL_ACCOUNT(cursor->data)) /* check twice... */ + tny_camel_account_set_online (TNY_CAMEL_ACCOUNT(cursor->data), FALSE, NULL); + cursor = g_slist_next (cursor); + } +} + + + static void recreate_all_accounts (ModestTnyAccountStore *self) { @@ -388,8 +405,8 @@ static gchar* get_password (TnyAccount *account, const gchar * prompt_not_used, gboolean *cancel) { /* Initialize the output parameter: */ - if (cancel) - *cancel = FALSE; + + g_return_val_if_fail (account, NULL); const gchar *key; const TnyAccountStore *account_store; @@ -399,10 +416,22 @@ get_password (TnyAccount *account, const gchar * prompt_not_used, gboolean *canc gchar *pwd = NULL; gpointer pwd_ptr; gboolean already_asked; - + + if (cancel) + *cancel = FALSE; + key = tny_account_get_id (account); account_store = TNY_ACCOUNT_STORE(get_account_store_for_account (account)); - + + if (!key || !account_store) { + g_warning ("BUG: could not retrieve account_store for account %s", + key ? key : ""); + if (cancel) + *cancel = TRUE; + + return NULL; + } + self = MODEST_TNY_ACCOUNT_STORE (account_store); priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); @@ -410,7 +439,8 @@ get_password (TnyAccount *account, const gchar * prompt_not_used, gboolean *canc /* is it in the hash? if it's already there, it must be wrong... */ pwd_ptr = (gpointer)&pwd; /* pwd_ptr so the compiler does not complained about * type-punned ptrs...*/ - already_asked = g_hash_table_lookup_extended (priv->password_hash, + already_asked = priv->password_hash && + g_hash_table_lookup_extended (priv->password_hash, key, NULL, (gpointer*)&pwd_ptr); @@ -531,6 +561,12 @@ modest_tny_account_store_finalize (GObject *obj) priv->device = NULL; } + /* disconnect all accounts when we are destroyed */ + g_debug ("modest: disconnecting all store accounts"); + account_list_disconnect (priv->store_accounts); + g_debug ("modest: disconnecting all transport accounts"); + account_list_disconnect (priv->transport_accounts); + /* this includes the local folder */ account_list_free (priv->store_accounts); priv->store_accounts = NULL; @@ -552,7 +588,7 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr, TnyDevice *device) GObject *obj; ModestTnyAccountStorePrivate *priv; - TnyList *list; +// TnyList *list; g_return_val_if_fail (account_mgr, NULL); g_return_val_if_fail (device, NULL); @@ -564,17 +600,14 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr, TnyDevice *device) priv->device = g_object_ref (device); priv->session = tny_session_camel_new (TNY_ACCOUNT_STORE(obj)); + if (!priv->session) { + g_warning ("failed to get TnySessionCamel"); + return NULL; + } tny_session_camel_set_ui_locker (priv->session, tny_gtk_lockable_new ()); - /* FIXME: unref this in the end? */ tny_session_camel_set_async_connecting (priv->session, TRUE); - - /* force a cache fill... ugly */ - list = TNY_LIST(tny_simple_list_new()); - tny_account_store_get_accounts (TNY_ACCOUNT_STORE(obj), list, - TNY_ACCOUNT_STORE_BOTH); - g_object_unref(list); - + /* Connect signals */ g_signal_connect (G_OBJECT(account_mgr), "account_changed", G_CALLBACK (on_account_changed), obj); @@ -949,8 +982,10 @@ modest_tny_account_store_alert (TnyAccountStore *self, TnyAlertType type, * specific dialog messages from Chapter 12 of the UI spec. */ case TNY_ACCOUNT_STORE_ERROR_UNKNOWN_ALERT: -/* g_debug ("%s: Handling GError domain=%d, code=%d, message=%s", */ -/* __FUNCTION__, error->domain, error->code, error->message); */ + /* This debug output is useful. Please keep it uncommented until + * we have fixed the problems in this function: */ + g_debug ("%s: Handling GError domain=%d, code=%d, message=%s", + __FUNCTION__, error->domain, error->code, error->message); /* TODO: Remove the internal error message for the real release. * This is just so the testers can give us more information: */ @@ -1097,6 +1132,7 @@ modest_tny_account_store_get_session (TnyAccountStore *self) } + TnyAccount* modest_tny_account_store_get_tny_account_by (ModestTnyAccountStore *self, ModestTnyAccountStoreQueryType type, @@ -1106,12 +1142,22 @@ modest_tny_account_store_get_tny_account_by (ModestTnyAccountStore *self, ModestTnyAccountStorePrivate *priv; GSList *cursor; const gchar *val = NULL; - + TnyList* list; + + g_return_val_if_fail (self, NULL); g_return_val_if_fail (str, NULL); priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); + /* fill the caches, as that may not have happened yet */ + list = TNY_LIST(tny_simple_list_new()); + modest_tny_account_store_get_accounts (TNY_ACCOUNT_STORE(self), + list, TNY_ACCOUNT_STORE_BOTH); + g_object_unref (list); + + + /* Search in store accounts */ for (cursor = priv->store_accounts; cursor ; cursor = cursor->next) { switch (type) { @@ -1310,6 +1356,20 @@ modest_tny_account_is_virtual_local_folders (TnyAccount *self) return MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (self); } + +gboolean +modest_tny_account_is_memory_card_account (TnyAccount *self) +{ + if (!self) + return FALSE; + + const gchar* account_id = tny_account_get_id (self); + if (!account_id) + return FALSE; + + return (strcmp (account_id, MODEST_MMC_ACCOUNT_ID) == 0); +} + TnyAccount* modest_tny_account_store_get_local_folders_account (TnyAccountStore *self) { @@ -1334,3 +1394,5 @@ modest_tny_account_store_get_local_folders_account (TnyAccountStore *self) return account; } + +