GdkEvent *event,
gpointer userdata);
+
/* list my signals */
enum {
MSG_CHANGED_SIGNAL,
static void
modest_msg_view_window_construct (ModestMsgViewWindow *self,
const gchar *modest_account_name,
+ const gchar *mailbox,
const gchar *msg_uid)
{
GObject *obj = NULL;
obj);
modest_window_set_active_account (MODEST_WINDOW(obj), modest_account_name);
+ modest_window_set_active_mailbox (MODEST_WINDOW(obj), mailbox);
g_signal_connect (G_OBJECT (priv->find_toolbar), "close", G_CALLBACK (modest_msg_view_window_find_toolbar_close), obj);
g_signal_connect (G_OBJECT (priv->find_toolbar), "search", G_CALLBACK (modest_msg_view_window_find_toolbar_search), obj);
ModestWindow *
modest_msg_view_window_new_with_header_model (TnyMsg *msg,
const gchar *modest_account_name,
+ const gchar *mailbox,
const gchar *msg_uid,
GtkTreeModel *model,
GtkTreeRowReference *row_reference)
window = MODEST_MSG_VIEW_WINDOW (modest_window_mgr_get_msg_view_window (mgr));
g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), NULL);
- modest_msg_view_window_construct (window, modest_account_name, msg_uid);
+ modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
ModestWindow *
modest_msg_view_window_new_from_header_view (ModestHeaderView *header_view,
const gchar *modest_account_name,
+ const gchar *mailbox,
const gchar *msg_uid,
GtkTreeRowReference *row_reference)
{
window = MODEST_MSG_VIEW_WINDOW (modest_window_mgr_get_msg_view_window (mgr));
g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), NULL);
- modest_msg_view_window_construct (window, modest_account_name, msg_uid);
+ modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
ModestWindow *
modest_msg_view_window_new_for_search_result (TnyMsg *msg,
const gchar *modest_account_name,
+ const gchar *mailbox,
const gchar *msg_uid)
{
ModestMsgViewWindow *window = NULL;
mgr = modest_runtime_get_window_mgr ();
window = MODEST_MSG_VIEW_WINDOW (modest_window_mgr_get_msg_view_window (mgr));
g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), NULL);
- modest_msg_view_window_construct (window, modest_account_name, msg_uid);
+ modest_msg_view_window_construct (window, modest_account_name, mailbox, msg_uid);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
ModestWindow *
modest_msg_view_window_new_for_attachment (TnyMsg *msg,
- const gchar *modest_account_name,
- const gchar *msg_uid)
+ const gchar *modest_account_name,
+ const gchar *mailbox,
+ const gchar *msg_uid)
{
GObject *obj = NULL;
ModestMsgViewWindowPrivate *priv;
obj = G_OBJECT (modest_window_mgr_get_msg_view_window (mgr));
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
modest_msg_view_window_construct (MODEST_MSG_VIEW_WINDOW (obj),
- modest_account_name, msg_uid);
+ modest_account_name, mailbox, msg_uid);
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
update_window_title (MODEST_MSG_VIEW_WINDOW (obj));
if (cancelled || err) {
if (err) {
- if ((err->domain == TNY_ERROR_DOMAIN) &&
- (err->code == TNY_IO_ERROR_WRITE) &&
- (errno == ENOSPC)) {
- modest_platform_information_banner (NULL, NULL,
- _KR("cerm_device_memory_full"));
- } else {
- modest_platform_information_banner (NULL, NULL,
- _("mail_ib_file_operation_failed"));
- }
+ gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+ modest_platform_information_banner (NULL, NULL, msg);
+ g_free (msg);
}
goto free;
}
mime_part = (TnyMimePart *) tny_iterator_get_current (iter);
g_object_unref (iter);
}
- g_object_unref (selected_attachments);
+ if (selected_attachments)
+ g_object_unref (selected_attachments);
if (error)
goto frees;
/* it's not found, so create a new window for it */
modest_window_mgr_register_header (mgr, header, attachment_uid); /* register the uid before building the window */
gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
+ const gchar *mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (window));
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
- msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (mime_part), account, attachment_uid);
+ msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (mime_part), account,
+ mailbox, attachment_uid);
modest_window_set_zoom (MODEST_WINDOW (msg_win),
modest_window_get_zoom (MODEST_WINDOW (window)));
- modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window));
- gtk_widget_show_all (GTK_WIDGET (msg_win));
+ if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window)))
+ gtk_widget_show_all (GTK_WIDGET (msg_win));
+ else
+ gtk_widget_destroy (GTK_WIDGET (msg_win));
}
}
static gpointer save_mime_part_to_file (SaveMimePartInfo *info);
static void save_mime_parts_to_file_with_checks (SaveMimePartInfo *info);
-static void
+static void
save_mime_part_info_free (SaveMimePartInfo *info, gboolean with_struct)
{
-
GList *node;
+
for (node = info->pairs; node != NULL; node = g_list_next (node)) {
SaveMimePartPair *pair = (SaveMimePartPair *) node->data;
g_free (pair->filename);
if (info->result == GNOME_VFS_OK) {
hildon_banner_show_information (NULL, NULL, _CS("sfil_ib_saved"));
} else if (info->result == GNOME_VFS_ERROR_NO_SPACE) {
- hildon_banner_show_information (NULL, NULL,
- _KR("cerm_device_memory_full"));
+ gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+ modest_platform_information_banner (NULL, NULL, msg);
+ g_free (msg);
} else {
hildon_banner_show_information (NULL, NULL, _("mail_ib_file_operation_failed"));
}
TnyList *mime_parts;
gchar *chooser_uri;
GList *files_to_save = NULL;
+ gchar *current_folder;
mime_parts = TNY_LIST (user_data);
goto end;
chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+ current_folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dialog));
+ if (current_folder && current_folder != '\0') {
+ GError *err = NULL;
+ modest_conf_set_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH,
+ current_folder,&err);
+ if (err != NULL) {
+ g_debug ("Error storing latest used folder: %s", err->message);
+ g_error_free (err);
+ }
+ }
+ g_free (current_folder);
if (!modest_utils_folder_writable (chooser_uri)) {
hildon_banner_show_information
}
void
-modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *mime_parts)
+modest_msg_view_window_save_attachments (ModestMsgViewWindow *window,
+ TnyList *mime_parts)
{
ModestMsgViewWindowPrivate *priv;
GtkWidget *save_dialog = NULL;
- gchar *folder = NULL;
+ gchar *conf_folder = NULL;
gchar *filename = NULL;
gchar *save_multiple_str = NULL;
/* In Hildon 2.2 save and delete operate over all the attachments as there's no
* selection available */
mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view));
- if (!modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, FALSE)) {
+ if (mime_parts && !modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, FALSE)) {
g_object_unref (mime_parts);
return;
}
- if (mime_parts == NULL || tny_list_get_length (mime_parts) == 0)
+ if (mime_parts == NULL || tny_list_get_length (mime_parts) == 0) {
+ if (mime_parts) {
+ g_object_unref (mime_parts);
+ mime_parts = NULL;
+ }
return;
+ }
} else {
g_object_ref (mime_parts);
}
GTK_FILE_CHOOSER_ACTION_SAVE);
/* set folder */
- folder = g_build_filename (g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (save_dialog), folder);
- g_free (folder);
+ conf_folder = modest_conf_get_string (modest_runtime_get_conf (), MODEST_CONF_LATEST_SAVE_ATTACHMENT_PATH, NULL);
+ if (conf_folder && conf_folder[0] != '\0') {
+ gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (save_dialog), conf_folder);
+ } else {
+ gchar *docs_folder;
+ /* Set the default folder to images folder */
+ docs_folder = g_build_filename (g_getenv (MYDOCS_ENV), DOCS_FOLDER, NULL);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (save_dialog), docs_folder);
+ g_free (docs_folder);
+ }
+ g_free (conf_folder);
/* set filename */
if (filename) {
FetchImageData *fidata = (FetchImageData *) userdata;
g_message ("REFRESH VIEW");
+
+ gdk_threads_enter ();
if (GTK_WIDGET_DRAWABLE (fidata->msg_view)) {
g_message ("QUEUING DRAW");
gtk_widget_queue_draw (fidata->msg_view);
}
+ gdk_threads_leave ();
+
g_object_unref (fidata->msg_view);
g_slice_free (FetchImageData, fidata);
return FALSE;
TnyStream *cache_stream;
cache = modest_runtime_get_images_cache ();
- cache_stream = tny_stream_cache_get_stream (cache, fidata->cache_id, (TnyStreamCacheOpenStreamFetcher) fetch_image_open_stream, (gpointer) fidata->uri);
+ cache_stream =
+ tny_stream_cache_get_stream (cache,
+ fidata->cache_id,
+ (TnyStreamCacheOpenStreamFetcher) fetch_image_open_stream,
+ (gpointer) fidata->uri);
g_free (fidata->cache_id);
g_free (fidata->uri);
if (cache_stream != NULL) {
- tny_stream_write_to_stream (cache_stream, fidata->output_stream);
+ char buffer[4096];
+
+ while (G_LIKELY (!tny_stream_is_eos (cache_stream))) {
+ gssize nb_read;
+
+ nb_read = tny_stream_read (cache_stream, buffer, sizeof (buffer));
+ if (G_UNLIKELY (nb_read < 0)) {
+ break;
+ } else if (G_LIKELY (nb_read > 0)) {
+ gssize nb_written = 0;
+
+ while (G_UNLIKELY (nb_written < nb_read)) {
+ gssize len;
+
+ len = tny_stream_write (fidata->output_stream, buffer + nb_written,
+ nb_read - nb_written);
+ if (G_UNLIKELY (len < 0))
+ break;
+ nb_written += len;
+ }
+ }
+ }
tny_stream_close (cache_stream);
g_object_unref (cache_stream);
}
tny_stream_close (fidata->output_stream);
g_object_unref (fidata->output_stream);
-
- gdk_threads_enter ();
g_idle_add (on_fetch_image_idle_refresh_view, fidata);
- gdk_threads_leave ();
return NULL;
}