X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=b7d12f977dbae6f55be58fecc171e3cae6cd4b22;hp=6f13855d2ae50de5eb311e24d9f1cf870dacfe4c;hb=95450fa69acf453d0ffdeabae6d6a67aeabac235;hpb=aab65ff35930f7c7d33ec080ae179f09150fabe2 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 6f13855..b7d12f9 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -47,10 +47,12 @@ #include #include #include -#include +#include #include "modest-account-mgr-helpers.h" #include "modest-mail-operation.h" +#include "modest-text-utils.h" +#include /* For ConIcIap */ #ifdef MODEST_HAVE_EASYSETUP #include "easysetup/modest-easysetup-wizard.h" @@ -108,7 +110,7 @@ modest_ui_actions_on_about (GtkAction *action, ModestWindow *win) gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG(about), _("a modest e-mail client\n\n" "design and implementation: Dirk-Jan C. Binnema\n" - "contributions from the fine people at KernelConcepts and Igalia\n" + "contributions from the fine people at KC and Ig\n" "uses the tinymail email framework written by Philip van Hoof")); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org"); @@ -586,8 +588,13 @@ void modest_ui_actions_on_sort (GtkAction *action, ModestWindow *window) { + ModestWindowMgr *mgr; + g_return_if_fail (MODEST_IS_WINDOW(window)); - /* FIXME: unimplemented */ + + /* Show sorting dialog */ + mgr = modest_runtime_get_window_mgr (); + } @@ -599,14 +606,17 @@ action_send (const gchar* account_name) g_return_val_if_fail (account_name, FALSE); + /* Get the transport account according to the open connection, + * because the account might specify connection-specific SMTP servers. + */ tny_account = - modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), - account_name, - TNY_ACCOUNT_TYPE_TRANSPORT); + modest_tny_account_store_get_transport_account_for_open_connection (modest_runtime_get_account_store(), + account_name); if (!tny_account) { g_printerr ("modest: cannot get tny transport account for %s\n", account_name); return FALSE; } + send_queue = modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(tny_account)); if (!send_queue) { g_object_unref (G_OBJECT(tny_account)); @@ -641,6 +651,7 @@ action_receive (const gchar* account_name) } /* Create the mail operation */ + /* TODO: The spec wants us to first do any pending deletions, before receiving. */ mail_op = modest_mail_operation_new (); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); modest_mail_operation_update_account (mail_op, TNY_STORE_ACCOUNT(tny_account)); @@ -651,7 +662,27 @@ action_receive (const gchar* account_name) return TRUE; } +/** Check that an appropriate connection is open. + */ +gboolean check_for_connection (const gchar *account_name) +{ + TnyDevice *device = modest_runtime_get_device (); +/* + g_assert (TNY_IS_MAEMO_CONIC_DEVICE (device)); + + TnyMaemoConicDevice *maemo_device = TNY_MAEMO_CONIC_DEVICE (device); +*/ + + if (tny_device_is_online (device)) + return TRUE; + else { + tny_maemo_conic_device_connect (TNY_MAEMO_CONIC_DEVICE (device), NULL); + + /* TODO: Wait until a result. */ + return TRUE; + } +} void modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) @@ -659,22 +690,35 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) gchar *account_name; - g_message ("online? %s", + g_message ("%s: online? %s", __FUNCTION__, tny_device_is_online(modest_runtime_get_device()) ? "yes":"no"); - + + /* As per the UI spec, only the active account should be affected, + * else the default folder if there is no active account: */ account_name = g_strdup(modest_window_get_active_account(MODEST_WINDOW(win))); if (!account_name) account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); if (!account_name) { - g_printerr ("modest: cannot get account\n"); + g_printerr ("modest: cannot get default account\n"); return; } + + /* Do not continue if no suitable connection is open: */ + if (!check_for_connection (account_name)) + return; - if (!action_send(account_name)) - g_printerr ("modest: failed to send\n"); + /* As per the UI spec, + * for POP accounts, we should receive, + * for IMAP we should synchronize everything, including receiving, + * for SMTP we should send, + * first receiving, then sending: + */ if (!action_receive(account_name)) g_printerr ("modest: failed to receive\n"); + if (!action_send(account_name)) + g_printerr ("modest: failed to send\n"); + } @@ -918,7 +962,7 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS); if (selected) { - modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), + modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), TNY_FOLDER (folder_store)); modest_widget_memory_restore (conf, G_OBJECT(header_view), "header-view"); @@ -973,7 +1017,7 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300); if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { -// tny_device_force_online (modest_runtime_get_device()); +// tny_maemo_conic_device_connect (TNY_MAEMO_CONIC_DEVICE (modest_runtime_get_device()); } } gtk_widget_destroy (dialog); @@ -1045,10 +1089,9 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) return; } transport_account = - TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_tny_account_by_account + TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_transport_account_for_open_connection (modest_runtime_get_account_store(), - account_name, - TNY_ACCOUNT_TYPE_TRANSPORT)); + account_name)); if (!transport_account) { g_printerr ("modest: no transport account found for '%s'\n", account_name); g_free (account_name); @@ -1265,27 +1308,46 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_windo parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); if (parent_folder) { - gchar *folder_name; - - folder_name = ask_for_folder_name (GTK_WINDOW (main_window), - _("Please enter a name for the new folder")); - - if (folder_name != NULL && strlen (folder_name) > 0) { - TnyFolder *new_folder; - ModestMailOperation *mail_op; - - mail_op = modest_mail_operation_new (); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - - new_folder = modest_mail_operation_create_folder (mail_op, - parent_folder, - (const gchar *) folder_name); - if (new_folder) - g_object_unref (new_folder); - g_object_unref (mail_op); + gboolean finished = FALSE; + gint result; + gchar *folder_name = NULL, *suggested_name = NULL; + + /* Run the new folder dialog */ + while (!finished) { + result = modest_platform_run_new_folder_dialog (GTK_WINDOW (main_window), + parent_folder, + suggested_name, + &folder_name); + + if (result == GTK_RESPONSE_REJECT) { + finished = TRUE; + } else { + ModestMailOperation *mail_op = modest_mail_operation_new (); + TnyFolder *new_folder = NULL; + + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + + new_folder = modest_mail_operation_create_folder (mail_op, + parent_folder, + (const gchar *) folder_name); + if (new_folder) { + g_object_unref (new_folder); + finished = TRUE; + } +/* else { */ +/* /\* TODO: check error and follow proper actions *\/ */ +/* /\* suggested_name = X; *\/ */ +/* /\* Show error to the user *\/ */ +/* modest_platform_run_information_dialog (GTK_WINDOW (main_window), */ +/* MODEST_INFORMATION_CREATE_FOLDER); */ +/* } */ + g_object_unref (mail_op); + } g_free (folder_name); + folder_name = NULL; } + g_object_unref (parent_folder); } } @@ -1333,8 +1395,8 @@ static void delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) { TnyFolderStore *folder; - ModestMailOperation *mail_op; GtkWidget *folder_view; + gint response; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); @@ -1344,13 +1406,27 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) return; folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); - - mail_op = modest_mail_operation_new (); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), move_to_trash); - g_object_unref (G_OBJECT (mail_op)); + /* Ask the user */ + response = modest_platform_run_confirmation_dialog (GTK_WINDOW (main_window), + MODEST_CONFIRMATION_DELETE_FOLDER, + folder); + + if (response == GTK_RESPONSE_OK) { + ModestMailOperation *mail_op = modest_mail_operation_new (); + + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), move_to_trash); + + /* Show error if happened */ + if (modest_mail_operation_get_error (mail_op)) + modest_platform_run_information_dialog (GTK_WINDOW (main_window), + MODEST_INFORMATION_DELETE_FOLDER); + + g_object_unref (G_OBJECT (mail_op)); + } + g_object_unref (G_OBJECT (folder)); } @@ -1608,21 +1684,45 @@ modest_ui_actions_on_change_fullscreen (GtkAction *action, gtk_window_present (GTK_WINDOW (window)); } +/* + * Show the header details in a ModestDetailsDialog widget + */ static void show_header_details (TnyHeader *header, GtkWindow *window) { GtkWidget *dialog; - dialog = modest_msg_view_details_dialog_new (window, header); - g_object_unref (header); + /* Create dialog */ + dialog = modest_details_dialog_new_with_header (window, header); + + /* Run dialog */ gtk_widget_show_all (dialog); + gtk_dialog_run (GTK_DIALOG (dialog)); + + gtk_widget_destroy (dialog); +} + +/* + * Show the folder details in a ModestDetailsDialog widget + */ +static void +show_folder_details (TnyFolder *folder, + GtkWindow *window) +{ + GtkWidget *dialog; + + /* Create dialog */ + dialog = modest_details_dialog_new_with_folder (window, folder); + /* Run dialog */ + gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } + void modest_ui_actions_on_details (GtkAction *action, ModestWindow *win) @@ -1659,13 +1759,14 @@ modest_ui_actions_on_details (GtkAction *action, if (gtk_widget_is_focus (folder_view)) { TnyFolder *folder; - folder = TNY_FOLDER (modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view))); + folder = (TnyFolder *) modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); /* Show only when it's a folder */ if (!folder || !TNY_IS_FOLDER (folder)) return; - /* TODO */ + show_folder_details (folder, GTK_WINDOW (win)); + } else { header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), MODEST_WIDGET_TYPE_HEADER_VIEW); @@ -1775,3 +1876,79 @@ modest_ui_actions_on_select_contacts (GtkAction *action, ModestMsgEditWindow *wi g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); modest_msg_edit_window_select_contacts (window); } + + +void +modest_ui_actions_on_move_to (GtkAction *action, + ModestWindow *win) +{ + GtkWidget *dialog, *scroll, *folder_view, *tree_view; + gint result; + + g_return_if_fail (MODEST_IS_MAIN_WINDOW (win)); + + dialog = gtk_dialog_new_with_buttons (_("mcen_ti_moveto_folders_title"), + GTK_WINDOW (win), + GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + /* Create scrolled window */ + scroll = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + /* Create folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + tree_view = modest_folder_view_new (NULL); + gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), + gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view))); + + gtk_container_add (GTK_CONTAINER (scroll), tree_view); + + /* Add scroll to dialog */ + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), + scroll, FALSE, FALSE, 0); + + gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox)); + + result = gtk_dialog_run (GTK_DIALOG(dialog)); + if (result == GTK_RESPONSE_ACCEPT) { + TnyFolderStore *folder_store; + folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (tree_view)); + if (TNY_IS_ACCOUNT (folder_store)) { + } else { + ModestMailOperation *mail_op; + + /* Create mail operation */ + mail_op = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + + /* Get folder or messages to transfer */ + if (gtk_widget_is_focus (folder_view)) { + TnyFolderStore *src_folder; + src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); + + if (TNY_IS_FOLDER (src_folder)) + modest_mail_operation_xfer_folder (mail_op, + TNY_FOLDER (src_folder), + folder_store, + TRUE); + + /* Frees */ + g_object_unref (G_OBJECT (src_folder)); + } else { + } + g_object_unref (G_OBJECT (mail_op)); + } + g_object_unref (folder_store); + } + + gtk_widget_destroy (dialog); +}