* Fixes NB#85964, do not crash when opening Drafts in memory full condition
[modest] / src / dbus_api / modest-dbus-callbacks.c
index a1186eb..d2f0313 100644 (file)
@@ -71,7 +71,6 @@ typedef struct
 
 
 static gboolean notify_error_in_dbus_callback (gpointer user_data);
-static gboolean notify_msg_not_found_in_idle (gpointer user_data);
 static gboolean on_idle_compose_mail(gpointer user_data);
 static gboolean on_idle_top_application (gpointer user_data);
 
@@ -448,7 +447,8 @@ find_msg_async_cb (TnyFolder *folder,
         OpenMsgPerformerInfo *info = (OpenMsgPerformerInfo *) user_data;
 
         if (err || cancelled) {
-                g_idle_add (notify_msg_not_found_in_idle, NULL);
+               modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"), TRUE);
+               g_idle_add (notify_error_in_dbus_callback, NULL);
                 goto end;
         }
 
@@ -456,7 +456,8 @@ find_msg_async_cb (TnyFolder *folder,
         if (header && (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED)) {
                 g_object_unref (header);
                 g_object_unref (msg);
-                g_idle_add (notify_msg_not_found_in_idle, NULL);
+               modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"), TRUE);
+               g_idle_add (notify_error_in_dbus_callback, NULL);
                 goto end;
         }
 
@@ -577,7 +578,8 @@ on_open_message_performer (gboolean canceled,
 
        info = (OpenMsgPerformerInfo *) user_data;
         if (canceled || err) {
-                g_idle_add (notify_msg_not_found_in_idle, NULL);
+               modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"), TRUE);
+               g_idle_add (notify_error_in_dbus_callback, NULL);
                 on_find_msg_async_destroy (info);
                 return;
         }
@@ -596,7 +598,8 @@ on_open_message_performer (gboolean canceled,
                 folder = tny_store_account_find_folder (TNY_STORE_ACCOUNT (account), info->uri, NULL);
         }
         if (!folder) {
-                g_idle_add (notify_msg_not_found_in_idle, NULL);
+               modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"), TRUE);
+               g_idle_add (notify_error_in_dbus_callback, NULL);
                 on_find_msg_async_destroy (info);
                 return;
         }
@@ -929,18 +932,21 @@ on_dbus_method_dump_send_queues (DBusConnection *con, DBusMessage *message)
                        modest_runtime_get_account_store(), accname,
                        TNY_ACCOUNT_TYPE_TRANSPORT);
                if (TNY_IS_ACCOUNT(acc)) {
-                       gchar *tmp, *url = tny_account_get_url_string (acc);
+                       gchar *tmp = NULL, *url = tny_account_get_url_string (acc);
                        ModestTnySendQueue *sendqueue =
                                modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(acc), TRUE);
-                       gchar *queue_str = modest_tny_send_queue_to_string (sendqueue);
+
+                       if (TNY_IS_SEND_QUEUE (sendqueue)) {
+                               gchar *queue_str = modest_tny_send_queue_to_string (sendqueue);
                        
-                       tmp = g_strdup_printf ("%s[%s]: '%s': %s\n%s",
-                                              str, accname, tny_account_get_id (acc), url,
-                                              queue_str);
-                       g_free(queue_str);
+                               tmp = g_strdup_printf ("%s[%s]: '%s': %s\n%s",
+                                                      str, accname, tny_account_get_id (acc), url,
+                                                      queue_str);
+                               g_free(queue_str);
+                               g_free (str);
+                               str = tmp;
+                       }
                        g_free (url);
-                       g_free (str);
-                       str = tmp;
 
                        g_object_unref (acc);
                }
@@ -1173,6 +1179,21 @@ on_top_application(GArray * arguments, gpointer data, osso_rpc_t * retval)
        
        return OSSO_OK;
 }
+
+static gboolean 
+on_idle_show_memory_low (gpointer user_data)
+{
+       ModestWindow *main_win = NULL;
+
+       gdk_threads_enter ();
+       main_win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE);
+       modest_platform_run_information_dialog (GTK_WINDOW (main_win),
+                                               dgettext("ke-recv","memr_ib_operation_disabled"),
+                                               TRUE);
+       gdk_threads_leave ();
+       
+       return FALSE;
+}
                       
 /* Callback for normal D-BUS messages */
 gint 
@@ -1180,6 +1201,12 @@ modest_dbus_req_handler(const gchar * interface, const gchar * method,
                        GArray * arguments, gpointer data,
                        osso_rpc_t * retval)
 {
+       /* Check memory low conditions */
+       if (modest_platform_check_memory_low (NULL, FALSE)) {
+               g_idle_add (on_idle_show_memory_low, NULL);
+               goto param_error;
+       }
+
        if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_MAIL_TO) == 0) {
                if (arguments->len != MODEST_DBUS_MAIL_TO_ARGS_COUNT)
                        goto param_error;
@@ -1868,13 +1895,3 @@ notify_error_in_dbus_callback (gpointer user_data)
 
        return FALSE;
 }
-
-static gboolean
-notify_msg_not_found_in_idle (gpointer user_data)
-{
-       modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"), FALSE);
-
-       g_idle_add (notify_error_in_dbus_callback, NULL);
-
-       return FALSE;
-}