2007-07-03 Murray Cumming <murrayc@murrayc.com>
[modest] / src / modest-tny-account.c
index ca2e6c8..8b750e3 100644 (file)
@@ -83,6 +83,11 @@ modest_tny_account_get_special_folder (TnyAccount *account,
                local_account = modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store(),
                                                                             MODEST_TNY_ACCOUNT_STORE_QUERY_ID,
                                                                             account_id);
+               if (!local_account) {
+                       g_printerr ("modest: %s: modest_tny_account_store_get_tny_account_by(ID) returned NULL for %s\n", __FUNCTION__, account_id);
+               return NULL;
+               }
+       
                g_free (account_id);
        } else {
                /* Other local folders are all in one on-disk directory: */
@@ -100,9 +105,17 @@ modest_tny_account_get_special_folder (TnyAccount *account,
 
        /* There is no need to do this _async, as these are local folders. */
        /* TODO: However, this seems to fail sometimes when the network is busy, 
-        * returning an empty list. murrayc. */
+        * returning an empty list. murrayc. */ 
        tny_folder_store_get_folders (TNY_FOLDER_STORE (local_account),
                                      folders, NULL, NULL);
+                                     
+       if (tny_list_get_length (folders) == 0) {
+               gchar* url_string = tny_account_get_url_string (local_account);
+               g_printerr ("modest: %s: tny_folder_store_get_folders() returned an empty list for account with URL '%s'\n", 
+                       __FUNCTION__, url_string);
+               g_free (url_string);
+       }
+       
        iter = tny_list_create_iterator (folders);
 
        while (!tny_iterator_is_done (iter)) {
@@ -121,55 +134,13 @@ modest_tny_account_get_special_folder (TnyAccount *account,
        g_object_unref (G_OBJECT (iter));
        g_object_unref (G_OBJECT (local_account));
 
-       return special_folder;
-}
-
-typedef struct
-{
-       GSourceFunc func;
-       GMainLoop* loop;
-} UtilIdleData;
-
-static gboolean util_on_idle(gpointer user_data)
-{
-       /* We are now in the main thread, 
-        * so we can call the function:
-        */
-       UtilIdleData *idle_data = (UtilIdleData*)user_data;
-       if (idle_data && idle_data->func)
-               (*(idle_data->func))(NULL);
-
-       /* Stop the main loop so that the caller can continue: */
-       if (idle_data->loop)
-               g_main_loop_quit (idle_data->loop);
-
-       return FALSE; /* Stop calling this callback. */
-}
-
-static void
-util_run_in_main_thread_and_wait(GSourceFunc function)
-{
-       UtilIdleData *data = g_slice_new0 (UtilIdleData);
-       data->func = function;
-       data->loop = g_main_loop_new (NULL, FALSE /* not running */);
+       /*
+       if (!special_folder) {
+               g_warning ("%s: Returning NULL.", __FUNCTION__);        
+       }
+       */
        
-       /* Cause the function to be run in an idle-handler, which is always 
-        * in the main thread:
-        */
-       g_idle_add (util_on_idle, &data);
-
-       /* This main loop will run until the idle handler has stopped it: */
-       g_main_loop_run (data->loop);
-       g_main_loop_unref (data->loop);
-
-       g_slice_free (UtilIdleData, data);
-}
-
-static gboolean 
-connect_and_wait(gpointer user_data)
-{
-       modest_platform_connect_and_wait(NULL);
-       return TRUE; /* Ignored */
+       return special_folder;
 }
 
 static void
@@ -182,12 +153,8 @@ on_connection_status_changed (TnyAccount *account, TnyConnectionStatus status, g
                 * but the accounts are set as offline, because our TnyDevice is offline,
                 * because libconic says we are offline.
                 * So ask the user to go online:
-                *
-                * We make sure that this UI is shown in the main thread, to avoid races,
-                * because tinymail does not guarantee that this signal handler will be called 
-                * in the main thread.
                 */
-               util_run_in_main_thread_and_wait (&connect_and_wait);
+               modest_platform_connect_and_wait(NULL); 
        } else if (status == TNY_CONNECTION_STATUS_CONNECTED_BROKEN) {
                printf ("DEBUG: %s: Connection broken. Forcing TnyDevice offline.\n", 
                        __FUNCTION__);