X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=18468d8dce694605aaf7ab566bfb58f2802db564;hp=3d12d02d7ea82c6d7cc178dbf794ba43763ef6d9;hb=07e4d11167bfcb14ddaabe5e77d3a8f39dc2c1b2;hpb=1f49ac9df5635e0427ef1c2e1b2cc0c30c7c0cd2 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 3d12d02..18468d8 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -109,6 +109,7 @@ typedef struct _ReplyForwardHelper { guint reply_forward_type; ReplyForwardAction action; gchar *account_name; + gchar *mailbox; GtkWidget *parent_window; TnyHeader *header; } ReplyForwardHelper; @@ -241,7 +242,6 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win) window_list = modest_window_mgr_get_window_list (mgr); if (window_list == NULL) { - ModestWindow *old_win; win = MODEST_WINDOW (modest_accounts_window_new ()); if (modest_window_mgr_register_window (mgr, win, NULL)) { gtk_widget_show_all (GTK_WIDGET (win)); @@ -250,14 +250,6 @@ modest_ui_actions_run_account_setup_wizard (ModestWindow *win) win = NULL; } - old_win = win; - win = MODEST_WINDOW (modest_folder_window_new (NULL)); - if (modest_window_mgr_register_window (mgr, win, NULL)) { - gtk_widget_show_all (GTK_WIDGET (win)); - } else { - gtk_widget_destroy (GTK_WIDGET (win)); - win = old_win; - } } else { g_list_free (window_list); } @@ -792,6 +784,7 @@ modest_ui_actions_compose_msg(ModestWindow *win, TnyAccount *account = NULL; TnyFolder *folder = NULL; gchar *from_str = NULL, *signature = NULL, *body = NULL; + gchar *recipient = NULL; gboolean use_signature = FALSE; ModestWindow *msg_win = NULL; ModestAccountMgr *mgr = modest_runtime_get_account_mgr(); @@ -803,7 +796,8 @@ modest_ui_actions_compose_msg(ModestWindow *win, goto cleanup; #ifdef MODEST_TOOLKIT_HILDON2 - account_name = g_strdup (modest_window_get_active_account(win)); + if (win) + account_name = g_strdup (modest_window_get_active_account(win)); #endif if (!account_name) { account_name = modest_account_mgr_get_default_account(mgr); @@ -813,7 +807,10 @@ modest_ui_actions_compose_msg(ModestWindow *win, goto cleanup; } - mailbox = modest_window_get_active_mailbox (win); + if (win) + mailbox = modest_window_get_active_mailbox (win); + else + mailbox = NULL; account = modest_tny_account_store_get_server_account (store, account_name, TNY_ACCOUNT_TYPE_STORE); if (!account) { g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name); @@ -824,13 +821,15 @@ modest_ui_actions_compose_msg(ModestWindow *win, g_printerr ("modest: failed to find Drafts folder\n"); goto cleanup; } - from_str = modest_account_mgr_get_from_string (mgr, account_name); + from_str = modest_account_mgr_get_from_string (mgr, account_name, mailbox); if (!from_str) { g_printerr ("modest: failed get from string for '%s'\n", account_name); goto cleanup; } - signature = modest_account_mgr_get_signature (mgr, account_name, &use_signature); + recipient = modest_text_utils_get_email_address (from_str); + signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature); + g_free (recipient); if (body_str != NULL) { body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str); } else { @@ -1009,7 +1008,6 @@ get_header_view_from_window (ModestWindow *window) static gchar * get_info_from_header (TnyHeader *header, gboolean *is_draft, gboolean *can_open) { - /* TODO: should also retrieve the mailbox from header */ TnyFolder *folder; gchar *account = NULL; TnyFolderType folder_type = TNY_FOLDER_TYPE_UNKNOWN; @@ -1140,14 +1138,16 @@ open_msg_cb (ModestMailOperation *mail_op, g_free (mailbox); } else { gchar *uid = modest_tny_folder_get_header_unique_id (header); + const gchar *mailbox = NULL; + + if (parent_win && MODEST_IS_WINDOW (parent_win)) + mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_win)); if (helper->rowref && helper->model) { - /* TODO: use mailbox */ - win = modest_msg_view_window_new_with_header_model (msg, account, NULL, (const gchar*) uid, + win = modest_msg_view_window_new_with_header_model (msg, account, mailbox, (const gchar*) uid, helper->model, helper->rowref); } else { - /* TODO: use mailbox */ - win = modest_msg_view_window_new_for_attachment (msg, account, NULL, (const gchar*) uid); + win = modest_msg_view_window_new_for_attachment (msg, account, mailbox, (const gchar*) uid); } g_free (uid); } @@ -1229,10 +1229,11 @@ check_memory_full_error (GtkWidget *parent_window, GError *err) if (err == NULL) return FALSE; - 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) + if (is_memory_full_error (err, NULL)) { + gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + modest_platform_information_banner (parent_window, NULL, msg); + g_free (msg); + } 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 */ @@ -1260,8 +1261,9 @@ modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op, don't show any message */ if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) { if (is_memory_full_error ((GError *) error, mail_op)) { - modest_platform_information_banner ((GtkWidget *) win, - NULL, _KR("cerm_device_memory_full")); + gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + modest_platform_information_banner ((GtkWidget *) win, NULL, msg); + g_free (msg); } else if (error->code == TNY_SYSTEM_ERROR_MEMORY) { modest_platform_information_banner ((GtkWidget *) win, NULL, _("emev_ui_imap_inbox_select_error")); @@ -1443,9 +1445,10 @@ open_msg_performer(gboolean canceled, header_view = get_header_view_from_window (MODEST_WINDOW (parent_window)); uid = modest_tny_folder_get_header_unique_id (helper->header); if (header_view) { - /* TODO: use mailbox */ + const gchar *mailbox = NULL; + mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_window)); window = modest_msg_view_window_new_from_header_view - (MODEST_HEADER_VIEW (header_view), account_name, NULL, uid, helper->rowref); + (MODEST_HEADER_VIEW (header_view), account_name, mailbox, uid, helper->rowref); if (window != NULL) { if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (), window, NULL)) { @@ -1654,6 +1657,7 @@ create_reply_forward_helper (ReplyForwardAction action, { ReplyForwardHelper *rf_helper = NULL; const gchar *active_acc = modest_window_get_active_account (win); + const gchar *active_mailbox = modest_window_get_active_mailbox (win); rf_helper = g_slice_new0 (ReplyForwardHelper); rf_helper->reply_forward_type = reply_forward_type; @@ -1663,6 +1667,7 @@ create_reply_forward_helper (ReplyForwardAction action, rf_helper->account_name = (active_acc) ? g_strdup (active_acc) : modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + rf_helper->mailbox = g_strdup (active_mailbox); /* Note that window could be destroyed just AFTER calling register_window so we must ensure that this pointer does @@ -1681,6 +1686,7 @@ free_reply_forward_helper (gpointer data) helper = (ReplyForwardHelper *) data; g_free (helper->account_name); + g_free (helper->mailbox); if (helper->header) g_object_unref (helper->header); if (helper->parent_window) @@ -1706,6 +1712,7 @@ reply_forward_cb (ModestMailOperation *mail_op, ModestWindowMgr *mgr = NULL; gchar *signature = NULL; gboolean use_signature; + gchar *recipient; /* If there was any error. The mail operation could be NULL, this means that we already have the message downloaded and @@ -1715,10 +1722,12 @@ reply_forward_cb (ModestMailOperation *mail_op, goto cleanup; from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), - rf_helper->account_name); - signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr(), - rf_helper->account_name, - &use_signature); + rf_helper->account_name, rf_helper->mailbox); + recipient = modest_text_utils_get_email_address (from); + signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(), + recipient, + &use_signature); + g_free (recipient); /* Create reply mail */ switch (rf_helper->action) { @@ -1767,8 +1776,7 @@ reply_forward_cb (ModestMailOperation *mail_op, } /* Create and register the windows */ - /* TODO: fetch mailbox */ - msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, NULL, FALSE); + msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, rf_helper->mailbox, FALSE); mgr = modest_runtime_get_window_mgr (); modest_window_mgr_register_window (mgr, msg_win, (ModestWindow *) rf_helper->parent_window); @@ -2127,9 +2135,34 @@ new_messages_arrived (ModestMailOperation *self, send&receive was invoked by the user then do not show any visual notification, only play a sound and activate the LED (for the Maemo version) */ - if (TNY_IS_LIST(new_headers) && (tny_list_get_length (new_headers)) > 0) - modest_platform_on_new_headers_received (new_headers, - show_visual_notifications); + if (TNY_IS_LIST(new_headers) && (tny_list_get_length (new_headers)) > 0) { + + /* We only notify about really new messages (not seen) we get */ + TnyList *actually_new_list; + TnyIterator *iterator; + actually_new_list = TNY_LIST (tny_simple_list_new ()); + for (iterator = tny_list_create_iterator (new_headers); + !tny_iterator_is_done (iterator); + tny_iterator_next (iterator)) { + TnyHeader *header; + TnyHeaderFlags flags; + header = TNY_HEADER (tny_iterator_get_current (iterator)); + flags = tny_header_get_flags (header); + + if (!(flags & TNY_HEADER_FLAG_SEEN)) { + tny_list_append (actually_new_list, G_OBJECT (header)); + } + g_object_unref (header); + + } + g_object_unref (iterator); + + if (tny_list_get_length (actually_new_list) > 0) { + modest_platform_on_new_headers_received (actually_new_list, + show_visual_notifications); + } + g_object_unref (actually_new_list); + } } @@ -2563,7 +2596,7 @@ folder_refreshed_cb (ModestMailOperation *mail_op, gpointer user_data) { ModestMainWindow *win = NULL; - GtkWidget *folder_view; + GtkWidget *folder_view, *header_view; const GError *error; g_return_if_fail (TNY_IS_FOLDER (folder)); @@ -2582,6 +2615,8 @@ folder_refreshed_cb (ModestMailOperation *mail_op, folder_view = modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); + header_view = + modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW); if (folder_view) { TnyFolderStore *current_folder; @@ -2596,10 +2631,10 @@ folder_refreshed_cb (ModestMailOperation *mail_op, } /* Check if folder is empty and set headers view contents style */ - if (tny_folder_get_all_count (folder) == 0) + if ((tny_folder_get_all_count (folder) == 0) || + modest_header_view_is_empty (MODEST_HEADER_VIEW (header_view))) modest_main_window_set_contents_style (win, MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY); - } void @@ -2832,9 +2867,10 @@ enough_space_for_message (ModestMsgEditWindow *edit_window, /* Double check: memory full condition or message too big */ if (available_disk < MIN_FREE_SPACE || expected_size > available_disk) { + gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + modest_platform_information_banner (NULL, NULL, msg); + g_free (msg); - modest_platform_information_banner (NULL, NULL, - _KR("cerm_device_memory_full")); return FALSE; } @@ -2871,7 +2907,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi TnyTransportAccount *transport_account; ModestMailOperation *mail_operation; MsgData *data; - gchar *account_name, *from; + gchar *account_name; ModestAccountMgr *account_mgr; gboolean had_error = FALSE; ModestMainWindow *win = NULL; @@ -2913,7 +2949,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi modest_msg_edit_window_free_msg_data (edit_window, data); return FALSE; } - from = modest_account_mgr_get_from_string (account_mgr, account_name); /* Create the mail operation */ mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, @@ -2923,9 +2958,9 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi modest_mail_operation_save_to_drafts (mail_operation, transport_account, data->draft_msg, - from, - data->to, - data->cc, + data->from, + data->to, + data->cc, data->bcc, data->subject, data->plain_body, @@ -2962,7 +2997,6 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi modest_msg_edit_window_set_modified (edit_window, FALSE); /* Frees */ - g_free (from); g_free (account_name); g_object_unref (G_OBJECT (transport_account)); g_object_unref (G_OBJECT (mail_operation)); @@ -3016,7 +3050,6 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) MsgData *data; ModestAccountMgr *account_mgr; gchar *account_name; - gchar *from; ModestMailOperation *mail_operation; g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE); @@ -3065,14 +3098,13 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) /* Create the mail operation */ - from = modest_account_mgr_get_from_string (account_mgr, account_name); mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation); modest_mail_operation_send_new_mail (mail_operation, transport_account, data->draft_msg, - from, + data->from, data->to, data->cc, data->bcc, @@ -3099,7 +3131,6 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) } /* Free data: */ - g_free (from); g_free (account_name); g_object_unref (G_OBJECT (transport_account)); g_object_unref (G_OBJECT (mail_operation)); @@ -3394,20 +3425,21 @@ do_create_folder (GtkWindow *parent_window, static void modest_ui_actions_create_folder(GtkWidget *parent_window, - GtkWidget *folder_view) + GtkWidget *folder_view, + TnyFolderStore *parent_folder) { - TnyFolderStore *parent_folder; - + if (!parent_folder) { #ifdef MODEST_TOOLKIT_HILDON2 - ModestTnyAccountStore *acc_store; + ModestTnyAccountStore *acc_store; - acc_store = modest_runtime_get_account_store (); + acc_store = modest_runtime_get_account_store (); - parent_folder = (TnyFolderStore *) - modest_tny_account_store_get_local_folders_account (acc_store); + parent_folder = (TnyFolderStore *) + modest_tny_account_store_get_local_folders_account (acc_store); #else - parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); #endif + } if (parent_folder) { do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL); @@ -3429,13 +3461,13 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestWindow *window) if (!folder_view) return; - modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view); + modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view, NULL); #ifdef MODEST_TOOLKIT_HILDON2 } else if (MODEST_IS_FOLDER_WINDOW (window)) { GtkWidget *folder_view; folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window))); - modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view); + modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view, NULL); #endif } else { g_assert_not_reached (); @@ -3447,15 +3479,19 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op, gpointer user_data) { const GError *error = NULL; - const gchar *message = NULL; + gchar *message = NULL; + gboolean mem_full; /* Get error message */ error = modest_mail_operation_get_error (mail_op); if (!error) g_return_if_reached (); - if (error->domain == MODEST_MAIL_OPERATION_ERROR && - error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) { + mem_full = is_memory_full_error ((GError *) error, mail_op); + if (mem_full) { + message = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + } else if (error->domain == MODEST_MAIL_OPERATION_ERROR && + error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) { message = _CS("ckdg_ib_folder_already_exists"); } else if (error->domain == TNY_ERROR_DOMAIN && error->code == TNY_SERVICE_ERROR_STATE) { @@ -3469,6 +3505,9 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op, /* We don't set a parent for the dialog because the dialog will be destroyed so the banner won't appear */ modest_platform_information_banner (NULL, NULL, message); + + if (mem_full) + g_free (message); } typedef struct { @@ -4578,7 +4617,18 @@ headers_action_show_details (TnyHeader *header, gpointer user_data) { - modest_platform_run_header_details_dialog (GTK_WINDOW (window), header); + gboolean async_retrieval; + TnyMsg *msg = NULL; + + if (MODEST_IS_MSG_VIEW_WINDOW (window)) { + async_retrieval = TRUE; + msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (window)); + } else { + async_retrieval = FALSE; + } + modest_platform_run_header_details_dialog (GTK_WINDOW (window), header, async_retrieval, msg); + if (msg) + g_object_unref (msg); } /* @@ -4907,9 +4957,12 @@ on_move_to_dialog_response (GtkDialog *dialog, switch (response) { TnyFolderStore *dst_folder; + TnyFolderStore *selected; case MODEST_GTK_RESPONSE_NEW_FOLDER: - modest_ui_actions_create_folder (GTK_WIDGET (dialog), GTK_WIDGET (folder_view)); + selected = modest_folder_view_get_selected (folder_view); + modest_ui_actions_create_folder (GTK_WIDGET (dialog), GTK_WIDGET (folder_view), selected); + g_object_unref (selected); return; case GTK_RESPONSE_NONE: case GTK_RESPONSE_CANCEL: @@ -5039,7 +5092,9 @@ create_move_to_dialog (GtkWindow *win, g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view); /* Hide special folders */ +#ifndef MODEST_TOOLKIT_HILDON2 modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE); +#endif if (list_to_move) modest_folder_view_set_list_to_move (MODEST_FOLDER_VIEW (tree_view), list_to_move); #ifndef MODEST_TOOLKIT_HILDON2 @@ -5469,13 +5524,15 @@ 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, mail_op)) - modest_platform_information_banner ((GtkWidget *) win, - NULL, _KR("cerm_device_memory_full")); - else + if (error && is_memory_full_error ((GError *) error, mail_op)) { + gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), ""); + modest_platform_information_banner ((GtkWidget *) win, NULL, msg); + g_free (msg); + } else { modest_platform_run_information_dialog ((GtkWindow *) win, _("mail_in_ui_folder_move_target_error"), FALSE); + } if (win) g_object_unref (win); } @@ -6656,3 +6713,31 @@ modest_ui_actions_on_delete_account (GtkWindow *parent_window, } return removed; } + +void +modest_ui_actions_on_fetch_images (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window)); + + modest_msg_view_window_fetch_images (MODEST_MSG_VIEW_WINDOW (window)); + +} + +void +modest_ui_actions_on_reload_message (const gchar *msg_id) +{ + ModestWindow *window = NULL; + + g_return_if_fail (msg_id && msg_id[0] != '\0'); + if (!modest_window_mgr_find_registered_message_uid (modest_runtime_get_window_mgr (), + msg_id, + &window)) + return; + + + if (window == NULL || !MODEST_IS_MSG_VIEW_WINDOW (window)) + return; + + modest_msg_view_window_reload (MODEST_MSG_VIEW_WINDOW (window)); +}