* Merged fixes for bugs 86171, 86476
authorVivek Sekar <viveksekar@gmail.com>
Mon, 21 Jul 2008 15:09:53 +0000 (15:09 +0000)
committerVivek Sekar <viveksekar@gmail.com>
Mon, 21 Jul 2008 15:09:53 +0000 (15:09 +0000)
pmo-diablo-r5074

src/modest-ui-actions.c

index e1a60fb..1845630 100644 (file)
@@ -82,6 +82,8 @@
 
 #include <gtkhtml/gtkhtml.h>
 
+#define MIN_FREE_SPACE 5 * 1024 * 1024
+
 typedef struct _GetMsgAsyncHelper {    
        ModestWindow *window;
        ModestMailOperation *mail_op;
@@ -1000,15 +1002,51 @@ cleanup:
 static gboolean
 is_memory_full_error (GError *error)
 {
-       if (error->code == TNY_SYSTEM_ERROR_MEMORY ||
-           error->code == TNY_IO_ERROR_WRITE ||
-           error->code == TNY_IO_ERROR_READ) {
+       gboolean enough_free_space = TRUE;
+       GnomeVFSURI *cache_dir_uri;
+       const gchar *cache_dir;
+       GnomeVFSFileSize free_space;
+
+       cache_dir = tny_account_store_get_cache_dir (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
+       cache_dir_uri = gnome_vfs_uri_new (cache_dir);
+       if (gnome_vfs_get_volume_free_space (cache_dir_uri, &free_space) == GNOME_VFS_OK) {
+               if (free_space < MIN_FREE_SPACE)
+                       enough_free_space = FALSE;
+       }
+       gnome_vfs_uri_unref (cache_dir_uri);
+
+       if ((error->code == TNY_SYSTEM_ERROR_MEMORY ||
+            error->code == TNY_IO_ERROR_WRITE ||
+            error->code == TNY_IO_ERROR_READ) && 
+           !enough_free_space) {
                return TRUE;
        } else {
                return FALSE;
        }
 }
 
+static gboolean
+check_memory_full_error (GtkWidget *parent_window, GError *err)
+{
+       if (err == NULL)
+               return FALSE;
+
+       if (is_memory_full_error (err))
+               modest_platform_information_banner (parent_window,
+                                                   NULL, dgettext("ke-recv",
+                                                                  "cerm_device_memory_full"));
+       else if (err->code == TNY_SYSTEM_ERROR_MEMORY)
+               /* If the account was created in memory full
+                  conditions then tinymail won't be able to
+                  connect so it'll return this error code */                           
+               modest_platform_information_banner (parent_window,
+                                                   NULL, _("emev_ui_imap_inbox_select_error"));
+       else
+               return FALSE;
+
+       return TRUE;
+}
+
 void
 modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
                                                 gpointer user_data)
@@ -1028,6 +1066,9 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
                        modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, dgettext("ke-recv",
                                                                           "cerm_device_memory_full"));
+               } else if (error->code == TNY_SYSTEM_ERROR_MEMORY) {
+                       modest_platform_information_banner ((GtkWidget *) win,
+                                                           NULL, _("emev_ui_imap_inbox_select_error"));
                } else if (error->code == MODEST_MAIL_OPERATION_ERROR_FILE_IO) {
                        modest_platform_information_banner ((GtkWidget *) win,
                                                            NULL, dgettext ("hildon-common-strings", "sfil_ni_unable_to_open_file_not_found"));
@@ -1145,11 +1186,8 @@ open_msgs_performer(gboolean canceled,
                open_msgs_helper_destroyer (helper);
 
                /* In memory full conditions we could get this error here */
-               if (err && is_memory_full_error (err)) {
-                       modest_platform_information_banner ((GtkWidget *) parent_window,
-                                                           NULL, dgettext("ke-recv",
-                                                                          "cerm_device_memory_full"));
-               }
+               check_memory_full_error ((GtkWidget *) parent_window, err);
+
                goto clean;
        }
 
@@ -1919,11 +1957,8 @@ do_send_receive_performer (gboolean canceled,
 
        if (err || canceled) {
                /* In memory full conditions we could get this error here */
-               if (err && is_memory_full_error (err)) {
-                       modest_platform_information_banner ((GtkWidget *) parent_window,
-                                                           NULL, dgettext("ke-recv",
-                                                                          "cerm_device_memory_full"));
-               }
+               check_memory_full_error ((GtkWidget *) parent_window, err);
+
                if (info->mail_op) {
                        modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (),
                                                            info->mail_op);
@@ -3096,11 +3131,7 @@ create_folder_performer (gboolean canceled,
 
        if (canceled || err) {
                /* In memory full conditions we could get this error here */
-               if (err && is_memory_full_error (err)) {
-                       modest_platform_information_banner ((GtkWidget *) parent_window,
-                                                           NULL, dgettext("ke-recv",
-                                                                          "cerm_device_memory_full"));
-               }
+               check_memory_full_error ((GtkWidget *) parent_window, err);
                goto frees;
        }
 
@@ -3210,11 +3241,7 @@ on_rename_folder_performer (gboolean canceled,
 
        if (canceled || err) {
                /* In memory full conditions we could get this error here */
-               if (err && is_memory_full_error (err)) {
-                       modest_platform_information_banner ((GtkWidget *) parent_window,
-                                                           NULL, dgettext("ke-recv",
-                                                                          "cerm_device_memory_full"));
-               }
+               check_memory_full_error ((GtkWidget *) parent_window, err);
        } else if (MODEST_IS_MAIN_WINDOW(parent_window)) {
 
                folder_view = modest_main_window_get_child_widget (
@@ -4841,7 +4868,9 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op,
                response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),_("mcen_nc_purge_file_text_inbox"));
 
                if (response == GTK_RESPONSE_OK) {
-                       modest_platform_information_banner (NULL, NULL, _("mcen_ib_removing_attachment"));
+                       GtkWidget *info;
+                       info =
+                               modest_platform_animation_banner (GTK_WIDGET (win), NULL, _("mcen_ib_removing_attachment"));
                        iter = tny_list_create_iterator (parts);
                        while (!tny_iterator_is_done (iter)) {
                                TnyMimePart *part;
@@ -4858,10 +4887,9 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op,
                        g_object_unref (iter);
                        
                        tny_msg_rewrite_cache (msg);
+
+                       gtk_widget_destroy (info);
                }
-     /* } else { */
-               /* This string no longer exists, refer to NB#75415 for more info */
-               /* modest_platform_information_banner (NULL, NULL, _("mail_ib_attachment_already_purged")); */
        }
 
        modest_window_mgr_unregister_header (mgr, header);
@@ -5057,15 +5085,8 @@ xfer_messages_performer  (gboolean canceled,
 
        helper = (XferMsgsHelper *) user_data;
 
-       if (canceled)
-               goto end;
-
-       if (err) {
-               if (is_memory_full_error (err)) {
-                       modest_platform_information_banner ((GtkWidget *) parent_window,
-                                                           NULL, dgettext("ke-recv",
-                                                                          "cerm_device_memory_full"));
-               } else {
+       if (canceled || err) {
+               if (!check_memory_full_error ((GtkWidget *) parent_window, err)) {
                        /* Show the proper error message */
                        modest_ui_actions_on_account_connection_error (parent_window, account);
                }
@@ -5574,11 +5595,7 @@ retrieve_msg_contents_performer (gboolean canceled,
        TnyList *headers = TNY_LIST (user_data);
 
        if (err || canceled) {
-               if (err && is_memory_full_error (err)) {
-                       modest_platform_information_banner ((GtkWidget *) parent_window,
-                                                           NULL, dgettext("ke-recv",
-                                                                          "cerm_device_memory_full"));
-               }
+               check_memory_full_error ((GtkWidget *) parent_window, err);
                goto out;
        }