#include "modest-tny-platform-factory.h"
#include "modest-platform.h"
+#include <tny-mime-part.h>
#ifdef MODEST_PLATFORM_MAEMO
#include "maemo/modest-osso-state-saving.h"
gpointer user_data)
{
ModestMailOperation *mail_op = NULL;
+ GtkTreeModel *model = NULL;
mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_DELETE, G_OBJECT(win));
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
/* Always delete. TODO: Move to trash still not supported */
modest_mail_operation_remove_msg (mail_op, header, FALSE);
g_object_unref (G_OBJECT (mail_op));
+
+ /* refilter treemodel to hide marked-as-deleted rows */
+ if (MODEST_IS_HEADER_VIEW (user_data)) {
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_data));
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));
+ }
}
void
GtkWidget *header_view;
g_return_if_fail (MODEST_IS_WINDOW(win));
-
+ header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
+ MODEST_WIDGET_TYPE_HEADER_VIEW);
+
/* Check first if the header view has the focus */
if (MODEST_IS_MAIN_WINDOW (win)) {
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
- MODEST_WIDGET_TYPE_HEADER_VIEW);
if (!gtk_widget_is_focus (header_view))
return;
}
-
+
header_list = get_selected_headers (win);
if (!header_list) return;
- /* Check if any of the headers is already opened */
+ /* Check if any of the headers is already opened, or in the process of being opened */
iter = tny_list_create_iterator (header_list);
found = FALSE;
mgr = modest_runtime_get_window_mgr ();
while (!tny_iterator_is_done (iter) && !found) {
header = TNY_HEADER (tny_iterator_get_current (iter));
- if (modest_window_mgr_find_window_by_header (mgr, header))
- found = TRUE;
+ found = modest_window_mgr_find_registered_header (mgr, header, NULL);
g_object_unref (header);
tny_iterator_next (iter);
}
}
/* Remove each header */
- do_headers_action (win, headers_action_delete, NULL);
+ do_headers_action (win, headers_action_delete, header_view);
if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
gtk_widget_destroy (GTK_WIDGET(win));
modest_osso_save_state();
#endif /* MODEST_PLATFORM_MAEMO */
- /* FIXME: we need to cancel all actions/threads here,
- so we really quit */
+ g_debug ("closing down, clearing %d item(s) from operation queue",
+ modest_mail_operation_queue_num_elements
+ (modest_runtime_get_mail_operation_queue()));
+
+ /* cancel all outstanding operations */
+ modest_mail_operation_queue_cancel_all
+ (modest_runtime_get_mail_operation_queue());
+
+ g_debug ("queue has been cleared");
+
+ /* note: when modest-tny-account-store is finalized,
+ it will automatically set all network connections
+ to offline */
gtk_main_quit ();
}
void
modest_ui_actions_on_close_window (GtkAction *action, ModestWindow *win)
{
- if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
- gtk_widget_destroy (GTK_WIDGET (win));
- } else if (MODEST_IS_MSG_EDIT_WINDOW (win)) {
- gboolean ret_value;
- g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value);
- } else if (MODEST_IS_WINDOW (win)) {
- gtk_widget_destroy (GTK_WIDGET (win));
- } else {
- g_return_if_reached ();
- }
+ gboolean ret_value;
+ g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value);
+
+/* if (MODEST_IS_MSG_VIEW_WINDOW (win)) { */
+/* gtk_widget_destroy (GTK_WIDGET (win)); */
+/* } else if (MODEST_IS_MSG_EDIT_WINDOW (win)) { */
+/* gboolean ret_value; */
+/* g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value); */
+/* } else if (MODEST_IS_WINDOW (win)) { */
+/* gtk_widget_destroy (GTK_WIDGET (win)); */
+/* } else { */
+/* g_return_if_reached (); */
+/* } */
}
void
win = modest_msg_edit_window_new (msg, account);
} else {
gchar *uid = modest_tny_folder_get_header_unique_id (header);
-
+
if (MODEST_IS_MAIN_WINDOW (parent_win)) {
GtkWidget *header_view;
GtkTreeSelection *sel;
GList *sel_list = NULL;
GtkTreeModel *model;
-
+
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(parent_win),
MODEST_WIDGET_TYPE_HEADER_VIEW);
not_opened_headers = tny_simple_list_new ();
not_opened_cached_headers = tny_simple_list_new ();
while (!tny_iterator_is_done (iter)) {
+
ModestWindow *window;
TnyHeader *header;
+ gboolean found;
header = TNY_HEADER (tny_iterator_get_current (iter));
flags = tny_header_get_flags (header);
- window = modest_window_mgr_find_window_by_header (mgr, header);
+ window = NULL;
+ found = modest_window_mgr_find_registered_header (mgr, header, &window);
+
/* Do not open again the message and present the
window to the user */
- if (window)
- gtk_window_present (GTK_WINDOW (window));
- else if (!(flags & TNY_HEADER_FLAG_CACHED))
- tny_list_append (not_opened_headers, G_OBJECT (header));
- /* Check if msg has already been retreived */
- else
- tny_list_append (not_opened_cached_headers, G_OBJECT (header));
-
+ if (found) {
+ if (window)
+ gtk_window_present (GTK_WINDOW (window));
+ else
+ /* the header has been registered already, we don't do
+ * anything but wait for the window to come up*/
+ g_warning ("debug: header %p already registered, waiting for window",
+ header);
+ } else {
+ /* register the header before actually creating the window */
+ modest_window_mgr_register_header (mgr, header);
+
+ if (!(flags & TNY_HEADER_FLAG_CACHED))
+ tny_list_append (not_opened_headers, G_OBJECT (header));
+ /* Check if msg has already been retreived */
+ else
+ tny_list_append (not_opened_cached_headers, G_OBJECT (header));
+ }
g_object_unref (header);
tny_iterator_next (iter);
}
/* Open each cached message */
if (tny_list_get_length (not_opened_cached_headers) > 0) {
- mail_op2 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_OPEN,
+ mail_op2 = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE,
G_OBJECT (win),
modest_ui_actions_get_msgs_full_error_handler,
NULL);
/* Set send/receive operation in progress */
modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW(win));
- mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT(win));
+ mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE,
+ G_OBJECT (win),
+ modest_ui_actions_send_receive_error_handler,
+ NULL);
+
g_signal_connect (G_OBJECT(mail_op), "progress-changed",
G_CALLBACK (_on_send_receive_progress_changed),
win);
gpointer user_data)
{
GObject *win = modest_mail_operation_get_source (mail_op);
-
- /* TODO: what should we do in case of this error ? */
- g_warning ("Invalid folder name");
-
+ const GError *error = NULL;
+ const gchar *message = NULL;
+
+ /* Get error message */
+ error = modest_mail_operation_get_error (mail_op);
+ if (error != NULL && error->message != NULL) {
+ message = error->message;
+ } else {
+ message = _("!!! FIXME: Unable to rename");
+ }
+
+ /* Show notification dialog */
+ modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, message);
g_object_unref (win);
}
first = modest_msg_view_window_first_message_selected (self);
if (last & first) {
/* No more messages to view, so close this window */
- gboolean ret_value;
- g_signal_emit_by_name (G_OBJECT (self), "delete-event", NULL, &ret_value);
+/* gboolean ret_value; */
+/* g_signal_emit_by_name (G_OBJECT (self), "delete-event", NULL, &ret_value); */
+ modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
} else if (last)
modest_msg_view_window_select_previous_message (self);
else
gpointer user_data)
{
GObject *win = modest_mail_operation_get_source (mail_op);
-
- /* TODO: show error message */
- modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
- _("mail_in_ui_folder_move_target_error"));
+ const GError *error = NULL;
+ const gchar *message = NULL;
+
+ /* Get error message */
+ error = modest_mail_operation_get_error (mail_op);
+ if (error != NULL && error->message != NULL) {
+ message = error->message;
+ } else {
+ message = _("mail_in_ui_folder_move_target_error");
+ }
+
+ /* Show notification dialog */
+ modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL, message);
g_object_unref (win);
}
+void
+modest_ui_actions_send_receive_error_handler (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ GObject *win = modest_mail_operation_get_source (mail_op);
+ const GError *error = modest_mail_operation_get_error (mail_op);
+
+ g_return_if_fail (error != NULL);
+ if (error->message != NULL)
+ g_printerr ("modest: %s\n", error->message);
+ else
+ g_printerr ("modest: unkonw error on sedn&receive operation");
+
+ /* Show error message */
+ if (modest_mail_operation_get_id (mail_op) == MODEST_MAIL_OPERATION_TYPE_RECEIVE)
+ modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
+ _CS("sfil_ib_unable_to_receive"));
+ else
+ modest_platform_run_information_dialog ((win) ? GTK_WINDOW (win) : NULL,
+ _CS("sfil_ib_unable_to_send"));
+ g_object_unref (win);
+}
+
static void
open_msg_for_purge_cb (ModestMailOperation *mail_op,
TnyHeader *header,
TnyIterator *iter;
TnyHeader *header;
TnyHeaderFlags flags;
- GtkWidget *msg_view_window;
+ ModestWindow *msg_view_window = NULL;
+ gboolean found;
+
g_return_if_fail (MODEST_IS_MAIN_WINDOW (win));
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
return;
}
- msg_view_window = GTK_WIDGET (modest_window_mgr_find_window_by_header (modest_runtime_get_window_mgr (), header));
+ found = modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr (),
+ header, &msg_view_window);
flags = tny_header_get_flags (header);
if (!(flags & TNY_HEADER_FLAG_CACHED))
return;
-
- if (msg_view_window != NULL) {
- modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
+ if (found) {
+ if (msg_view_window != NULL)
+ modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
+ else {
+ /* do nothing; uid was registered before, so window is probably on it's way */
+ g_warning ("debug: header %p has already been registered", header);
+ }
} else {
ModestMailOperation *mail_op = NULL;
- mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_OPEN,
+ modest_window_mgr_register_header (modest_runtime_get_window_mgr (), header);
+ mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE,
G_OBJECT (win),
modest_ui_actions_get_msgs_full_error_handler,
NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
modest_mail_operation_get_msg (mail_op, header, open_msg_for_purge_cb, win);
-
+
g_object_unref (mail_op);
}
if (header)
/* Transfer messages */
if (response == GTK_RESPONSE_OK) {
- mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT(win));
+ mail_op =
+ modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE,
+ G_OBJECT(win),
+ modest_ui_actions_move_folder_error_handler,
+ NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);