Add correctly the "Content-Disposition" header to attachments
[modest] / src / maemo / modest-msg-view-window.c
index bb4fa54..72214e2 100644 (file)
@@ -35,6 +35,7 @@
 #include <tny-vfs-stream.h>
 #include "modest-marshal.h"
 #include "modest-platform.h"
+#include <modest-utils.h>
 #include <modest-maemo-utils.h>
 #include <modest-tny-msg.h>
 #include <modest-msg-view-window.h>
@@ -153,6 +154,8 @@ static void update_window_title (ModestMsgViewWindow *window);
 static gboolean set_toolbar_transfer_mode     (ModestMsgViewWindow *self); 
 static void init_window (ModestMsgViewWindow *obj);
 
+static gboolean msg_is_visible (TnyHeader *header, gboolean check_outbox);
+
 
 /* list my signals */
 enum {
@@ -198,6 +201,9 @@ struct _ModestMsgViewWindowPrivate {
 
        /* Whether this was created via the *_new_for_search_result() function. */
        gboolean is_search_result;
+
+       /* Whether the message is in outbox */
+       gboolean is_outbox;
        
        /* A reference to the @model of the header view 
         * to allow selecting previous/next messages,
@@ -392,6 +398,7 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
                                    gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
        
        priv->is_search_result = FALSE;
+       priv->is_outbox = FALSE;
 
        priv->msg_view      = NULL;
        priv->header_model  = NULL;
@@ -415,13 +422,16 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
        
        /* Init window */
        init_window (MODEST_MSG_VIEW_WINDOW(obj));
+       
        /* Set window icon */
-       window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON); 
+       window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON, MODEST_ICON_SIZE_BIG); 
        if (window_icon) {
                gtk_window_set_icon (GTK_WINDOW (obj), window_icon);
                g_object_unref (window_icon);
-       }
-
+       }       
+       
+       hildon_program_add_window (hildon_program_get_instance(),
+                                  HILDON_WINDOW(obj));
 
        modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
                                            GTK_WINDOW(obj),"applications_email_viewer");
@@ -468,29 +478,23 @@ set_toolbar_mode (ModestMsgViewWindow *self,
 
        switch (mode) {
        case TOOLBAR_MODE_NORMAL:               
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); */
-/*             gtk_action_set_sensitive (widget, TRUE); */
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarDeleteMessage"); */
-/*             gtk_action_set_sensitive (widget, TRUE); */
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo"); */
-/*             gtk_action_set_sensitive (widget, TRUE); */
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"); */
-/*             gtk_action_set_sensitive (widget, TRUE); */
-
-               if (priv->prev_toolitem)
-                       gtk_widget_show (priv->prev_toolitem);
-               
-               if (priv->next_toolitem)
-                       gtk_widget_show (priv->next_toolitem);
-                       
-               if (priv->progress_toolitem)
+               if (priv->progress_toolitem) {
                        gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+                       gtk_widget_hide (priv->progress_toolitem);
+               }
+
                if (priv->progress_bar)
                        gtk_widget_hide (priv->progress_bar);
                        
                if (priv->cancel_toolitem)
                        gtk_widget_hide (priv->cancel_toolitem);
 
+               if (priv->prev_toolitem)
+                       gtk_widget_show (priv->prev_toolitem);
+               
+               if (priv->next_toolitem)
+                       gtk_widget_show (priv->next_toolitem);
+                       
                /* Hide toolbar if optimized view is enabled */
                if (priv->optimized_view) {
                        gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
@@ -499,15 +503,6 @@ set_toolbar_mode (ModestMsgViewWindow *self,
 
                break;
        case TOOLBAR_MODE_TRANSFER:
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply"); */
-/*             gtk_action_set_sensitive (widget, FALSE); */
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarDeleteMessage"); */
-/*             gtk_action_set_sensitive (widget, FALSE); */
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo"); */
-/*             gtk_action_set_sensitive (widget, FALSE); */
-/*             widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage"); */
-/*             gtk_action_set_sensitive (widget, FALSE); */
-
                if (priv->prev_toolitem)
                        gtk_widget_hide (priv->prev_toolitem);
                
@@ -885,6 +880,7 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
                                                 MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
        if (header_view != NULL){
                header_folder = modest_header_view_get_folder(header_view);
+               priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) == TNY_FOLDER_TYPE_OUTBOX);
                g_assert(header_folder != NULL);
                priv->header_folder_id = tny_folder_get_id(header_folder);
                g_assert(priv->header_folder_id != NULL);
@@ -1259,9 +1255,9 @@ modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
 
        /* update the toggle buttons status */
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage");
-       modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
+       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsFindInMessageMenu");
-       modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
+       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
        
 }
 
@@ -1491,7 +1487,7 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
                                TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                &header, -1);
                if (header) {
-                       if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
+                       if (msg_is_visible (header, priv->is_outbox))
                                is_last_selected = FALSE;
                        g_object_unref(G_OBJECT(header));
                }
