#include "modest-widget-memory.h"
#include <modest-hildon-includes.h>
#include <modest-maemo-utils.h>
+#include <modest-utils.h>
#include <dbus_api/modest-dbus-callbacks.h>
#include <modest-osso-autosave-callbacks.h>
#include <libosso.h>
#include <modest-ui-constants.h>
#include <modest-selector-picker.h>
#include <modest-icon-names.h>
+#include <modest-count-stream.h>
#ifdef MODEST_HAVE_MCE
#include <mce/dbus-names.h>
static gboolean
check_required_files (void)
{
- FILE *mcc_file = modest_maemo_open_mcc_mapping_file (NULL);
+ FILE *mcc_file = modest_utils_open_mcc_mapping_file (NULL);
if (!mcc_file) {
g_printerr ("modest: check for mcc file failed\n");
return FALSE;
fclose (mcc_file);
if (access(MODEST_PROVIDER_DATA_FILE, R_OK) != 0 &&
- access(MODEST_MAEMO_PROVIDER_DATA_FILE, R_OK) != 0) {
+ access(MODEST_FALLBACK_PROVIDER_DATA_FILE, R_OK) != 0) {
g_printerr ("modest: cannot find providers data\n");
return FALSE;
}
if (response != GTK_RESPONSE_ACCEPT)
return;
-
+
/* Get entry */
entry = g_object_get_data (G_OBJECT (dialog), COMMON_FOLDER_DIALOG_ENTRY);
picker = g_object_get_data (G_OBJECT (dialog), COMMON_FOLDER_DIALOG_ACCOUNT_PICKER);
-
+
parent = TNY_FOLDER_STORE (user_data);
new_name = gtk_entry_get_text (GTK_ENTRY (entry));
exists = FALSE;
-
- if (picker != NULL) {
+ if (picker != NULL)
parent = g_object_get_data (G_OBJECT (picker), FOLDER_PICKER_CURRENT_FOLDER);
- }
/* Look for another folder with the same name */
- if (modest_tny_folder_has_subfolder_with_name (parent,
- new_name,
- TRUE)) {
+ if (modest_tny_folder_has_subfolder_with_name (parent, new_name, TRUE))
exists = TRUE;
- }
-
+
if (!exists) {
if (TNY_IS_ACCOUNT (parent) &&
modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent)) &&
exists = TRUE;
}
}
-
+
if (exists) {
-
/* Show an error */
hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (dialog)),
NULL, _CS("ckdg_ib_folder_already_exists"));
/* Do not close the dialog */
g_signal_stop_emission_by_name (dialog, "response");
}
-
}
typedef struct _FolderChooserData {
} else {
GtkWidget *image;
- g_object_ref (store);
- g_object_set_data_full (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER,
- store, (GDestroyNotify) g_object_unref);
+ g_object_set_data_full (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER,
+ g_object_ref (store),
+ (GDestroyNotify) g_object_unref);
name = folder_store_get_display_name (store);
hildon_button_set_value (HILDON_BUTTON (button), name);
g_free (name);
hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 1.0);
- if (suggested) {
+ if (suggested)
folder_picker_set_store (GTK_BUTTON (button), suggested);
- }
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (folder_picker_clicked),
gint result;
ModestTnyAccountStore *acc_store;
TnyAccount *account;
+ gboolean do_free = FALSE;
real_suggested_name = get_next_folder_name ((const gchar *) suggested_name,
suggested_folder);
}
/* If there is not archive folder then fallback to local folders account */
- if (!suggested_folder)
+ if (!suggested_folder) {
+ do_free = TRUE;
suggested_folder = (TnyFolderStore *)
modest_tny_account_store_get_local_folders_account (acc_store);
+ }
result = modest_platform_run_folder_common_dialog (parent_window,
suggested_folder,
folder_name,
parent_folder);
+ if (do_free)
+ g_object_unref (suggested_folder);
+
g_free(real_suggested_name);
return result;
dialog);
}
+typedef struct _HeaderDetailsGetSizeInfo {
+ GtkWidget *dialog;
+ TnyMimePart *part;
+ guint total;
+} HeaderDetailsGetSizeInfo;
+
+static void
+header_details_dialog_destroy (gpointer userdata,
+ GObject *object)
+{
+ HeaderDetailsGetSizeInfo *info = (HeaderDetailsGetSizeInfo *) userdata;
+
+ info->dialog = NULL;
+}
+
+static gboolean
+idle_get_mime_part_size_cb (gpointer userdata)
+{
+ HeaderDetailsGetSizeInfo *info = (HeaderDetailsGetSizeInfo *) userdata;
+ gdk_threads_enter ();
+
+ if (info->dialog && GTK_WIDGET_VISIBLE (info->dialog)) {
+ modest_details_dialog_set_message_size (MODEST_DETAILS_DIALOG (info->dialog),
+ info->total);
+ }
+
+ if (info->dialog) {
+ g_object_weak_unref (G_OBJECT (info->dialog), header_details_dialog_destroy, info);
+ info->dialog = NULL;
+ }
+ g_object_unref (info->part);
+ g_slice_free (HeaderDetailsGetSizeInfo, info);
+
+ gdk_threads_leave ();
+
+ return FALSE;
+}
+
+static gpointer
+get_mime_part_size_thread (gpointer thr_user_data)
+{
+ HeaderDetailsGetSizeInfo *info = (HeaderDetailsGetSizeInfo *) thr_user_data;
+ gssize result = 0;
+ TnyStream *count_stream;
+
+ count_stream = modest_count_stream_new ();
+ result = tny_mime_part_decode_to_stream (info->part, count_stream, NULL);
+ info->total = modest_count_stream_get_count(MODEST_COUNT_STREAM (count_stream));
+ if (info->total == 0) {
+ modest_count_stream_reset_count(MODEST_COUNT_STREAM (count_stream));
+ result = tny_mime_part_write_to_stream (info->part, count_stream, NULL);
+ info->total = modest_count_stream_get_count(MODEST_COUNT_STREAM (count_stream));
+ }
+
+ /* if there was an error, don't set the size (this is pretty uncommon) */
+ if (result < 0) {
+ g_warning ("%s: error while writing mime part to stream\n", __FUNCTION__);
+ }
+ g_idle_add (idle_get_mime_part_size_cb, info);
+
+ return NULL;
+}
+
void
modest_platform_run_header_details_dialog (GtkWindow *parent_window,
- TnyHeader *header)
+ TnyHeader *header,
+ gboolean async_get_size,
+ TnyMsg *msg)
{
GtkWidget *dialog;
/* Create dialog */
- dialog = modest_hildon2_details_dialog_new_with_header (parent_window, header);
+ dialog = modest_hildon2_details_dialog_new_with_header (parent_window, header, !async_get_size);
+
+ if (async_get_size && msg && TNY_IS_MSG (msg)) {
+ HeaderDetailsGetSizeInfo *info;
+ info = g_slice_new (HeaderDetailsGetSizeInfo);
+ info->dialog = dialog;
+ info->total = 0;
+ info->part = TNY_MIME_PART (g_object_ref (msg));
+
+ g_object_weak_ref (G_OBJECT (dialog), header_details_dialog_destroy, info);
+ g_thread_create (get_mime_part_size_thread, info, FALSE, NULL);
+ }
/* Run dialog */
modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),