* Added simple/split view mode persistence for ModestMainWindow
[modest] / src / modest-tny-account-store.c
index 5d88be9..a48682f 100644 (file)
@@ -342,7 +342,7 @@ 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;
+       //gboolean debug = modest_runtime_get_debug_flags() & MODEST_RUNTIME_DEBUG_DEBUG_OBJECTS;
 
        g_free (priv->cache_dir);
        priv->cache_dir = NULL;
@@ -371,9 +371,7 @@ 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);   
+               modest_runtime_verify_object_death(priv->session, "");
                priv->session = NULL;
        }
        
@@ -394,11 +392,8 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr, TnyDevice *device)
        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->account_mgr = g_object_ref (G_OBJECT(account_mgr));
+       priv->device = g_object_ref (device);
        
        priv->session = tny_session_camel_new (TNY_ACCOUNT_STORE(obj));
        
@@ -406,7 +401,7 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr, TnyDevice *device)
        /* FIXME: unref this in the end? */
        tny_session_camel_set_async_connecting (priv->session, TRUE);
        
-/*     /\* force a cache fill... ugly *\/ */
+       /* 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);
@@ -466,7 +461,7 @@ get_accounts  (TnyAccountStore *self, TnyList *list, TnyAccountType type)
                                                                     type, priv->session,
                                                                     get_password,
                                                                     forget_password);
-                       if (tny_account) { /* something went wrong */
+                       if (tny_account) {
                                g_object_set_data (G_OBJECT(tny_account), "account_store",
                                                   (gpointer)self);
                                tny_list_prepend (list, G_OBJECT(tny_account));
@@ -523,10 +518,8 @@ modest_tny_account_store_get_accounts  (TnyAccountStore *self, TnyList *list,
                                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;
-       }
 }
 
 
@@ -538,9 +531,7 @@ modest_tny_account_store_get_cache_dir (TnyAccountStore *self)
        
        if (!priv->cache_dir)
                priv->cache_dir = g_build_filename (g_get_home_dir(), 
-                                                   MODEST_DIR,
-                                                   MODEST_CACHE_DIR,
-                                                   "cache", NULL);
+                                                   MODEST_DIR, MODEST_CACHE_DIR, NULL);
        return priv->cache_dir;
 }
 
@@ -564,6 +555,41 @@ modest_tny_account_store_get_device (TnyAccountStore *self)
 }
 
 
+static TnyAccount*
+modest_tny_account_store_find_account_by_url (TnyAccountStore *self, const gchar* url_string)
+{
+       TnyAccount *account = NULL;
+       ModestTnyAccountStorePrivate *priv;     
+       GSList *cursor;
+       
+       g_return_val_if_fail (self, NULL);
+       g_return_val_if_fail (url_string, NULL);
+       
+       priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
+
+       for (cursor = priv->store_accounts; cursor ; cursor = cursor->next) {
+               if (tny_account_matches_url_string (TNY_ACCOUNT(cursor->data), url_string)) {
+                       account = TNY_ACCOUNT(cursor->data);
+                       break;
+               }
+       }
+
+       if (!account) {
+               for (cursor = priv->transport_accounts; !account && cursor ; cursor = cursor->next) {
+                       if (tny_account_matches_url_string (TNY_ACCOUNT(cursor->data), url_string)) {
+                               account = TNY_ACCOUNT(cursor->data);
+                               break;
+                       }
+               }
+       }
+
+       if (account)
+               g_object_ref (G_OBJECT(account));
+
+       return account;
+}
+
+
 
 static gboolean
 modest_tny_account_store_alert (TnyAccountStore *self, TnyAlertType type,
@@ -640,6 +666,8 @@ modest_tny_account_store_init (gpointer g, gpointer iface_data)
                modest_tny_account_store_get_device;
        klass->alert_func =
                modest_tny_account_store_alert;
+       klass->find_account_func =
+               modest_tny_account_store_find_account_by_url;
 }
 
 void
@@ -653,7 +681,7 @@ modest_tny_account_store_set_get_pass_func (ModestTnyAccountStore *self,
 TnySessionCamel*
 tny_account_store_get_session  (TnyAccountStore *self)
 {
-       g_return_val_if_fail (self, NULL);      
+       g_return_val_if_fail (self, NULL);
        return MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self)->session;
 }
 
@@ -672,8 +700,8 @@ modest_tny_account_store_get_tny_account_by_id  (ModestTnyAccountStore *self, co
 
        for (cursor = priv->store_accounts; cursor ; cursor = cursor->next) {
                const gchar *acc_id = tny_account_get_id (TNY_ACCOUNT(cursor->data));
-               if (acc_id && strcmp (acc_id, id) == 0) {
-               account = TNY_ACCOUNT(cursor->data);
+               if (acc_id && strcmp (acc_id, id) == 0) { 
+                       account = TNY_ACCOUNT(cursor->data);
                        break;
                }
        }
@@ -722,8 +750,12 @@ modest_tny_account_store_get_tny_account_by_account (ModestTnyAccountStore *self
        else if (account_data->transport_account)
                id = account_data->transport_account->account_name;
 
-       if (id) 
+       if (!id)
+               g_printerr ("modest: could not get an id for account %s\n",
+                           account_name);
+       else    
                account =  modest_tny_account_store_get_tny_account_by_id  (self, id);
+
        if (!account)
                g_printerr ("modest: could not get tny %s account for %s (id=%s)\n",
                            type == TNY_ACCOUNT_TYPE_STORE? "store" : "transport",