Dbus open message faster user feedback (WIP 1)
[modest] / src / gnome / modest-msg-view-window.c
index 35fe46e..000f090 100644 (file)
@@ -37,7 +37,7 @@
 #include <modest-runtime.h>
 #include <modest-main-window-ui.h>
 #include "modest-msg-view-window-ui-dimming.h"
-
+#include "modest-defs.h"
 #include <widgets/modest-msg-view-window.h>
 #include <widgets/modest-window-priv.h>
 #include "widgets/modest-msg-view.h"
@@ -65,6 +65,7 @@ struct _ModestMsgViewWindowPrivate {
        GtkWidget   *msg_view;
 
        gchar *msg_uid;
+       TnyMimePart *other_body;
 };
 
 #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
@@ -153,11 +154,12 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
        priv->menubar  = NULL;
        priv->msg_view = NULL;
        priv->msg_uid  = NULL;
+       priv->other_body = NULL;
 }
 
 
 static void
-init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
+init_window (ModestMsgViewWindow *obj, TnyMsg *msg, TnyMimePart *other_body)
 {
        GtkWidget *main_vbox, *scrolled_window;
        ModestMsgViewWindowPrivate *priv;
@@ -167,7 +169,12 @@ init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
        parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
 
        priv->msg_view = GTK_WIDGET (tny_platform_factory_new_msg_view (modest_tny_platform_factory_get_instance ()));
-       tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       if (other_body) {
+               priv->other_body = g_object_ref (other_body);
+               modest_msg_view_set_msg_with_other_body (MODEST_MSG_VIEW (priv->msg_view), msg, other_body);
+       } else {
+               tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       }
        main_vbox = gtk_vbox_new  (FALSE, 0);
        
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
@@ -191,6 +198,11 @@ modest_msg_view_window_finalize (GObject *obj)
 
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
 
+       if (priv->other_body != NULL) {
+               g_object_unref (priv->other_body);
+               priv->other_body = NULL;
+       }
+
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
@@ -204,10 +216,23 @@ on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgViewWindow *self)
 }
 
 
+gboolean
+modest_msg_view_window_is_other_body (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv = NULL;
+
+       g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       return (priv->other_body != NULL);
+}
+
 ModestWindow *
-modest_msg_view_window_new_for_attachment (TnyMsg *msg, 
-                           const gchar *modest_account_name, 
-                           const gchar *msg_uid)
+modest_msg_view_window_new_with_other_body (TnyMsg *msg, 
+                                           TnyMimePart *other_body,
+                                           const gchar *modest_account_name, 
+                                           const gchar *mailbox, /* ignored */
+                                           const gchar *msg_uid)
 {
        GObject *obj;
        ModestMsgViewWindowPrivate *priv;
@@ -279,12 +304,23 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg,
        gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
 
        /* Init window */
-       init_window (MODEST_MSG_VIEW_WINDOW(obj), msg);
+       init_window (MODEST_MSG_VIEW_WINDOW(obj), msg, other_body);
        restore_settings (MODEST_WINDOW(obj));
 
        header = tny_msg_get_header (msg);
-       if (header)
-               subject = tny_header_dup_subject (header);
+       if (other_body) {
+               gchar *description;
+
+               description = modest_tny_mime_part_get_header_value (other_body, "Content-Description");
+               if (description) {
+                       g_strstrip (description);
+                       subject = description;
+               }
+       } else {
+               if (header)
+                       subject = tny_header_dup_subject (header);
+       }
+
        
        if (subject != NULL)
                gtk_window_set_title (GTK_WINDOW (obj), subject);
@@ -330,6 +366,17 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg,
        return MODEST_WINDOW(obj);
 }
 
+ModestWindow *
+modest_msg_view_window_new_for_attachment (TnyMsg *msg, 
+                                          const gchar *modest_account_name, 
+                                          const gchar *mailbox, /* ignored */
+                                          const gchar *msg_uid)
+{
+
+       return modest_msg_view_window_new_with_other_body (msg, NULL, modest_account_name, mailbox, msg_uid);
+
+}
+
 
 TnyMsg*
 modest_msg_view_window_get_message (ModestMsgViewWindow *self)
@@ -367,9 +414,19 @@ modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
        return priv->msg_uid;
 }
 
+ModestWindow *
+modest_msg_view_window_new_from_uid (const gchar *modest_account_name,
+                                    const gchar *mailbox,
+                                    const gchar *msg_uid)
+{
+       /* NOT IMPLEMENTED */
+       return NULL;
+}
+
 ModestWindow*   
 modest_msg_view_window_new_with_header_model (TnyMsg *msg, 
                                              const gchar *modest_account_name, 
+                                             const gchar *mailbox, /*ignored*/
                                              const gchar *msg_uid,
                                              GtkTreeModel *model, 
                                              GtkTreeRowReference *row_reference)
@@ -377,41 +434,41 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
        /* Currently we simply redirect to new constructor. It should store a
           reference to the header list model, to enable next/prev message
           actions */
-       g_message ("partially implemented %s", __FUNCTION__);
+       g_debug ("partially implemented %s", __FUNCTION__);
 
-       return modest_msg_view_window_new_for_attachment (msg, modest_account_name, msg_uid);
+       return modest_msg_view_window_new_for_attachment (msg, modest_account_name, NULL, msg_uid);
 }
 
 
 gboolean
 modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
        return FALSE;
 }
 
 gboolean
 modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
        return FALSE;
 }
 
 void
 modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart *mime_part)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
 }
 
 void
 modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *mime_parts)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
 }
 void
 modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean get_all)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
 }
 
 TnyHeader *
@@ -459,28 +516,28 @@ modest_msg_view_window_get_folder_type (ModestMsgViewWindow *window)
 gboolean 
 modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return TRUE;
 }
 
 gboolean 
 modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return TRUE;
 }
 
 gboolean 
 modest_msg_view_window_transfer_mode_enabled (ModestMsgViewWindow *self)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return FALSE;
 }
 
 gboolean  
 modest_msg_view_window_toolbar_on_transfer_mode     (ModestMsgViewWindow *self)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return FALSE;
 }
 
@@ -491,21 +548,21 @@ modest_msg_view_window_get_attachments (ModestMsgViewWindow *win)
        TnyList *result;
 
        result = tny_simple_list_new ();
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return result;  
 }
 
 gboolean 
 modest_msg_view_window_is_search_result (ModestMsgViewWindow *window)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return FALSE;   
 }
 
 gboolean 
 modest_msg_view_window_has_headers_model (ModestMsgViewWindow *window)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return FALSE;   
 }
 
@@ -513,7 +570,7 @@ static void
 modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
                                            gpointer data)
 {
-       g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return FALSE;   
 }
 
@@ -523,3 +580,29 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
        modest_ui_actions_on_add_to_contacts (NULL, MODEST_WINDOW (self));
 }
 
+void
+modest_msg_view_window_fetch_images (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv;
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       modest_msg_view_request_fetch_images (MODEST_MSG_VIEW (priv->msg_view));
+}
+
+gboolean 
+modest_msg_view_window_has_blocked_external_images (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv;
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+
+       return modest_msg_view_has_blocked_external_images (MODEST_MSG_VIEW (priv->msg_view));
+}
+
+void
+modest_msg_view_window_reload (ModestMsgViewWindow *self)
+{
+       /* Not implemented */
+       return;
+}