+ folder = modest_tny_local_folders_account_get_merged_outbox (local_folders_account);
+ g_object_unref (local_folders_account);
+ info->connect = FALSE;
+ }
+ if (folder) {
+ TnyMsg *msg = tny_folder_find_msg (folder, uri, NULL);
+ if (msg) {
+ info->connect = FALSE;
+ g_object_unref (msg);
+ } else {
+ info->connect = TRUE;
+ }
+ g_object_unref (folder);
+ }
+
+ /* We need to call it into an idle to get
+ modest_platform_connect_and_perform into the main
+ loop */
+ g_idle_add (on_idle_open_message_performer, info);
+ osso_retval = OSSO_OK;
+ } else {
+ g_free (uri);
+ osso_retval = OSSO_ERROR;
+ g_idle_add (notify_error_in_dbus_callback, NULL);
+ }
+
+ if (account)
+ g_object_unref (account);
+ return osso_retval;
+}
+
+static void
+on_remove_msgs_finished (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ TnyHeader *header;
+ ModestWindow *top_win = NULL, *msg_view = NULL;
+
+ header = (TnyHeader *) user_data;
+
+ /* Get the main window if exists */
+ top_win = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr());
+ if (!top_win) {
+ g_object_unref (header);
+ return;
+ }
+
+ if (modest_window_mgr_find_registered_header (modest_runtime_get_window_mgr(),
+ header, &msg_view)) {
+ if (MODEST_IS_MSG_VIEW_WINDOW (msg_view))
+ modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (msg_view));
+ }
+ g_object_unref (header);
+
+ /* Refilter the header views explicitely */
+
+ /* TODO: call modest_window_mgr_refilter_header_views */
+ /* this call will go through all the windows, get the header views and refilter them */
+}
+
+static gpointer
+thread_prepare_delete_message (gpointer userdata)
+{
+ TnyList *headers = NULL, *tmp_headers = NULL;
+ TnyFolder *folder = NULL;
+ TnyIterator *iter = NULL;
+ TnyHeader *header = NULL, *msg_header = NULL;
+ TnyMsg *msg = NULL;
+ TnyAccount *account = NULL;
+ char *uri;
+ gchar *uid = NULL;
+ ModestMailOperation *mail_op = NULL;
+ ModestWindow *top_win = NULL;
+
+ uri = (char *) userdata;
+
+ msg = find_message_by_url (uri, &account);
+ if (account)
+ g_object_unref (account);
+
+ if (!msg) {
+ g_debug ("%s: Could not find message '%s'", __FUNCTION__, uri);
+ g_idle_add (notify_error_in_dbus_callback, NULL);
+ g_free (uri);
+ return FALSE;
+ }
+
+ top_win = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr());
+
+ folder = tny_msg_get_folder (msg);
+ if (!folder) {
+ g_debug ("%s: Could not find folder (uri:'%s')", __FUNCTION__, uri);
+ g_object_unref (msg);
+ g_idle_add (notify_error_in_dbus_callback, NULL);
+ g_free (uri);
+ return FALSE;
+ }
+
+ /* Get UID */
+ msg_header = tny_msg_get_header (msg);
+ uid = tny_header_dup_uid (msg_header);
+ g_object_unref (msg);
+ g_object_unref (msg_header);
+
+ headers = tny_simple_list_new ();
+ tny_folder_get_headers (folder, headers, TRUE, NULL);
+ iter = tny_list_create_iterator (headers);
+
+ while (!tny_iterator_is_done (iter)) {
+ gchar *cur_id = NULL;
+
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ if (header)
+ cur_id = tny_header_dup_uid (header);
+
+ if (cur_id && uid && g_str_equal (cur_id, uid)) {
+ g_free (cur_id);
+ /* g_debug ("Found corresponding header from folder"); */
+ break;
+ }
+ g_free (cur_id);
+
+ if (header) {
+ g_object_unref (header);
+ header = NULL;