}
}
-/** A convenience method, because deleting a message is
- * otherwise complicated, and it's best to change it in one place
- * when we change it.
- */
-void modest_do_messages_delete (TnyList *headers, ModestWindow *win)
-{
- ModestMailOperation *mail_op = NULL;
- mail_op = modest_mail_operation_new (win ? G_OBJECT(win) : NULL);
- modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
- mail_op);
-
- /* Always delete. TODO: Move to trash still not supported */
- modest_mail_operation_remove_msgs (mail_op, headers, FALSE);
- g_object_unref (G_OBJECT (mail_op));
-}
-
/** After deleing a message that is currently visible in a window,
* show the next message from the list, or close the window if there are no more messages.
**/
GtkTreeRowReference *prev_row_reference = NULL;
GtkTreePath *next_path = NULL;
GtkTreePath *prev_path = NULL;
- GError *err = NULL;
+ ModestMailOperation *mail_op = NULL;
/* Find last selected row */
if (MODEST_IS_MAIN_WINDOW (win)) {
modest_window_disable_dimming (MODEST_WINDOW(win));
/* Remove each header. If it's a view window header_view == NULL */
- modest_do_messages_delete (header_list, win);
+ mail_op = modest_mail_operation_new ((GObject *) win);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+ mail_op);
+ modest_mail_operation_remove_msgs (mail_op, header_list, FALSE);
+ g_object_unref (mail_op);
/* Enable window dimming management */
if (sel != NULL) {
if (prev_path != NULL)
gtk_tree_path_free (prev_path);
}
-
- if (err != NULL) {
- printf ("DEBUG: %s: Error: code=%d, text=%s\n", __FUNCTION__, err->code, err->message);
- g_error_free(err);
- }
/* Update toolbar dimming state */
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
+ if (main_window)
+ modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
/* Free */
g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
mgr = modest_runtime_get_window_mgr ();
modest_window_mgr_register_window (mgr, win);
g_object_unref (win);
- gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent_win));
gtk_widget_show_all (GTK_WIDGET(win));
}
if (response == GTK_RESPONSE_CANCEL)
return FALSE;
- return modest_platform_connect_and_wait(GTK_WINDOW (win), account);
+ return modest_platform_connect_and_wait((GtkWindow *) win, account);
}
/*
TnyList *new_headers,
gpointer user_data)
{
- /* Notify new messages have been downloaded */
- if ((new_headers != NULL) && (tny_list_get_length (new_headers) > 0))
+ GObject *source;
+
+ source = modest_mail_operation_get_source (self);
+
+ /* Notify new messages have been downloaded. Do not notify if
+ the send&receive was invoked by the user, i.e, if the mail
+ operation has a source (the main window) */
+ if ((new_headers != NULL) && (tny_list_get_length (new_headers) > 0) && !source)
modest_platform_on_new_headers_received (new_headers);
+
+ if (source)
+ g_object_unref (source);
}
/*
* be more flexible.
*/
void
-modest_ui_actions_do_send_receive (const gchar *account_name, ModestWindow *win)
+modest_ui_actions_do_send_receive (const gchar *account_name,
+ ModestWindow *win)
{
gchar *acc_name = NULL;
ModestMailOperation *mail_op;
/* If no account name was provided then get the current account, and if
there is no current account then pick the default one: */
if (!account_name) {
- acc_name = g_strdup (modest_window_get_active_account(win));
+ if (win)
+ acc_name = g_strdup (modest_window_get_active_account (win));
if (!acc_name)
acc_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
if (!acc_name) {
acc_name = g_strdup (account_name);
}
-
/* Ensure that we have a connection available */
store_account =
modest_tny_account_store_get_server_account (modest_runtime_get_account_store (),
acc_name,
TNY_ACCOUNT_TYPE_STORE);
+
if (!modest_platform_connect_and_wait (NULL, TNY_ACCOUNT (store_account))) {
g_object_unref (store_account);
return;
g_object_unref (store_account);
/* Set send/receive operation in progress */
- modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW(win));
-
+ if (win && MODEST_IS_MAIN_WINDOW (win))
+ modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW(win));
+
mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT (win),
modest_ui_actions_send_receive_error_handler,
NULL, NULL);
- g_signal_connect (G_OBJECT(mail_op), "operation-finished",
- G_CALLBACK (on_send_receive_finished),
- win);
+ if (win && MODEST_IS_MAIN_WINDOW (win))
+ g_signal_connect (G_OBJECT(mail_op), "operation-finished",
+ G_CALLBACK (on_send_receive_finished),
+ win);
/* Send & receive. */
/* TODO: The spec wants us to first do any pending deletions, before receiving. */
void
modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
{
+ TnyTransportAccount *transport_account = NULL;
+
g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window));
if (!modest_msg_edit_window_check_names (edit_window, TRUE))
}
/* Get the currently-active transport account for this modest account: */
- TnyTransportAccount *transport_account =
- TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_transport_account_for_open_connection
- (modest_runtime_get_account_store(),
- account_name));
+/* TnyTransportAccount *transport_account = */
+/* TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_transport_account_for_open_connection */
+/* (modest_runtime_get_account_store(), */
+/* account_name)); */
+ if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+ transport_account = TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+ (modest_runtime_get_account_store(),
+ account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
+ }
+
if (!transport_account) {
/* Run account setup wizard */
if (!modest_ui_actions_run_account_setup_wizard(MODEST_WINDOW(edit_window)))
{
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
- if (delete_folder (main_window, FALSE)) {
- GtkWidget *folder_view;
-
- folder_view = modest_main_window_get_child_widget (main_window,
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
- }
+ delete_folder (main_window, FALSE);
}
void
ModestMainWindow *main_window)
{
g_return_if_fail(server_account_name);
- /* printf("DEBUG: %s: server_account_name=%s\n", __FUNCTION__, server_account_name); */
/* Initalize output parameters: */
if (cancel)
modest_runtime_get_account_mgr(), server_account_name);
if (!server_name) {/* This happened once, though I don't know why. murrayc. */
g_warning("%s: Could not get server name for server account '%s'", __FUNCTION__, server_account_name);
- *cancel = TRUE;
+ if (cancel)
+ *cancel = TRUE;
return;
}
/* check if folder_store is an remote account */
if (TNY_IS_ACCOUNT (folder_store)) {
TnyAccount *local_account = NULL;
+ TnyAccount *mmc_account = NULL;
ModestTnyAccountStore *account_store = NULL;
account_store = modest_runtime_get_account_store ();
local_account = modest_tny_account_store_get_local_folders_account (account_store);
+ mmc_account = modest_tny_account_store_get_mmc_folders_account (account_store);
- if ((gpointer) local_account != (gpointer) folder_store) {
+ if ((gpointer) local_account != (gpointer) folder_store &&
+ (gpointer) mmc_account != (gpointer) folder_store) {
is_local_account = FALSE;
/* New button should be dimmed on remote
account root */
gpointer user_data)
{
ModestWindow *main_window = NULL;
- GtkWidget *folder_view = NULL;
- GObject *win = modest_mail_operation_get_source (mail_op);
+ GObject *win = NULL;
const GError *error = NULL;
const gchar *message = NULL;
/* Disable next automatic folder selection */
main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
FALSE); /* don't create */
- if (!main_window)
- g_warning ("%s: BUG: no main window", __FUNCTION__);
-
- folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
- modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view));
+ if (main_window) {
+ GtkWidget *folder_view = NULL;
- if (user_data && TNY_IS_FOLDER (user_data)) {
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
- TNY_FOLDER (user_data), FALSE);
+ folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view));
+
+ if (user_data && TNY_IS_FOLDER (user_data)) {
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
+ TNY_FOLDER (user_data), FALSE);
+ }
}
/* Show notification dialog */
- modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, message);
- g_object_unref (win);
+ win = modest_mail_operation_get_source (mail_op);
+ if (G_IS_OBJECT (win)) {
+ modest_platform_run_information_dialog (GTK_WINDOW (win), message);
+ g_object_unref (win);
+ }
}
void
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (header_view));
-
+ if (!header_list) {
+ g_warning ("%s: no header selected", __FUNCTION__);
+ return;
+ }
+
if (tny_list_get_length (header_list) == 1) {
iter = tny_list_create_iterator (header_list);
header = TNY_HEADER (tny_iterator_get_current (iter));
g_object_unref (iter);
- } else {
+ } else
+ return;
+
+ if (!header || !TNY_IS_HEADER(header)) {
+ g_warning ("%s: header is not valid", __FUNCTION__);
return;
}
-
+
found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
header, &msg_view_window);
flags = tny_header_get_flags (header);
/* Get selected headers */
headers = get_selected_headers (MODEST_WINDOW (win));
+ if (!headers) {
+ g_warning ("%s: no headers selected", __FUNCTION__);
+ return;
+ }
+
if (dst_is_pop) {
modest_platform_information_banner (GTK_WIDGET (win),
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
gtk_tree_selection_unselect_all (sel);
+ /* Let gtk events run. We need that the folder
+ view frees its reference to the source
+ folder *before* issuing the mail operation
+ so we need the signal handler of selection
+ changed to happen before the mail
+ operation */
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+
mail_op =
modest_mail_operation_new_with_error_handling (G_OBJECT(win),
modest_ui_actions_move_folder_error_handler,
TnyHeader *header = NULL;
TnyFolder *src_folder = NULL;
TnyAccount *account = NULL;
+ gboolean do_xfer = FALSE;
/* Create header list */
header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
src_folder = TNY_FOLDER (tny_header_get_folder(header));
g_object_unref (header);
- /* Transfer the message if online or confirmed by the user */
account = tny_folder_get_account (src_folder);
- if (remote_folder_is_pop(TNY_FOLDER_STORE (src_folder)) ||
- (modest_platform_is_network_folderstore(TNY_FOLDER_STORE (src_folder)) &&
- connect_to_get_msg(MODEST_WINDOW (win), 1, account))) {
+ if (!modest_platform_is_network_folderstore(TNY_FOLDER_STORE(src_folder))) {
+ /* Transfer if the source folder is local */
+ do_xfer = TRUE;
+ } else if (remote_folder_is_pop(TNY_FOLDER_STORE(src_folder))) {
+ /* Transfer if the source folder is POP (as it means
+ * that the message is already downloaded) */
+ do_xfer = TRUE;
+ } else if (connect_to_get_msg(MODEST_WINDOW(win), 1, account)) {
+ /* Transfer after asking confirmation */
+ do_xfer = TRUE;
+ }
+
+ if (do_xfer) {
modest_ui_actions_xfer_messages_from_move_to (dst_folder, MODEST_WINDOW (win));
}
g_object_unref (account);