X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=736eeb01ac4451a6fe621b26c247750585b19aae;hb=030f24b7724d2bdd7f6584fd43bbd4904096ef6c;hp=794a3e3b605b51783962a89a8053ff7108f3864e;hpb=04a8f75ba92f077cd0d408caed023eb49fd40ea0;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 794a3e3..736eeb0 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -974,13 +974,12 @@ open_msg_banner_idle (gpointer userdata) gdk_threads_enter (); banner_info->idle_handler = 0; banner_info->banner = modest_platform_animation_banner (NULL, NULL, banner_info->message); - if (banner_info) + if (banner_info->banner) g_object_ref (banner_info->banner); - + gdk_threads_leave (); return FALSE; - } static GtkWidget * @@ -1164,20 +1163,39 @@ cleanup: } static gboolean -is_memory_full_error (GError *error) +is_memory_full_error (GError *error, ModestMailOperation *mail_op) { gboolean enough_free_space = TRUE; GnomeVFSURI *cache_dir_uri; - const gchar *cache_dir; + const gchar *cache_dir = NULL; GnomeVFSFileSize free_space; + TnyAccountStore *acc_store; + + acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); + + /* Cache dir is different in case we're using an external storage (like MMC account) */ + if (mail_op) { + TnyAccount *account = modest_mail_operation_get_account (mail_op); + if (account) { + if (modest_tny_account_is_memory_card_account (account)) { + cache_dir = g_getenv (MODEST_MMC1_VOLUMEPATH_ENV); + } + g_object_unref (account); + } + } + + /* Get the default local cache dir */ + if (!cache_dir) + cache_dir = tny_account_store_get_cache_dir (acc_store); - 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; + if (cache_dir_uri) { + 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); } - gnome_vfs_uri_unref (cache_dir_uri); if ((error->code == TNY_SYSTEM_ERROR_MEMORY || /* When asking for a mail and no space left on device @@ -1200,7 +1218,7 @@ check_memory_full_error (GtkWidget *parent_window, GError *err) if (err == NULL) return FALSE; - if (is_memory_full_error (err)) + if (is_memory_full_error (err, NULL)) modest_platform_information_banner (parent_window, NULL, _KR("cerm_device_memory_full")); else if (err->code == TNY_SYSTEM_ERROR_MEMORY) @@ -1230,7 +1248,7 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op, /* If the mail op has been cancelled then it's not an error: don't show any message */ if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) { - if (is_memory_full_error ((GError *) error)) { + if (is_memory_full_error ((GError *) error, mail_op)) { modest_platform_information_banner ((GtkWidget *) win, NULL, _KR("cerm_device_memory_full")); } else if (error->code == TNY_SYSTEM_ERROR_MEMORY) { @@ -1339,7 +1357,7 @@ open_msg_performer(gboolean canceled, gpointer user_data) { ModestMailOperation *mail_op = NULL; - gchar *error_msg; + gchar *error_msg = NULL; ModestProtocolType proto; TnyConnectionStatus status; OpenMsgHelper *helper = NULL; @@ -1436,7 +1454,7 @@ open_msg_performer(gboolean canceled, mail_op = modest_mail_operation_new_with_error_handling ((GObject *) parent_window, modest_ui_actions_disk_operations_error_handler, - error_msg, g_free); + g_strdup (error_msg), g_free); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); @@ -1464,6 +1482,8 @@ open_msg_performer(gboolean canceled, /* Frees */ clean: + if (error_msg) + g_free (error_msg); if (mail_op) g_object_unref (mail_op); g_object_unref (account); @@ -3230,38 +3250,6 @@ modest_ui_actions_on_remove_attachments (GtkAction *action, modest_msg_edit_window_remove_attachments (window, NULL); } - -#ifndef MODEST_TOOLKIT_GTK -typedef struct { - guint handler; - gchar *name; - GtkWindow *win; - TnyFolderStore *folder; -} CreateFolderHelper; - -static gboolean -show_create_folder_in_timeout (gpointer data) -{ - CreateFolderHelper *helper = (CreateFolderHelper *) data; - - /* Remove the timeout ASAP, we can not wait until the dialog - is shown because it could take a lot of time and so the - timeout could be called twice or more times */ - g_source_remove (helper->handler); - - gdk_threads_enter (); - do_create_folder (helper->win, helper->folder, helper->name); - gdk_threads_leave (); - - g_object_unref (helper->win); - g_object_unref (helper->folder); - g_free (helper->name); - g_slice_free (CreateFolderHelper, helper); - - return FALSE; -} -#endif - static void do_create_folder_cb (ModestMailOperation *mail_op, TnyFolderStore *parent_folder, @@ -3270,8 +3258,10 @@ do_create_folder_cb (ModestMailOperation *mail_op, { gchar *suggested_name = (gchar *) user_data; GtkWindow *source_win = (GtkWindow *) modest_mail_operation_get_source (mail_op); + const GError *error; - if (modest_mail_operation_get_error (mail_op)) { + error = modest_mail_operation_get_error (mail_op); + if (error) { /* Show an error. If there was some problem writing to disk, show it, otherwise show the generic folder @@ -3283,24 +3273,10 @@ do_create_folder_cb (ModestMailOperation *mail_op, modest_ui_actions_disk_operations_error_handler (mail_op, _("mail_in_ui_folder_create_error")); - /* Try again. Do *NOT* show any error because the mail - operations system will do it for us because we - created the mail_op with new_with_error_handler */ -#ifndef MODEST_TOOLKIT_GTK - CreateFolderHelper *helper; - helper = g_slice_new0 (CreateFolderHelper); - helper->name = g_strdup (suggested_name); - helper->folder = g_object_ref (parent_folder); - helper->win = g_object_ref (source_win); - - /* Ugly but neccesary stuff. The problem is that the - dialog when is shown calls a function that destroys - all the temporary windows, so the banner is - destroyed */ - helper->handler = g_timeout_add (2000, show_create_folder_in_timeout, helper); -#else - do_create_folder (source_win, parent_folder, (const gchar *) suggested_name); -#endif + if (!is_memory_full_error ((GError *) error, mail_op)) { + /* Try again if there is no full memory condition */ + do_create_folder (source_win, parent_folder, (const gchar *) suggested_name); + } } else { /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog * FIXME: any other? */ @@ -3383,7 +3359,7 @@ do_create_folder (GtkWindow *parent_window, &parent_folder); if (result == GTK_RESPONSE_ACCEPT && parent_folder) { - CreateFolderConnect *helper = (CreateFolderConnect *) g_slice_new0 (CreateFolderHelper); + CreateFolderConnect *helper = (CreateFolderConnect *) g_slice_new0 (CreateFolderConnect); helper->folder_name = g_strdup (folder_name); helper->parent = g_object_ref (parent_folder); @@ -3417,8 +3393,10 @@ modest_ui_actions_create_folder(GtkWidget *parent_window, parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); #endif - if (parent_folder) + if (parent_folder) { do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL); + g_object_unref (parent_folder); + } } void @@ -5475,7 +5453,7 @@ xfer_messages_error_handler (ModestMailOperation *mail_op, win = modest_mail_operation_get_source (mail_op); error = modest_mail_operation_get_error (mail_op); - if (error && is_memory_full_error ((GError *) error)) + if (error && is_memory_full_error ((GError *) error, mail_op)) modest_platform_information_banner ((GtkWidget *) win, NULL, _KR("cerm_device_memory_full")); else @@ -6376,8 +6354,9 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self, gpointer user_data) { const gchar* server_name = NULL; - TnyTransportAccount *server_account; + TnyTransportAccount *transport; gchar *message = NULL; + ModestProtocol *protocol; /* Don't show anything if the user cancelled something or the * send receive request is not interactive. Authentication @@ -6389,24 +6368,51 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self, return; - /* Get the server name: */ - server_account = - TNY_TRANSPORT_ACCOUNT (tny_camel_send_queue_get_transport_account (TNY_CAMEL_SEND_QUEUE (self))); - if (server_account) - server_name = tny_account_get_hostname (TNY_ACCOUNT (server_account)); - else - g_return_if_reached (); + /* Get the server name. Note that we could be using a + connection specific transport account */ + transport = (TnyTransportAccount *) + tny_camel_send_queue_get_transport_account (TNY_CAMEL_SEND_QUEUE (self)); + if (transport) { + ModestTnyAccountStore *acc_store; + const gchar *acc_name; + TnyTransportAccount *conn_specific; + + acc_store = modest_runtime_get_account_store(); + acc_name = modest_tny_account_get_parent_modest_account_name_for_server_account (TNY_ACCOUNT (transport)); + conn_specific = (TnyTransportAccount *) + modest_tny_account_store_get_transport_account_for_open_connection (acc_store, acc_name); + if (conn_specific) { + server_name = tny_account_get_hostname (TNY_ACCOUNT (conn_specific)); + g_object_unref (conn_specific); + } else { + server_name = tny_account_get_hostname (TNY_ACCOUNT (transport)); + } + g_object_unref (transport); + } + + /* Get protocol */ + protocol = modest_protocol_registry_get_protocol_by_name (modest_runtime_get_protocol_registry (), + MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS, + tny_account_get_proto (TNY_ACCOUNT (transport))); + if (!protocol) { + g_warning ("%s: Account with no proto", __FUNCTION__); + return; + } /* Show the appropriate message text for the GError: */ switch (err->code) { case TNY_SERVICE_ERROR_CONNECT: - message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); + message = modest_protocol_get_translation (protocol, + MODEST_PROTOCOL_TRANSLATION_ACCOUNT_CONNECTION_ERROR, + server_name); break; case TNY_SERVICE_ERROR_SEND: message = g_strdup (_CS("sfil_ib_unable_to_send")); break; case TNY_SERVICE_ERROR_UNAVAILABLE: - message = g_strdup_printf (_("emev_ib_ui_smtp_server_invalid"), server_name); + message = modest_protocol_get_translation (protocol, + MODEST_PROTOCOL_TRANSLATION_CONNECT_ERROR, + server_name); break; default: g_warning ("%s: unexpected ERROR %d", @@ -6417,7 +6423,6 @@ modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self, modest_platform_run_information_dialog (NULL, message, FALSE); g_free (message); - g_object_unref (server_account); } void @@ -6451,7 +6456,8 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue, #endif /* Get selected folder */ - selected_folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view)); + if (header_view) + selected_folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view)); if (!selected_folder) return; @@ -6554,6 +6560,9 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win) folder = TNY_FOLDER_STORE (tny_header_get_folder (header)); } + if (!header || !folder) + goto frees; + /* Get the account type */ account = tny_folder_get_account (TNY_FOLDER (folder)); proto = modest_tny_account_get_protocol_type (account); @@ -6568,10 +6577,14 @@ modest_ui_actions_get_msg_already_deleted_error_msg (ModestWindow *win) msg = g_strdup_printf (_("mail_ni_ui_folder_get_msg_folder_error")); } + frees: /* Frees */ - g_object_unref (account); - g_object_unref (folder); - g_object_unref (header); + if (account) + g_object_unref (account); + if (folder) + g_object_unref (folder); + if (header) + g_object_unref (header); return msg; }