@@ -1522,6 +1518,14 @@ modest_msg_view_window_is_search_result (ModestMsgViewWindow *window)
        return priv->is_search_result;
 }
 
+static gboolean
+msg_is_visible (TnyHeader *header, gboolean check_outbox)
+{
+       return (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED)) &&
+               ( (!check_outbox) || (modest_tny_all_send_queues_get_msg_status (header) != MODEST_TNY_SEND_QUEUE_FAILED)) ;
+       
+}
+
 gboolean
 modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
 {
@@ -1563,7 +1567,7 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
                                TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                &header, -1);
                if (header) {
-                       if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
+                       if (msg_is_visible (header, priv->is_outbox))
                                is_first_selected = FALSE;
                        g_object_unref(G_OBJECT(header));
                }
@@ -1723,7 +1727,7 @@ modest_msg_view_window_select_first_message (ModestMsgViewWindow *self)
                            TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                            &header, -1);
        g_return_val_if_fail (TNY_IS_HEADER (header), FALSE);
-       if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED) {
+       if (!msg_is_visible (header, priv->is_outbox)) {
                g_object_unref (header);
                return modest_msg_view_window_select_next_message (self);
        }
@@ -1766,7 +1770,7 @@ modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
                                    &header, -1);
                if (!header)
                        break;
-               if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED) {
+               if (!msg_is_visible (header, priv->is_outbox)) {
                        g_object_unref (header);
                        continue;
                }
@@ -2030,7 +2034,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                action_name = "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu";
 
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, action_name);
-       modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action),
+       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action),
                                                            show_toolbar);
 }
 
@@ -2270,8 +2274,8 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
                const gchar *att_filename = tny_mime_part_get_filename (mime_part);
                const gchar *content_type;
                TnyFsStream *temp_stream = NULL;
-               temp_stream = modest_maemo_utils_create_temp_stream (att_filename, attachment_uid,
-                                                                    &filepath);
+               temp_stream = modest_utils_create_temp_stream (att_filename, attachment_uid,
+                                                              &filepath);
                
                if (temp_stream != NULL) {
                        content_type = tny_mime_part_get_content_type (mime_part);
@@ -2428,8 +2432,8 @@ save_mime_parts_to_file_with_checks (SaveMimePartInfo *info)
 
         for (iter = files; (iter != NULL) && (replaced_files < 2); iter = g_list_next(iter)) {
                 SaveMimePartPair *pair = iter->data;
-                if (modest_maemo_utils_file_exists (pair->filename)) {
-                        replaced_files++;
+                if (modest_utils_file_exists (pair->filename)) {
+                       replaced_files++;
                 }
         }
        if (replaced_files) {
@@ -2515,7 +2519,7 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GList *mim
        if (gtk_dialog_run (GTK_DIALOG (save_dialog)) == GTK_RESPONSE_OK) {
                gchar *chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (save_dialog));
 
-               if (!modest_maemo_utils_folder_writable (chooser_uri)) {
+               if (!modest_utils_folder_writable (chooser_uri)) {
                        hildon_banner_show_information 
                                (NULL, NULL, dgettext("hildon-fm", "sfil_ib_readonly_location"));
                } else {