* enable getting debug information over dbus; for now
[modest] / src / dbus_api / modest-dbus-callbacks.c
index 0d17f21..15a3f31 100644 (file)
@@ -70,6 +70,7 @@ typedef struct
 
 
 static gboolean notify_error_in_dbus_callback (gpointer user_data);
+static gboolean notify_msg_not_found_in_idle (gpointer user_data);
 static gboolean on_idle_compose_mail(gpointer user_data);
 static gboolean on_idle_top_application (gpointer user_data);
 
@@ -372,7 +373,6 @@ out:
        return msg;
 }
 
-
 typedef struct {
        TnyAccount *account;
        gchar *uri;
@@ -398,8 +398,9 @@ on_open_message_performer (gboolean canceled,
        info = (OpenMsgPerformerInfo *) user_data;
        uri = info->uri;
 
-       if (err)
+       if (canceled || err) {
                goto frees;
+       }
 
        /* Get message */
        folder = tny_store_account_find_folder (TNY_STORE_ACCOUNT (account), uri, NULL);
@@ -410,7 +411,18 @@ on_open_message_performer (gboolean canceled,
                is_draft = TRUE;
        }
 
+       if (!msg) {
+               g_idle_add (notify_msg_not_found_in_idle, NULL);
+               goto frees;
+       }
+
        header = tny_msg_get_header (msg);
+       if (header && (tny_header_get_flags (header)&TNY_HEADER_FLAG_DELETED)) {
+               g_object_unref (header);
+               g_object_unref (msg);
+               g_idle_add (notify_msg_not_found_in_idle, NULL);
+               goto frees;
+       }
        msg_uid =  modest_tny_folder_get_header_unique_id (header); 
        win_mgr = modest_runtime_get_window_mgr ();
 
@@ -429,8 +441,13 @@ on_open_message_performer (gboolean canceled,
                if (is_draft) {
                        msg_view = modest_msg_edit_window_new (msg, modest_account_name, TRUE);
                } else {
-                       msg_view = modest_msg_view_window_new_for_search_result (msg, modest_account_name,
-                                                      msg_uid);
+                       TnyHeader *header;
+                       header = tny_msg_get_header (msg);
+                       msg_view = modest_msg_view_window_new_for_search_result (msg, modest_account_name, msg_uid);
+                       if (! (tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
+                               tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
+                       g_object_unref (header);
+                       
                }               
                modest_window_mgr_register_window (win_mgr, msg_view);
                gtk_widget_show_all (GTK_WIDGET (msg_view));
@@ -657,18 +674,64 @@ on_delete_message (GArray *arguments, gpointer data, osso_rpc_t *retval)
 static gboolean
 on_idle_send_receive(gpointer user_data)
 {
-       ModestWindow *main_win =
+       gboolean auto_update;
+       ModestWindow *main_win = NULL;
+
+       main_win =
                modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                   FALSE); /* don't create */
 
-       /* Send & receive all */
        gdk_threads_enter (); /* CHECKED */
-       modest_ui_actions_do_send_receive_all (main_win);
+
+       /* Check if the autoupdate feature is on */
+       auto_update = modest_conf_get_bool (modest_runtime_get_conf (), 
+                                           MODEST_CONF_AUTO_UPDATE, NULL);
+
+       if (auto_update)
+               /* Do send receive */
+               modest_ui_actions_do_send_receive_all (main_win);
+       else
+               /* Disable auto update */
+               modest_platform_set_update_interval (0);
+
        gdk_threads_leave (); /* CHECKED */
        
        return FALSE;
 }
 
+
+static gint 
+on_dbus_method_dump (DBusConnection *con, DBusMessage *message)
+{
+       gchar *str;
+       gchar *op_queue_str;
+       DBusMessage *reply;
+       dbus_uint32_t serial = 0;
+       
+       op_queue_str = modest_mail_operation_queue_to_string
+               (modest_runtime_get_mail_operation_queue ());
+
+       str = g_strdup_printf ("\nmodest debug dump\n=================\n%s\n",
+                              op_queue_str);
+       g_free (op_queue_str);
+
+       g_printerr (str);
+       
+       reply = dbus_message_new_method_return (message);
+       if (reply) {
+               dbus_message_append_args (reply,
+                                         DBUS_TYPE_STRING, &str,
+                                         DBUS_TYPE_INVALID);
+               dbus_connection_send (con, reply, &serial);
+               dbus_connection_flush (con);
+               dbus_message_unref (reply);
+       }
+       
+       g_free (str);
+       return OSSO_OK;
+}
+
+
 static gint 
 on_send_receive(GArray *arguments, gpointer data, osso_rpc_t * retval)
 {      
@@ -790,7 +853,7 @@ modest_dbus_req_handler(const gchar * interface, const gchar * method,
        } else if (g_ascii_strcasecmp (method, MODEST_DBUS_METHOD_TOP_APPLICATION) == 0) {
                if (arguments->len != 0)
                        goto param_error;
-               return on_top_application (arguments, data, retval);
+               return on_top_application (arguments, data, retval); 
        } else { 
                /* We need to return INVALID here so
                 * libosso will return DBUS_HANDLER_RESULT_NOT_YET_HANDLED,
@@ -1360,12 +1423,16 @@ modest_dbus_req_filter (DBusConnection *con,
                on_dbus_method_search (con, message);
                handled = TRUE;                         
        } else if (dbus_message_is_method_call (message,
-                                        MODEST_DBUS_IFACE,
-                                        MODEST_DBUS_METHOD_GET_FOLDERS)) {
+                                               MODEST_DBUS_IFACE,
+                                               MODEST_DBUS_METHOD_GET_FOLDERS)) {
                on_dbus_method_get_folders (con, message);
                handled = TRUE;                         
-       }
-       else {
+       } else if (dbus_message_is_method_call (message,
+                                               MODEST_DBUS_IFACE,
+                                               MODEST_DBUS_METHOD_DUMP)) {
+               on_dbus_method_dump (con, message);
+               handled = TRUE;
+       } else {
                /* Note that this mentions methods that were already handled in modest_dbus_req_handler(). */
                /* 
                g_debug ("  debug: %s: Unexpected (maybe already handled) D-Bus method:\n   Interface=%s, Member=%s\n", 
@@ -1396,3 +1463,11 @@ notify_error_in_dbus_callback (gpointer user_data)
 
        return FALSE;
 }
+
+static gboolean
+notify_msg_not_found_in_idle (gpointer user_data)
+{
+       modest_platform_run_information_dialog (NULL, _("mail_ni_ui_folder_get_msg_folder_error"));
+
+       return FALSE;
+}