* src/maemo/modest-msg-edit-window.c:
[modest] / src / modest-tny-account.c
index ebb0b06..08f416b 100644 (file)
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <modest-platform.h>
 #include <modest-tny-platform-factory.h>
 #include <modest-tny-account.h>
 #include <modest-tny-account-store.h>
 #include <modest-tny-local-folders-account.h>
 #include <modest-runtime.h>
-#include <modest-platform.h>
 #include <tny-simple-list.h>
 #include <modest-tny-folder.h>
 #include <modest-tny-outbox-account.h>
@@ -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,22 @@ 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. */ 
+       GError *error = NULL;
        tny_folder_store_get_folders (TNY_FOLDER_STORE (local_account),
-                                     folders, NULL, NULL);
+                                     folders, NULL, &error);
+       if (error) {
+               g_warning ("%s: tny_folder_store_get_folders() failed:\n  error=%s\n", 
+                       __FUNCTION__, error->message);
+       }
+                                     
+       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,6 +139,12 @@ modest_tny_account_get_special_folder (TnyAccount *account,
        g_object_unref (G_OBJECT (iter));
        g_object_unref (G_OBJECT (local_account));
 
+       /*
+       if (!special_folder) {
+               g_warning ("%s: Returning NULL.", __FUNCTION__);        
+       }
+       */
+       
        return special_folder;
 }
 
@@ -130,12 +154,23 @@ on_connection_status_changed (TnyAccount *account, TnyConnectionStatus status, g
        printf ("DEBUG: %s: status=%d\n", __FUNCTION__, status);
        
        if (status == TNY_CONNECTION_STATUS_DISCONNECTED) {
-               /* We are trying to use the network with an account, 
-                * but the accounts are set as offline, because our TnyDevice is offline,
+               /* A tinymail network operation failed, and tinymail then noticed that 
+                * the account is offline, because our TnyDevice is offline,
                 * because libconic says we are offline.
-                * So ask the user to go online:
+                * So ask the user to go online again.
+                * 
+                * Note that this signal will not be emitted if the account was offline 
+                * when the network operation was first attempted. For those cases, 
+                * the application must do its own explicit checks.
+                *
+                * 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.
+                */
+               /* TODO: Commented out, because this causes hangs, probably related to 
+                * our use of mainloops:
+                * modest_platform_connect_and_wait (NULL);
                 */
-               modest_platform_connect_and_wait(NULL); 
        } else if (status == TNY_CONNECTION_STATUS_CONNECTED_BROKEN) {
                printf ("DEBUG: %s: Connection broken. Forcing TnyDevice offline.\n", 
                        __FUNCTION__);
@@ -147,8 +182,13 @@ on_connection_status_changed (TnyAccount *account, TnyConnectionStatus status, g
                 * When libconic reconnects, it will set the device back online again,
                 * regardless of it being forced offline before.
                 */
+               /* TODO: Find out when this is falsely being emitted. */
+               printf ("  DEBUG: %s: Not forcing offline because tinymail is sometimes reporting false connection breaks.\n", 
+                       __FUNCTION__);
+               /*
                TnyDevice *device = modest_runtime_get_device ();
                tny_device_force_offline (device);
+               */
        }
 }