#endif /* !MODEST_TOOLKIT_GTK */
}
+static guint64
+count_part_size (const gchar *part)
+{
+ GnomeVFSURI *vfs_uri;
+ gchar *escaped_filename;
+ gchar *filename;
+ GnomeVFSFileInfo *info;
+ guint64 result;
+
+ /* Estimation of attachment size if we cannot get it from file info */
+ result = 32768;
+
+ vfs_uri = gnome_vfs_uri_new (part);
+
+ escaped_filename = g_path_get_basename (gnome_vfs_uri_get_path (vfs_uri));
+ filename = gnome_vfs_unescape_string_for_display (escaped_filename);
+ g_free (escaped_filename);
+ gnome_vfs_uri_unref (vfs_uri);
+
+ info = gnome_vfs_file_info_new ();
+
+ if (gnome_vfs_get_file_info (part,
+ info,
+ GNOME_VFS_FILE_INFO_GET_MIME_TYPE)
+ == GNOME_VFS_OK) {
+ if (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) {
+ result = info->size;
+ }
+ }
+ g_free (filename);
+ gnome_vfs_file_info_unref (info);
+
+ return result;
+}
+
+static guint64
+count_parts_size (GSList *parts)
+{
+ GSList *node;
+ guint64 result = 0;
+
+ for (node = parts; node != NULL; node = g_slist_next (node)) {
+ result += count_part_size ((const gchar *) node->data);
+ }
+
+ return result;
+}
+
void
modest_ui_actions_compose_msg(ModestWindow *win,
const gchar *to_str,
ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
ModestTnyAccountStore *store = modest_runtime_get_account_store();
GnomeVFSFileSize total_size, allowed_size;
+ guint64 available_disk, expected_size, parts_size;
+ guint parts_count;
/* we check for low-mem */
if (modest_platform_check_memory_low (win, TRUE))
goto cleanup;
+ available_disk = modest_utils_get_available_space (NULL);
+ parts_count = g_slist_length (attachments);
+ parts_size = count_parts_size (attachments);
+ expected_size = modest_tny_msg_estimate_size (body, NULL, parts_count, parts_size);
+
+ /* Double check: memory full condition or message too big */
+ if (available_disk < MIN_FREE_SPACE ||
+ expected_size > available_disk) {
+ gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+ modest_platform_information_banner (NULL, NULL, msg);
+ g_free (msg);
+
+ return;
+ }
+
+ if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
+ modest_platform_run_information_dialog (
+ GTK_WINDOW(win),
+ _KR("memr_ib_operation_disabled"),
+ TRUE);
+ return;
+ }
+
+
#ifdef MODEST_TOOLKIT_HILDON2
if (win)
account_name = g_strdup (modest_window_get_active_account(win));
gtk_widget_show_all (GTK_WIDGET (msg_win));
while (attachments) {
- total_size +=
+ GnomeVFSFileSize att_size;
+ att_size =
modest_msg_edit_window_attach_file_one((ModestMsgEditWindow *)msg_win,
attachments->data, allowed_size);
+ total_size += att_size;
- if (total_size > allowed_size) {
- g_warning ("%s: total size: %u",
- __FUNCTION__, (unsigned int)total_size);
+ if (att_size > allowed_size) {
+ g_debug ("%s: total size: %u",
+ __FUNCTION__, (unsigned int)total_size);
break;
}
- allowed_size -= total_size;
+ allowed_size -= att_size;
attachments = g_slist_next(attachments);
}
tny_list_append (actually_new_list, G_OBJECT (header));
}
g_object_unref (header);
-
}
g_object_unref (iterator);
if (tny_list_get_length (actually_new_list) > 0) {
- modest_platform_on_new_headers_received (actually_new_list,
- show_visual_notifications);
+ GList *new_headers_list = NULL;
+
+ new_headers_list = modest_utils_create_notification_list_from_header_list (actually_new_list);
+
+ /* Send notifications */
+ if (new_headers_list) {
+ modest_platform_on_new_headers_received (new_headers_list,
+ show_visual_notifications);
+ /* Free the list */
+ modest_utils_free_notification_list (new_headers_list);
+ }
}
g_object_unref (actually_new_list);
}
modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link,
ModestWindow *win)
{
- /* g_message ("%s %s", __FUNCTION__, link); */
+ /* g_debug ("%s %s", __FUNCTION__, link); */
}
const gchar *address,
ModestWindow *win)
{
- /* g_message ("%s %s", __FUNCTION__, address); */
+ /* g_debug ("%s %s", __FUNCTION__, address); */
}
static void
GtkWidget *parent_win;
MoveToInfo *helper = NULL;
ModestFolderView *folder_view;
+ gboolean unset_edit_mode = FALSE;
helper = (MoveToInfo *) user_data;
if (dst_folder)
g_object_unref (dst_folder);
+ unset_edit_mode = TRUE;
break;
default:
g_warning ("%s unexpected response id %d", __FUNCTION__, response);
/* Free the helper and exit */
if (helper->list)
g_object_unref (helper->list);
+ if (unset_edit_mode) {
+#ifdef MODEST_TOOLKIT_HILDON2
+ modest_hildon2_window_unset_edit_mode (MODEST_HILDON2_WINDOW (helper->win));
+#endif
+ }
g_slice_free (MoveToInfo, helper);
gtk_widget_destroy (GTK_WIDGET (dialog));
}
modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (msg_view_window), TRUE);
else {
/* do nothing; uid was registered before, so window is probably on it's way */
- g_warning ("debug: header %p has already been registered", header);
+ g_debug ("header %p has already been registered", header);
}
} else {
ModestMailOperation *mail_op = NULL;
/* Show the dialog */
gtk_widget_show (dialog);
- return TRUE;
+ return FALSE;
}
/*
return removed;
}
-void
+static void
+on_fetch_images_performer (gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
+{
+ if (err || canceled) {
+ /* Show an unable to retrieve images ??? */
+ return;
+ }
+
+ /* Note that the user could have closed the window while connecting */
+ if (GTK_WIDGET_VISIBLE (parent_window))
+ modest_msg_view_window_fetch_images ((ModestMsgViewWindow *) parent_window);
+ g_object_unref ((GObject *) user_data);
+}
+
+void
modest_ui_actions_on_fetch_images (GtkAction *action,
ModestWindow *window)
{
g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
- modest_msg_view_window_fetch_images (MODEST_MSG_VIEW_WINDOW (window));
-
+ modest_platform_connect_and_perform ((GtkWindow *) window, TRUE,
+ NULL,
+ on_fetch_images_performer,
+ g_object_ref (window));
}
void