#include "modest-platform.h"
#include "modest-debug.h"
#include <tny-mime-part.h>
+#include <tny-error.h>
#include <tny-camel-folder.h>
#include <tny-camel-imap-folder.h>
#include <tny-camel-pop-folder.h>
#ifdef MODEST_TOOLKIT_HILDON2
#include <modest-accounts-window.h>
-#include <hildon/hildon-pannable-area.h>
#include <hildon/hildon-gtk.h>
#include <modest-header-window.h>
#include <modest-folder-window.h>
#include <modest-maemo-utils.h>
#endif
-
-#ifdef MODEST_PLATFORM_MAEMO
-#include "maemo/modest-osso-state-saving.h"
-#endif /* MODEST_PLATFORM_MAEMO */
-#ifndef MODEST_TOOLKIT_GTK
-#include "maemo/modest-hildon-includes.h"
-#include "maemo/modest-connection-specific-smtp-window.h"
-#endif /* !MODEST_TOOLKIT_GTK */
-#include <modest-utils.h>
-
+#include "modest-utils.h"
+#include "widgets/modest-connection-specific-smtp-window.h"
#include "widgets/modest-ui-constants.h"
#include <widgets/modest-main-window.h>
#include <widgets/modest-msg-view-window.h>
#include <gtkhtml/gtkhtml.h>
-#define MIN_FREE_SPACE 5 * 1024 * 1024
#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
typedef struct _GetMsgAsyncHelper {
static void reply_forward (ReplyForwardAction action, ModestWindow *win);
+#ifndef MODEST_TOOLKIT_HILDON2
static void folder_refreshed_cb (ModestMailOperation *mail_op,
TnyFolder *folder,
gpointer user_data);
static void on_send_receive_finished (ModestMailOperation *mail_op,
gpointer user_data);
+#endif
static gint header_list_count_uncached_msgs (TnyList *header_list);
static TnyAccount *get_account_from_folder_store (TnyFolderStore *folder_store);
+#ifndef MODEST_TOOLKIT_HILDON2
static void modest_ui_actions_on_main_window_move_to (GtkAction *action,
GtkWidget *folder_view,
TnyFolderStore *dst_folder,
ModestMainWindow *win);
-#ifdef MODEST_TOOLKIT_HILDON2
+
+#else
static void modest_ui_actions_on_folder_window_move_to (GtkWidget *folder_view,
TnyFolderStore *dst_folder,
TnyList *selection,
static TnyList *
get_selected_headers (ModestWindow *win)
{
- if (MODEST_IS_MAIN_WINDOW(win)) {
- GtkWidget *header_view;
-
- header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
- return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
-
- } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
+ if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
/* for MsgViewWindows, we simply return a list with one element */
TnyHeader *header;
TnyList *list = NULL;
}
return list;
+#ifndef MODEST_TOOLKIT_HILDON2
+ } else if (MODEST_IS_MAIN_WINDOW(win)) {
+ GtkWidget *header_view;
-#ifdef MODEST_TOOLKIT_HILDON2
+ header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+ return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
+#else
} else if (MODEST_IS_HEADER_WINDOW (win)) {
GtkWidget *header_view;
header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
#endif
- } else
+ } else {
return NULL;
+ }
}
+#ifndef MODEST_TOOLKIT_HILDON2
static GtkTreeRowReference *
get_next_after_selected_headers (ModestHeaderView *header_view)
{
return result;
}
+#endif
static void
headers_action_mark_as_read (TnyHeader *header,
gchar *desc = NULL;
gint response;
ModestWindowMgr *mgr;
- GtkWidget *header_view = NULL;
gboolean retval = TRUE;
g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
/* Check first if the header view has the focus */
if (MODEST_IS_MAIN_WINDOW (win)) {
+ GtkWidget *header_view = NULL;
+
header_view =
modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
if (!gtk_widget_is_focus (header_view))
return FALSE;
}
-
+#endif
/* Get the headers, either from the header view (if win is the main window),
* or from the message view window: */
header_list = get_selected_headers (win);
if (!header_list) return FALSE;
/* Check if any of the headers are already opened, or in the process of being opened */
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (win)) {
gint opened_headers = 0;
return FALSE;
}
}
+#endif
/* Select message */
if (tny_list_get_length(header_list) == 1) {
response = modest_platform_run_confirmation_dialog (GTK_WINDOW (win),
message);
-
if (response == GTK_RESPONSE_OK) {
- ModestWindow *main_window = NULL;
- ModestWindowMgr *mgr = NULL;
- GtkTreeModel *model = NULL;
GtkTreeSelection *sel = NULL;
- GList *sel_list = NULL, *tmp = NULL;
- GtkTreeRowReference *next_row_reference = NULL;
- GtkTreeRowReference *prev_row_reference = NULL;
- GtkTreePath *next_path = NULL;
- GtkTreePath *prev_path = NULL;
+ GList *sel_list = NULL;
ModestMailOperation *mail_op = NULL;
/* Find last selected row */
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (win)) {
+ GList *tmp = NULL;
+ ModestWindowMgr *mgr = NULL;
+ GtkTreeModel *model = NULL;
+ GtkTreeRowReference *next_row_reference = NULL, *prev_row_reference = NULL;
+ GtkTreePath *next_path = NULL, *prev_path = NULL;
+
model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (header_view));
sel_list = gtk_tree_selection_get_selected_rows (sel, &model);
}
}
}
+#endif
/* Disable window dimming management */
- modest_window_disable_dimming (MODEST_WINDOW(win));
+ modest_window_disable_dimming (win);
/* Remove each header. If it's a view window header_view == NULL */
mail_op = modest_mail_operation_new ((GObject *) win);
if (sel != NULL) {
gtk_tree_selection_unselect_all (sel);
}
- modest_window_enable_dimming (MODEST_WINDOW(win));
+ modest_window_enable_dimming (win);
if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
modest_ui_actions_refresh_message_window_after_delete (MODEST_MSG_VIEW_WINDOW (win));
/* Get main window */
mgr = modest_runtime_get_window_mgr ();
- main_window = modest_window_mgr_get_main_window (mgr, FALSE); /* don't create */
+#ifndef MODEST_TOOLKIT_HILDON2
} else if (MODEST_IS_MAIN_WINDOW (win)) {
- /* Move cursor to next row */
- main_window = win;
-
/* Select next or previous row */
if (gtk_tree_row_reference_valid (next_row_reference)) {
gtk_tree_selection_select_path (sel, next_path);
gtk_tree_row_reference_free (prev_row_reference);
if (prev_path != NULL)
gtk_tree_path_free (prev_path);
+#endif
}
/* Update toolbar dimming state */
- if (main_window) {
- modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
- }
+ modest_ui_actions_check_menu_dimming_rules (win);
+ modest_ui_actions_check_toolbar_dimming_rules (win);
/* Free */
g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
g_return_if_fail (MODEST_IS_WINDOW(win));
/* Check first if the header view has the focus */
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (win)) {
GtkWidget *w;
w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
return;
}
}
+#endif
modest_ui_actions_on_delete_message (action, win);
}
ModestWindowMgr *mgr = NULL;
#ifdef MODEST_PLATFORM_MAEMO
- modest_osso_save_state();
+ modest_window_mgr_save_state_for_all_windows (modest_runtime_get_window_mgr ());
#endif /* MODEST_PLATFORM_MAEMO */
g_debug ("closing down, clearing %d item(s) from operation queue",
clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
selection = gtk_clipboard_wait_for_text (clipboard);
- /* Question: why is the clipboard being used here?
- * It doesn't really make a lot of sense. */
-
- if (selection)
- {
- modest_address_book_add_address (selection);
+ if (selection) {
+ modest_address_book_add_address (selection, (GtkWindow *) win);
g_free (selection);
}
}
#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: disk full condition or message too big */
+ if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE ||
+ expected_size > available_disk) {
+ gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+ modest_platform_system_banner (NULL, NULL, msg);
+ g_free (msg);
+
+ return;
+ }
+
+ if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
+ modest_platform_run_information_dialog (
+ GTK_WINDOW(win),
+ _("mail_ib_error_attachment_size"),
+ TRUE);
+ return;
+ }
+
+
#ifdef MODEST_TOOLKIT_HILDON2
if (win)
account_name = g_strdup (modest_window_get_active_account(win));
signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature);
g_free (recipient);
if (body_str != NULL) {
- body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
+ body = use_signature ? g_strconcat(body_str, "\n",
+ MODEST_TEXT_UTILS_SIGNATURE_MARKER,
+ "\n", signature, NULL) : g_strdup(body_str);
} else {
- body = use_signature ? g_strconcat("\n--\n", signature, NULL) : g_strdup("");
+ body = use_signature ? g_strconcat("\n", MODEST_TEXT_UTILS_SIGNATURE_MARKER,
+ "\n", signature, NULL) : g_strdup("");
}
msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, NULL, NULL, body, NULL, NULL, NULL);
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);
}
error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
gchar *subject, *msg, *format = NULL;
TnyAccount *account;
- subject = tny_header_dup_subject (header);
+
+ subject = (header) ? tny_header_dup_subject (header) : NULL;
if (!subject)
subject = g_strdup (_("mail_va_no_subject"));
account = modest_mail_operation_get_account (mail_op);
if (account) {
- ModestProtocol *protocol;
- ModestProtocolType proto;
- proto = modest_tny_account_get_protocol_type (account);
- protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto);
- if (protocol)
- format = modest_protocol_get_translation (protocol, MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE, subject);
+ ModestProtocolType proto = modest_tny_account_get_protocol_type (account);
+ ModestProtocol *protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto);
+
+ if (protocol) {
+ if (tny_account_get_connection_status (account) ==
+ TNY_CONNECTION_STATUS_CONNECTED) {
+ format = modest_protocol_get_translation (protocol,
+ MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE,
+ subject);
+ } else {
+ format = g_strdup_printf (_("mail_ib_backend_server_invalid"),
+ tny_account_get_hostname (account));
+ }
+ }
g_object_unref (account);
}
typedef struct {
GtkTreeModel *model;
TnyHeader *header;
+ ModestWindow *caller_window;
OpenMsgBannerInfo *banner_info;
GtkTreeRowReference *rowref;
} OpenMsgHelper;
{
GtkWidget *header_view;
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_HEADER_WINDOW (window)){
+#else
+ if (MODEST_IS_HEADER_WINDOW (window)){
header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
#endif
} else {
gtk_widget_show_all (GTK_WIDGET(win));
}
+#ifndef MODEST_TOOLKIT_HILDON2
/* Update toolbar dimming state */
if (MODEST_IS_MAIN_WINDOW (parent_win)) {
modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (parent_win));
}
+#endif
cleanup:
/* Free */
g_object_unref (parent_win);
}
-static gboolean
-is_memory_full_error (GError *error, ModestMailOperation *mail_op)
-{
- gboolean enough_free_space = TRUE;
- GnomeVFSURI *cache_dir_uri;
- const gchar *cache_dir = NULL;
- GnomeVFSFileSize free_space;
- TnyAccountStore *acc_store;
-
- acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ());
-
- /* Cache dir is different in case we're using an external storage (like MMC account) */
- if (mail_op) {
- TnyAccount *account = modest_mail_operation_get_account (mail_op);
- if (account) {
- if (modest_tny_account_is_memory_card_account (account)) {
- cache_dir = g_getenv (MODEST_MMC1_VOLUMEPATH_ENV);
- }
- g_object_unref (account);
- }
- }
-
- /* Get the default local cache dir */
- if (!cache_dir)
- cache_dir = tny_account_store_get_cache_dir (acc_store);
-
- cache_dir_uri = gnome_vfs_uri_new (cache_dir);
- if (cache_dir_uri) {
- if (gnome_vfs_get_volume_free_space (cache_dir_uri, &free_space) == GNOME_VFS_OK) {
- if (free_space < MIN_FREE_SPACE)
- enough_free_space = FALSE;
- }
- gnome_vfs_uri_unref (cache_dir_uri);
- }
-
- if ((error->code == TNY_SYSTEM_ERROR_MEMORY ||
- /* When asking for a mail and no space left on device
- tinymail returns this error */
- error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE ||
- /* When the folder summary could not be read or
- written */
- error->code == TNY_IO_ERROR_WRITE ||
- error->code == TNY_IO_ERROR_READ) &&
- !enough_free_space) {
- return TRUE;
- } else {
- return FALSE;
- }
-}
-
-static gboolean
-check_memory_full_error (GtkWidget *parent_window, GError *err)
-{
- if (err == NULL)
- return FALSE;
-
- if (is_memory_full_error (err, NULL)) {
- gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
- modest_platform_information_banner (parent_window, NULL, msg);
- g_free (msg);
- } else if (err->code == TNY_SYSTEM_ERROR_MEMORY)
- /* If the account was created in memory full
- conditions then tinymail won't be able to
- connect so it'll return this error code */
- modest_platform_information_banner (parent_window,
- NULL, _("emev_ui_imap_inbox_select_error"));
- else
- return FALSE;
-
- return TRUE;
-}
-
void
modest_ui_actions_disk_operations_error_handler (ModestMailOperation *mail_op,
gpointer user_data)
/* If the mail op has been cancelled then it's not an error:
don't show any message */
if (status != MODEST_MAIL_OPERATION_STATUS_CANCELED) {
- if (is_memory_full_error ((GError *) error, mail_op)) {
+ TnyAccount *account = modest_mail_operation_get_account (mail_op);
+ if (modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(),
+ (GError *) error, account)) {
gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
modest_platform_information_banner ((GtkWidget *) win, NULL, msg);
g_free (msg);
modest_platform_information_banner ((GtkWidget *) win,
NULL, user_data);
}
+ if (account)
+ g_object_unref (account);
}
if (win)
}
static void
+caller_win_destroyed (OpenMsgHelper *helper, GObject *object)
+{
+ if (helper->caller_window)
+ helper->caller_window = NULL;
+}
+
+static void
open_msg_helper_destroyer (gpointer user_data)
{
OpenMsgHelper *helper = (OpenMsgHelper *) user_data;
+ if (helper->caller_window) {
+ g_object_weak_unref ((GObject *) helper->caller_window, (GWeakNotify) caller_win_destroyed, helper);
+ helper->caller_window = NULL;
+ }
+
if (helper->banner_info) {
g_free (helper->banner_info->message);
if (helper->banner_info->idle_handler > 0) {
helper = (OpenMsgHelper *) user_data;
status = tny_account_get_connection_status (account);
- if (err || canceled) {
+ if (err || canceled || helper->caller_window == NULL) {
modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (), helper->header);
/* Free the helper */
open_msg_helper_destroyer (helper);
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
goto clean;
}
OpenMsgHelper *helper;
ModestWindow *window;
- g_return_if_fail (header != NULL && rowref != NULL);
+ g_return_if_fail (header != NULL && rowref != NULL && gtk_tree_row_reference_valid (rowref));
mgr = modest_runtime_get_window_mgr ();
(the user could switch between folders) */
helper = g_slice_new (OpenMsgHelper);
helper->model = g_object_ref (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)));
+ helper->caller_window = win;
+ g_object_weak_ref ((GObject *) helper->caller_window, (GWeakNotify) caller_win_destroyed, helper);
helper->header = g_object_ref (header);
helper->rowref = gtk_tree_row_reference_copy (rowref);
helper->banner_info = NULL;
/* Create reply mail */
switch (rf_helper->action) {
+ /* Use the msg_header to ensure that we have all the
+ information. The summary can lack some data */
+ TnyHeader *msg_header;
case ACTION_REPLY:
+ msg_header = tny_msg_get_header (msg);
new_msg =
- modest_tny_msg_create_reply_msg (msg, header, from,
+ modest_tny_msg_create_reply_msg (msg, msg_header, from,
(use_signature) ? signature : NULL,
rf_helper->reply_forward_type,
MODEST_TNY_MSG_REPLY_MODE_SENDER);
+ g_object_unref (msg_header);
break;
case ACTION_REPLY_TO_ALL:
+ msg_header = tny_msg_get_header (msg);
new_msg =
- modest_tny_msg_create_reply_msg (msg, header, from,
+ modest_tny_msg_create_reply_msg (msg, msg_header, from,
(use_signature) ? signature : NULL,
rf_helper->reply_forward_type,
MODEST_TNY_MSG_REPLY_MODE_ALL);
edit_type = MODEST_EDIT_TYPE_REPLY;
+ g_object_unref (msg_header);
break;
case ACTION_FORWARD:
new_msg =
ReplyForwardHelper *rf_helper = NULL;
guint reply_forward_type;
- g_return_if_fail (MODEST_IS_WINDOW(win));
+ g_return_if_fail (win && MODEST_IS_WINDOW(win));
/* we check for low-mem; in that case, show a warning, and don't allow
* reply/forward (because it could potentially require a lot of memory */
if (folder)
g_object_unref (folder);
} else {
- reply_forward_cb (NULL, header, FALSE, NULL, NULL, rf_helper);
+ reply_forward_cb (NULL, header, FALSE, NULL, NULL, NULL);
}
/* Frees */
g_object_unref (header_list);
modest_ui_actions_on_next (GtkAction *action,
ModestWindow *window)
{
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
GtkWidget *header_view;
modest_header_view_select_next (
MODEST_HEADER_VIEW(header_view));
- } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+#else
+ if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
modest_msg_view_window_select_next_message (
MODEST_MSG_VIEW_WINDOW (window));
+#endif
} else {
g_return_if_reached ();
}
{
g_return_if_fail (MODEST_IS_WINDOW(window));
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
GtkWidget *header_view;
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
return;
modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view));
- } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+#else
+ if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
modest_msg_view_window_select_previous_message (MODEST_MSG_VIEW_WINDOW (window));
+#endif
} else {
g_return_if_reached ();
}
g_return_if_fail (MODEST_IS_WINDOW(window));
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_HEADER_WINDOW (window)) {
+#else
+ if (MODEST_IS_HEADER_WINDOW (window)) {
header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (window)));
#endif
}
}
static void
-new_messages_arrived (ModestMailOperation *self,
- TnyList *new_headers,
- gpointer user_data)
+sync_folder_cb (ModestMailOperation *mail_op,
+ TnyFolder *folder,
+ gpointer user_data)
+{
+ ModestHeaderView *header_view = (ModestHeaderView *) user_data;
+
+ if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+ ModestWindow *parent = (ModestWindow *) modest_mail_operation_get_source (mail_op);
+
+ /* We must clear first, because otherwise set_folder will ignore */
+ /* the change as the folders are the same */
+ modest_header_view_clear (header_view);
+ modest_header_view_set_folder (header_view, folder, TRUE, parent, NULL, NULL);
+
+ g_object_unref (parent);
+ }
+
+ g_object_unref (header_view);
+}
+
+static gboolean
+idle_refresh_folder (gpointer source)
+{
+ ModestHeaderView *header_view = NULL;
+
+ /* If the window still exists */
+ if (!GTK_IS_WIDGET (source) ||
+ !GTK_WIDGET_VISIBLE (source))
+ return FALSE;
+
+ /* Refresh the current view */
+#ifdef MODEST_TOOLKIT_HILDON2
+ if (MODEST_IS_HEADER_WINDOW (source))
+ header_view = modest_header_window_get_header_view ((ModestHeaderWindow *) source);
+#else
+ if (MODEST_IS_MAIN_WINDOW (source))
+ header_view = MODEST_HEADER_VIEW (modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
+#endif
+ if (header_view) {
+ TnyFolder *folder = modest_header_view_get_folder (header_view);
+ if (folder) {
+ /* Sync the folder status */
+ ModestMailOperation *mail_op = modest_mail_operation_new (source);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+ modest_mail_operation_sync_folder (mail_op, folder, FALSE, sync_folder_cb, g_object_ref (header_view));
+ g_object_unref (folder);
+ g_object_unref (mail_op);
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+update_account_cb (ModestMailOperation *self,
+ TnyList *new_headers,
+ gpointer user_data)
{
- GObject *source;
+ ModestWindow *top;
gboolean show_visual_notifications;
- source = modest_mail_operation_get_source (self);
- show_visual_notifications = (source) ? FALSE : TRUE;
- if (source)
- g_object_unref (source);
+ top = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
+ show_visual_notifications = (top) ? FALSE : TRUE;
/* Notify new messages have been downloaded. If the
send&receive was invoked by the user then do not show any
visual notification, only play a sound and activate the LED
(for the Maemo version) */
- if (TNY_IS_LIST(new_headers) && (tny_list_get_length (new_headers)) > 0)
- modest_platform_on_new_headers_received (new_headers,
- show_visual_notifications);
+ if (TNY_IS_LIST(new_headers) && (tny_list_get_length (new_headers)) > 0) {
+
+ /* We only notify about really new messages (not seen) we get */
+ TnyList *actually_new_list;
+ TnyIterator *iterator;
+ actually_new_list = TNY_LIST (tny_simple_list_new ());
+ for (iterator = tny_list_create_iterator (new_headers);
+ !tny_iterator_is_done (iterator);
+ tny_iterator_next (iterator)) {
+ TnyHeader *header;
+ TnyHeaderFlags flags;
+ header = TNY_HEADER (tny_iterator_get_current (iterator));
+ flags = tny_header_get_flags (header);
+
+ if (!(flags & TNY_HEADER_FLAG_SEEN)) {
+ /* Messages are ordered from most
+ recent to oldest. But we want to
+ show notifications starting from
+ the oldest message. That's why we
+ reverse the list */
+ tny_list_prepend (actually_new_list, G_OBJECT (header));
+ }
+ g_object_unref (header);
+ }
+ g_object_unref (iterator);
-}
+ if (tny_list_get_length (actually_new_list) > 0) {
+ GList *new_headers_list = NULL;
-gboolean
-retrieve_all_messages_cb (GObject *source,
- guint num_msgs,
- guint retrieve_limit)
-{
- GtkWindow *window;
- gchar *msg;
- gint response;
+ new_headers_list = modest_utils_create_notification_list_from_header_list (actually_new_list);
- window = GTK_WINDOW (source);
- msg = g_strdup_printf (_("mail_nc_msg_count_limit_exceeded"),
- num_msgs, retrieve_limit);
+ /* 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);
+ }
- /* Ask the user if they want to retrieve all the messages */
- response =
- modest_platform_run_confirmation_dialog_with_buttons (window, msg,
- _("mcen_bd_get_all"),
- _("mcen_bd_newest_only"));
- /* Free and return */
- g_free (msg);
- return (response == GTK_RESPONSE_ACCEPT) ? TRUE : FALSE;
+ if (top) {
+ /* Refresh the current folder in an idle. We do this
+ in order to avoid refresh cancelations if the
+ currently viewed folder is the inbox */
+ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ idle_refresh_folder,
+ g_object_ref (top),
+ g_object_unref);
+ }
}
typedef struct {
info = (SendReceiveInfo *) user_data;
if (err || canceled) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
if (info->mail_op) {
modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (),
goto clean;
}
+#ifndef MODEST_TOOLKIT_HILDON2
/* Set send/receive operation in progress */
if (info->win && MODEST_IS_MAIN_WINDOW (info->win)) {
modest_main_window_notify_send_receive_initied (MODEST_MAIN_WINDOW (info->win));
g_signal_connect (G_OBJECT (info->mail_op), "operation-finished",
G_CALLBACK (on_send_receive_finished),
info->win);
+#endif
/* Send & receive. */
- modest_mail_operation_update_account (info->mail_op, info->account_name, info->poke_status, info->interactive,
- (info->win) ? retrieve_all_messages_cb : NULL,
- new_messages_arrived, info->win);
+ modest_mail_operation_update_account (info->mail_op, info->account_name,
+ info->poke_status, info->interactive,
+ update_account_cb, info->win);
clean:
/* Frees */
gchar *acc_name = NULL;
SendReceiveInfo *info;
ModestTnyAccountStore *acc_store;
+ TnyAccount *account;
/* If no account name was provided then get the current account, and if
there is no current account then pick the default one: */
if (!acc_name)
acc_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
if (!acc_name) {
- g_printerr ("modest: cannot get default account\n");
+ modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error"));
return;
}
} else {
}
acc_store = modest_runtime_get_account_store ();
+ account = modest_tny_account_store_get_server_account (acc_store, acc_name, TNY_ACCOUNT_TYPE_STORE);
+
+ if (!account) {
+ g_free (acc_name);
+ modest_platform_information_banner (NULL, NULL, _("emev_ni_internal_error"));
+ return;
+ }
+
+ /* Do not automatically refresh accounts that are flagged as
+ NO_AUTO_UPDATE. This could be useful for accounts that
+ handle their own update times */
+ if (!interactive) {
+ ModestProtocolType proto = modest_tny_account_get_protocol_type (account);
+ if (proto != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
+ const gchar *tag = MODEST_PROTOCOL_REGISTRY_NO_AUTO_UPDATE_PROTOCOLS;
+ ModestProtocolRegistry *registry = modest_runtime_get_protocol_registry ();
+
+ if (modest_protocol_registry_protocol_type_has_tag (registry, proto, tag)) {
+ g_debug ("%s no auto update allowed for account %s", __FUNCTION__, account_name);
+ g_object_unref (account);
+ g_free (acc_name);
+ return;
+ }
+ }
+ }
/* Create the info for the connect and perform */
info = g_slice_new (SendReceiveInfo);
info->win = (win) ? g_object_ref (win) : NULL;
info->poke_status = poke_status;
info->interactive = interactive;
- info->account = modest_tny_account_store_get_server_account (acc_store, acc_name,
- TNY_ACCOUNT_TYPE_STORE);
+ info->account = account;
/* We need to create the operation here, because otherwise it
could happen that the queue emits the queue-empty signal
while we're trying to connect the account */
modest_ui_actions_on_accounts (NULL, win);
/* Refresh the current folder. The if is always TRUE it's just an extra check */
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (win)) {
GtkWidget *folder_view;
TnyFolderStore *folder_store;
/* Refresh the active account. Force the connection if needed
and poke the status of all folders */
modest_ui_actions_do_send_receive (NULL, TRUE, TRUE, TRUE, win);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_ACCOUNTS_WINDOW (win)) {
+#else
+ if (MODEST_IS_ACCOUNTS_WINDOW (win)) {
modest_ui_actions_do_send_receive_all (win, TRUE, TRUE, TRUE);
#endif
} else {
}
-
+#ifndef MODEST_TOOLKIT_HILDON2
void
modest_ui_actions_toggle_header_list_view (GtkAction *action, ModestMainWindow *main_window)
{
MODEST_CONF_HEADER_VIEW_KEY);
}
-
void
modest_ui_actions_on_header_selected (ModestHeaderView *header_view,
TnyHeader *header,
modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
}
+#endif
void
modest_ui_actions_on_header_activated (ModestHeaderView *header_view,
GtkTreePath *path,
ModestWindow *window)
{
- GtkWidget *open_widget;
GtkTreeRowReference *rowref;
g_return_if_fail (MODEST_IS_WINDOW(window));
if (modest_platform_check_memory_low (MODEST_WINDOW(window), TRUE))
return;
+#ifndef MODEST_TOOLKIT_HILDON2
+ GtkWidget *open_widget;
if (MODEST_IS_MAIN_WINDOW (window)) {
modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
open_widget = modest_window_get_action_widget (MODEST_WINDOW (window), "/MenuBar/EmailMenu/EmailOpenMenu");
if (!GTK_WIDGET_IS_SENSITIVE (open_widget))
return;
}
+#endif
rowref = gtk_tree_row_reference_new (gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)), path);
open_msg_from_header (header, rowref, MODEST_WINDOW (window));
gtk_tree_row_reference_free (rowref);
}
+#ifndef MODEST_TOOLKIT_HILDON2
static void
set_active_account_from_tny_account (TnyAccount *account,
ModestWindow *window)
g_object_unref (modest_server_account);
}
-
static void
folder_refreshed_cb (ModestMailOperation *mail_op,
TnyFolder *folder,
gboolean selected,
ModestMainWindow *main_window)
{
- ModestConf *conf;
GtkWidget *header_view;
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
if (!header_view)
return;
- conf = modest_runtime_get_conf ();
if (TNY_IS_ACCOUNT (folder_store)) {
if (selected) {
} else {
if (TNY_IS_FOLDER (folder_store) && selected) {
TnyAccount *account;
- const gchar *account_name = NULL;
/* Update the active account */
account = modest_tny_folder_get_account (TNY_FOLDER (folder_store));
if (account) {
set_active_account_from_tny_account (account, MODEST_WINDOW (main_window));
- account_name =
- modest_tny_account_get_parent_modest_account_name_for_server_account (account);
g_object_unref (account);
account = NULL;
}
#ifdef MODEST_TOOLKIT_GTK
if (modest_main_window_get_contents_style (main_window) ==
MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS)
- modest_widget_memory_save (conf, G_OBJECT (header_view),
+ modest_widget_memory_save (modest_runtime_get_conf (),
+ G_OBJECT (header_view),
MODEST_CONF_HEADER_VIEW_KEY);
#endif
modest_header_view_clear (MODEST_HEADER_VIEW(header_view));
modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (main_window));
modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
}
+#endif
void
modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemType type,
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
enough_space_for_message (ModestMsgEditWindow *edit_window,
MsgData *data)
{
- TnyAccountStore *acc_store;
guint64 available_disk, expected_size;
gint parts_count;
guint64 parts_size;
/* Check size */
- acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store());
available_disk = modest_utils_get_available_space (NULL);
modest_msg_edit_window_get_parts_size (edit_window, &parts_count, &parts_size);
expected_size = modest_tny_msg_estimate_size (data->plain_body,
parts_count,
parts_size);
- /* Double check: memory full condition or message too big */
- if (available_disk < MIN_FREE_SPACE ||
+ /* Double check: disk full condition or message too big */
+ if (available_disk < MODEST_TNY_ACCOUNT_STORE_MIN_FREE_SPACE ||
expected_size > available_disk) {
gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
modest_platform_information_banner (NULL, NULL, msg);
if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
modest_platform_run_information_dialog (
GTK_WINDOW(edit_window),
- _KR("memr_ib_operation_disabled"),
+ _("mail_ib_error_attachment_size"),
TRUE);
return FALSE;
}
gchar *account_name;
ModestAccountMgr *account_mgr;
gboolean had_error = FALSE;
- ModestMainWindow *win = NULL;
g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
modest_platform_information_banner (NULL, NULL, text);
g_free (text);
#else
+ ModestMainWindow *win = NULL;
+
/* Use the main window as the parent of the banner, if the
main window does not exist it won't be shown, if the parent
window exists then it's properly shown. We don't use the
modest_msg_edit_window_free_msg_data (edit_window, data);
+#ifndef MODEST_TOOLKIT_HILDON2
/* ** FIXME **
* If the drafts folder is selected then make the header view
* insensitive while the message is being saved to drafts
if (folder != NULL) g_object_unref(folder);
}
}
+#endif
return !had_error;
}
ModestAccountMgr *account_mgr;
gchar *account_name;
ModestMailOperation *mail_operation;
+ gchar *recipients;
g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
data = modest_msg_edit_window_get_msg_data (edit_window);
+ recipients = g_strconcat (data->to?data->to:"",
+ data->cc?data->cc:"",
+ data->bcc?data->bcc:"",
+ NULL);
+ if (recipients == NULL || recipients[0] == '\0') {
+ /* Empty subject -> no send */
+ g_free (recipients);
+ modest_msg_edit_window_free_msg_data (edit_window, data);
+ return FALSE;
+ }
+ g_free (recipients);
+
/* Check size */
if (!enough_space_for_message (edit_window, data)) {
modest_msg_edit_window_free_msg_data (edit_window, data);
}
/* Get the currently-active transport account for this modest account: */
- if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+ if (account_name && strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
transport_account =
TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
(modest_runtime_get_account_store (),
error = modest_mail_operation_get_error (mail_op);
if (error) {
-
+ gboolean disk_full = FALSE;
+ TnyAccount *account;
/* Show an error. If there was some problem writing to
disk, show it, otherwise show the generic folder
create error. We do it here and not in an error
stop the main loop in a gtk_dialog_run and then,
the message won't be shown until that dialog is
closed */
- modest_ui_actions_disk_operations_error_handler (mail_op,
- _("mail_in_ui_folder_create_error"));
-
- if (!is_memory_full_error ((GError *) error, mail_op)) {
- /* Try again if there is no full memory condition */
+ account = modest_mail_operation_get_account (mail_op);
+ if (account) {
+ disk_full =
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) source_win,
+ (GError *) error,
+ account,
+ _("mail_in_ui_folder_create_error_memory"));
+ g_object_unref (account);
+ }
+ if (!disk_full) {
+ /* Show an error and try again if there is no
+ full memory condition */
+ modest_platform_information_banner ((GtkWidget *) source_win, NULL,
+ _("mail_in_ui_folder_create_error"));
do_create_folder (source_win, parent_folder, (const gchar *) suggested_name);
}
+
} else {
/* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
* FIXME: any other? */
GtkWidget *folder_view;
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW(source_win))
folder_view =
modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
else
+#endif
folder_view = GTK_WIDGET(g_object_get_data (G_OBJECT (source_win),
MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
ModestMailOperation *mail_op;
if (canceled || err) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ NULL, _("mail_in_ui_folder_create_error_memory"));
+
+ /* This happens if we have selected the outbox folder
+ as the parent */
+ if (err && err->code == TNY_SERVICE_ERROR_UNKNOWN &&
+ TNY_IS_MERGE_FOLDER (helper->parent)) {
+ /* Show an error and retry */
+ modest_platform_information_banner ((GtkWidget *) parent_window,
+ NULL,
+ _("mail_in_ui_folder_create_error"));
+
+ do_create_folder (parent_window, helper->parent, helper->folder_name);
+ }
+
goto frees;
}
g_return_if_fail (MODEST_IS_WINDOW(window));
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
GtkWidget *folder_view;
return;
modest_ui_actions_create_folder (GTK_WIDGET (window), folder_view, NULL);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+#else
+ if (MODEST_IS_FOLDER_WINDOW (window)) {
GtkWidget *folder_view;
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
const GError *error = NULL;
gchar *message = NULL;
gboolean mem_full;
+ TnyAccount *account = modest_mail_operation_get_account (mail_op);
/* Get error message */
error = modest_mail_operation_get_error (mail_op);
if (!error)
g_return_if_reached ();
- mem_full = is_memory_full_error ((GError *) error, mail_op);
+ mem_full = modest_tny_account_store_is_disk_full_error (modest_runtime_get_account_store(),
+ (GError *) error, account);
if (mem_full) {
message = g_strdup_printf (_KR("cerm_device_memory_full"), "");
} else if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
will be destroyed so the banner won't appear */
modest_platform_information_banner (NULL, NULL, message);
+ if (account)
+ g_object_unref (account);
if (mem_full)
g_free (message);
}
/* Note that if the rename fails new_folder will be NULL */
if (new_folder) {
modest_folder_view_select_folder (folder_view, new_folder, FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
} else {
modest_folder_view_select_first_inbox_or_local (folder_view);
+#endif
}
gtk_widget_grab_focus (GTK_WIDGET (folder_view));
}
RenameFolderInfo *data = (RenameFolderInfo*)user_data;
if (canceled || err) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ /* In disk full conditions we could get this error here */
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
} else {
mail_op =
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
-
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW(parent_window)) {
folder_view = modest_main_window_get_child_widget (
MODEST_MAIN_WINDOW (parent_window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
}
-#ifdef MODEST_TOOLKIT_HILDON2
- else if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
+#else
+ if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
ModestFolderWindow *folder_window = (ModestFolderWindow *) parent_window;
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (folder_window));
}
g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
if (!folder_view)
return FALSE;
-
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+#else
+ if (MODEST_IS_FOLDER_WINDOW (window)) {
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
#endif
} else {
GtkTreeSelection *sel;
if (!MODEST_IS_WINDOW(parent_window) || canceled || (err!=NULL)) {
+ /* Note that the connection process can fail due to
+ memory low conditions as it can not successfully
+ store the summary */
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget*) parent_window, err,
+ account, NULL))
+ g_debug ("Error connecting when trying to delete a folder");
g_object_unref (G_OBJECT (info->folder));
g_free (info);
return;
}
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (parent_window)) {
folder_view = modest_main_window_get_child_widget (
MODEST_MAIN_WINDOW (parent_window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
+#else
+ if (MODEST_IS_FOLDER_WINDOW (parent_window)) {
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (parent_window)));
#endif
} else {
mail_op);
modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (info->folder), info->move_to_trash);
+#ifndef MODEST_TOOLKIT_HILDON2
modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
+#endif
- g_object_unref (G_OBJECT (mail_op));
- g_object_unref (G_OBJECT (info->folder));
+ g_object_unref (mail_op);
+ g_object_unref (info->folder);
g_free (info);
}
g_return_val_if_fail (MODEST_IS_WINDOW(window), FALSE);
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (window),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (window)) {
+#else
+ if (MODEST_IS_FOLDER_WINDOW (window)) {
folder_view = GTK_WIDGET (modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (window)));
#endif
} else {
g_free (message);
if (response == GTK_RESPONSE_OK) {
- DeleteFolderInfo *info;
+ TnyAccount *account = NULL;
+ DeleteFolderInfo *info = NULL;
info = g_new0(DeleteFolderInfo, 1);
- info->folder = folder;
+ info->folder = g_object_ref (folder);
info->move_to_trash = move_to_trash;
- g_object_ref (G_OBJECT (info->folder));
- TnyAccount *account = tny_folder_get_account (TNY_FOLDER (folder));
+
+ account = tny_folder_get_account (TNY_FOLDER (folder));
modest_platform_connect_if_remote_and_perform (GTK_WINDOW (window),
TRUE,
TNY_FOLDER_STORE (account),
on_delete_folder_cb, info);
g_object_unref (account);
+ g_object_unref (folder);
return TRUE;
} else {
return FALSE;
}
- g_object_unref (G_OBJECT (folder));
}
void
return delete_folder (window, FALSE);
}
+#ifndef MODEST_TOOLKIT_HILDON2
void
modest_ui_actions_on_move_folder_to_trash_folder (GtkAction *action, ModestMainWindow *main_window)
{
delete_folder (MODEST_WINDOW (main_window), TRUE);
}
-
+#endif
typedef struct _PasswordDialogFields {
GtkWidget *username;
modest_ui_actions_on_undo (GtkAction *action,
ModestWindow *window)
{
- ModestEmailClipboard *clipboard = NULL;
-
if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window));
+#ifndef MODEST_TOOLKIT_HILDON2
} else if (MODEST_IS_MAIN_WINDOW (window)) {
+ ModestEmailClipboard *clipboard = NULL;
/* Clear clipboard source */
clipboard = modest_runtime_get_email_clipboard ();
modest_email_clipboard_clear (clipboard);
- }
- else {
+#endif
+ } else {
g_return_if_reached ();
}
}
gtk_text_buffer_select_range (buffer, &start, &end);
} else if (GTK_IS_HTML (focused_widget)) {
gtk_html_select_all (GTK_HTML (focused_widget));
+#ifndef MODEST_TOOLKIT_HILDON2
} else if (MODEST_IS_MAIN_WINDOW (window)) {
GtkWidget *header_view = focused_widget;
GtkTreeSelection *selection = NULL;
modest_window_enable_dimming (MODEST_WINDOW(window));
modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+#endif
}
}
g_object_unref (header);
}
g_object_unref (msg);
-
+#ifndef MODEST_TOOLKIT_HILDON2
} else if (MODEST_IS_MAIN_WINDOW (win)) {
GtkWidget *folder_view, *header_view;
/* Show details of each header */
do_headers_action (win, headers_action_show_details, header_view);
}
-#ifdef MODEST_TOOLKIT_HILDON2
+#else
} else if (MODEST_IS_HEADER_WINDOW (win)) {
TnyFolder *folder;
GtkWidget *header_view;
}
void
+modest_ui_actions_on_limit_error (GtkAction *action,
+ ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
+
+ modest_platform_information_banner ((GtkWidget *) win, NULL, _CS("ckdg_ib_maximum_characters_reached"));
+
+}
+
+void
modest_ui_actions_on_toggle_show_cc (GtkToggleAction *toggle,
ModestMsgEditWindow *window)
{
modest_msg_edit_window_show_bcc (window, gtk_toggle_action_get_active (toggle));
}
+#ifndef MODEST_TOOLKIT_HILDON2
void
modest_ui_actions_toggle_folders_view (GtkAction *action,
ModestMainWindow *main_window)
else
modest_main_window_set_style (main_window, MODEST_MAIN_WINDOW_STYLE_SIMPLE);
}
+#endif
void
modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle,
GtkWidget *parent_win;
MoveToInfo *helper = NULL;
ModestFolderView *folder_view;
+ gboolean unset_edit_mode = FALSE;
helper = (MoveToInfo *) user_data;
parent_win = (GtkWidget *) helper->win;
folder_view = MODEST_FOLDER_VIEW (g_object_get_data (G_OBJECT (dialog),
MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
-
switch (response) {
TnyFolderStore *dst_folder;
TnyFolderStore *selected;
case GTK_RESPONSE_OK:
dst_folder = modest_folder_view_get_selected (folder_view);
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (parent_win)) {
/* Clean list to move used for filtering */
modest_folder_view_set_list_to_move (folder_view, NULL);
GTK_WIDGET (folder_view),
dst_folder,
MODEST_MAIN_WINDOW (parent_win));
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
+#else
+ if (MODEST_IS_FOLDER_WINDOW (parent_win)) {
/* Clean list to move used for filtering */
modest_folder_view_set_list_to_move (folder_view, NULL);
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_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
- modest_folder_view_update_model (MODEST_FOLDER_VIEW (tree_view),
- TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
+ /* modest_folder_view_update_model (MODEST_FOLDER_VIEW (tree_view), */
+ /* TNY_ACCOUNT_STORE (modest_runtime_get_account_store ())); */
active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
mgr = modest_runtime_get_account_mgr ();
/* No more messages to view, so close this window */
modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
}
+#ifndef MODEST_TOOLKIT_HILDON2
} else if (MODEST_IS_MAIN_WINDOW (object) &&
gtk_tree_row_reference_valid (helper->reference)) {
GtkWidget *header_view;
gtk_tree_selection_unselect_all (sel);
gtk_tree_selection_select_path (sel, path);
gtk_tree_path_free (path);
+#endif
}
g_object_unref (object);
TnyFolder *new_folder,
gpointer user_data)
{
- GtkWidget *folder_view;
GObject *object;
object = modest_mail_operation_get_source (mail_op);
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (object)) {
+ GtkWidget *folder_view;
folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object),
MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
g_object_ref (folder_view);
modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), new_folder, FALSE);
g_object_unref (folder_view);
} else {
+#else
+ {
+#endif
move_to_cb (mail_op, user_data);
}
}
gpointer user_data)
{
GObject *win = NULL;
+ const GError *error;
+ TnyAccount *account = NULL;
#ifndef MODEST_TOOLKIT_HILDON2
ModestWindow *main_window = NULL;
/* Disable next automatic folder selection */
main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
FALSE); /* don't create */
+
+ /* Show notification dialog only if the main window exists */
if (main_window) {
GtkWidget *folder_view = NULL;
}
}
#endif
- /* Show notification dialog only if the main window exists */
win = modest_mail_operation_get_source (mail_op);
- modest_platform_run_information_dialog ((GtkWindow *) win,
- _("mail_in_ui_folder_move_target_error"),
- FALSE);
+ error = modest_mail_operation_get_error (mail_op);
+
+ if (TNY_IS_FOLDER (user_data))
+ account = modest_tny_folder_get_account (TNY_FOLDER (user_data));
+ else if (TNY_IS_ACCOUNT (user_data))
+ account = g_object_ref (user_data);
+
+ /* If it's not a disk full error then show a generic error */
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) win, (GError *) error,
+ account, NULL))
+ modest_platform_run_information_dialog ((GtkWindow *) win,
+ _("mail_in_ui_folder_move_target_error"),
+ FALSE);
+ if (account)
+ g_object_unref (account);
if (win)
g_object_unref (win);
}
+#ifndef MODEST_TOOLKIT_HILDON2
static void
open_msg_for_purge_cb (ModestMailOperation *mail_op,
TnyHeader *header,
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;
if (header_list)
g_object_unref (header_list);
}
+#endif
/*
* Checks if we need a connection to do the transfer and if the user
{
GObject *win;
const GError *error;
+ TnyAccount *account;
win = modest_mail_operation_get_source (mail_op);
error = modest_mail_operation_get_error (mail_op);
- if (error && is_memory_full_error ((GError *) error, mail_op)) {
- gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
- modest_platform_information_banner ((GtkWidget *) win, NULL, msg);
- g_free (msg);
- } else {
+ /* We cannot get the account from the mail op as that is the
+ source account and for checking memory full conditions we
+ need the destination one */
+ account = TNY_ACCOUNT (user_data);
+
+ if (error &&
+ !modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) win, (GError*) error,
+ account, _KR("cerm_memory_card_full"))) {
modest_platform_run_information_dialog ((GtkWindow *) win,
_("mail_in_ui_folder_move_target_error"),
FALSE);
helper = (XferMsgsHelper *) user_data;
if (canceled || err) {
- if (!check_memory_full_error ((GtkWidget *) parent_window, err)) {
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL)) {
/* Show the proper error message */
modest_ui_actions_on_account_connection_error (parent_window, account);
}
/* tinymail will return NULL for local folders it seems */
dst_forbids_message_add = modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
modest_tny_account_get_protocol_type (dst_account),
- MODEST_PROTOCOL_REGISTRY_STORE_FORBID_MESSAGE_ADD);
- g_object_unref (dst_account);
+ MODEST_PROTOCOL_REGISTRY_STORE_FORBID_INCOMING_XFERS);
if (dst_forbids_message_add) {
modest_platform_information_banner (GTK_WIDGET (win),
g_object_ref (movehelper->banner);
gtk_widget_show (GTK_WIDGET (movehelper->banner));
}
-#endif
if (MODEST_IS_MAIN_WINDOW (win)) {
GtkWidget *header_view =
MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
movehelper->reference = get_next_after_selected_headers (MODEST_HEADER_VIEW (header_view));
}
+#endif
/* Perform the mail operation */
mail_op = modest_mail_operation_new_with_error_handling (G_OBJECT(win),
xfer_messages_error_handler,
- movehelper, NULL);
+ g_object_ref (dst_account),
+ g_object_unref);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
g_object_unref (G_OBJECT (mail_op));
end:
+ if (dst_account)
+ g_object_unref (dst_account);
g_object_unref (helper->dst_folder);
g_object_unref (helper->headers);
g_slice_free (XferMsgsHelper, helper);
} MoveFolderInfo;
static void
-on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
- TnyAccount *account, gpointer user_data)
+on_move_folder_cb (gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
{
MoveFolderInfo *info = (MoveFolderInfo*)user_data;
GtkTreeSelection *sel;
ModestMailOperation *mail_op = NULL;
if (canceled || err || !MODEST_IS_WINDOW (parent_window)) {
+ /* Note that the connection process can fail due to
+ memory low conditions as it can not successfully
+ store the summary */
+ if (!modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget*) parent_window, err,
+ account, NULL))
+ g_debug ("Error connecting when trying to move a folder");
+
g_object_unref (G_OBJECT (info->src_folder));
g_object_unref (G_OBJECT (info->dst_folder));
g_free (info);
mail_op =
modest_mail_operation_new_with_error_handling (G_OBJECT(parent_window),
- modest_ui_actions_move_folder_error_handler,
- info->src_folder, NULL);
+ modest_ui_actions_move_folder_error_handler,
+ g_object_ref (info->dst_folder), g_object_unref);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
- mail_op);
-
- /* Select *after* the changes */
- /* TODO: this function hangs UI after transfer */
- /* modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view), */
- /* TNY_FOLDER (src_folder), TRUE); */
+ mail_op);
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (parent_window)) {
modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
TNY_FOLDER (info->dst_folder), TRUE);
}
+#endif
modest_mail_operation_xfer_folder (mail_op,
TNY_FOLDER (info->src_folder),
info->dst_folder,
return tny_folder_get_account (TNY_FOLDER (folder_store));
}
+#ifndef MODEST_TOOLKIT_HILDON2
/*
* UI handler for the "Move to" action when invoked from the
* ModestMainWindow
/* Frees */
g_object_unref (src_folder);
}
+#endif
#ifdef MODEST_TOOLKIT_HILDON2
/*
/* Show the dialog */
gtk_widget_show (dialog);
- return TRUE;
+ return FALSE;
}
/*
modest_ui_actions_remove_attachments (GtkAction *action,
ModestWindow *window)
{
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (window)) {
modest_ui_actions_on_main_window_remove_attachments (action, MODEST_MAIN_WINDOW (window));
} else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+#else
+ if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
+#endif
modest_msg_view_window_remove_attachments (MODEST_MSG_VIEW_WINDOW (window), FALSE);
} else {
/* not supported window for this action */
TnyList *headers = TNY_LIST (user_data);
if (err || canceled) {
- check_memory_full_error ((GtkWidget *) parent_window, err);
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
goto out;
}
active);
}
+#ifndef MODEST_TOOLKIT_HILDON2
static void
on_send_receive_finished (ModestMailOperation *mail_op,
gpointer user_data)
if (folder_store)
g_object_unref (folder_store);
}
-
+#endif
void
modest_ui_actions_on_send_queue_error_happened (TnySendQueue *self,
ModestProtocol *protocol;
TnyHeader *header = NULL;
+#ifndef MODEST_TOOLKIT_HILDON2
if (MODEST_IS_MAIN_WINDOW (win)) {
GtkWidget *header_view;
TnyList* headers = NULL;
folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
g_object_unref (iter);
g_object_unref (headers);
-#ifdef MODEST_TOOLKIT_HILDON2
- } else if (MODEST_IS_HEADER_WINDOW (win)) {
+#else
+ if (MODEST_IS_HEADER_WINDOW (win)) {
GtkWidget *header_view;
TnyList* headers = NULL;
TnyIterator *iter;
#endif
} else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
- folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
+ if (header)
+ folder = TNY_FOLDER_STORE (tny_header_get_folder (header));
}
if (!header || !folder)
g_free (default_account_name);
removed = modest_account_mgr_remove_account (account_mgr, account_name);
- if (!removed)
+ if (removed) {
+ /* Close all email notifications, we cannot
+ distinguish if the notification belongs to
+ this account or not, so for safety reasons
+ we remove them all */
+ modest_platform_remove_new_mail_notifications (FALSE);
+ } else {
g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__);
+ }
}
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
modest_msg_view_window_reload (MODEST_MSG_VIEW_WINDOW (window));
}
+
+/** Check whether any connections are active, and cancel them if
+ * the user wishes.
+ * Returns TRUE is there was no problem,
+ * or if an operation was cancelled so we can continue.
+ * Returns FALSE if the user chose to cancel his request instead.
+ */
+
+gboolean
+modest_ui_actions_check_for_active_account (ModestWindow *self,
+ const gchar* account_name)
+{
+ ModestTnySendQueue *send_queue;
+ ModestTnyAccountStore *acc_store;
+ ModestMailOperationQueue* queue;
+ TnyConnectionStatus store_conn_status;
+ TnyAccount *store_account = NULL, *transport_account = NULL;
+ gboolean retval = TRUE, sending = FALSE;
+
+ acc_store = modest_runtime_get_account_store ();
+ queue = modest_runtime_get_mail_operation_queue ();
+
+ store_account =
+ modest_tny_account_store_get_server_account (acc_store,
+ account_name,
+ TNY_ACCOUNT_TYPE_STORE);
+
+ /* This could happen if the account was deleted before the
+ call to this function */
+ if (!store_account)
+ return FALSE;
+
+ transport_account =
+ modest_tny_account_store_get_server_account (acc_store,
+ account_name,
+ TNY_ACCOUNT_TYPE_TRANSPORT);
+
+ /* This could happen if the account was deleted before the
+ call to this function */
+ if (!transport_account) {
+ g_object_unref (store_account);
+ return FALSE;
+ }
+
+ /* If the transport account was not used yet, then the send
+ queue could not exist (it's created on demand) */
+ send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT (transport_account), FALSE);
+ if (TNY_IS_SEND_QUEUE (send_queue))
+ sending = modest_tny_send_queue_sending_in_progress (send_queue);
+
+ store_conn_status = tny_account_get_connection_status (store_account);
+ if (store_conn_status == TNY_CONNECTION_STATUS_CONNECTED || sending) {
+ gint response;
+
+ response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self),
+ _("emev_nc_disconnect_account"));
+ if (response == GTK_RESPONSE_OK) {
+ retval = TRUE;
+ } else {
+ retval = FALSE;
+ }
+ }
+
+ if (retval) {
+
+ /* FIXME: We should only cancel those of this account */
+ modest_mail_operation_queue_cancel_all (queue);
+
+ /* Also disconnect the account */
+ if ((tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED) &&
+ (tny_account_get_connection_status (store_account) != TNY_CONNECTION_STATUS_DISCONNECTED_BROKEN)) {
+ tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account),
+ FALSE, NULL, NULL);
+ }
+ if (sending) {
+ tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (transport_account),
+ FALSE, NULL, NULL);
+ }
+ }
+
+ /* Frees */
+ g_object_unref (store_account);
+ g_object_unref (transport_account);
+
+ return retval;
+}