#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 {
if (response == GTK_RESPONSE_OK) {
- ModestWindow *main_window = NULL;
ModestWindowMgr *mgr = NULL;
GtkTreeModel *model = NULL;
GtkTreeSelection *sel = NULL;
}
/* 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 */
} 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);
}
/* 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);
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);
}
}
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 ||
+ /* 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);
if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
modest_platform_run_information_dialog (
GTK_WINDOW(win),
- _KR("memr_ib_operation_disabled"),
+ _("mail_ib_error_attachment_size"),
TRUE);
return;
}
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);
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;
g_object_unref (parent_win);
}
-static gboolean
-is_memory_full_error (GError *error, ModestMailOperation *mail_op, gboolean *is_mmc)
-{
- 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 ());
-
- if (is_mmc)
- *is_mmc = FALSE;
-
- /* 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)) {
- if (is_mmc)
- *is_mmc = TRUE;
- 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;
- }
-}
-
-/* Shows an error if we're in memory full conditions. The #alternate
- parametter contains the error that will be shown if the memory full
- conditions happen in the mmc external storage */
-static gboolean
-check_memory_full_error (GtkWidget *parent_window, GError *err, const gchar *alternate)
-{
- gboolean is_mcc;
-
- if (err == NULL)
- return FALSE;
-
- if (is_memory_full_error (err, NULL, &is_mcc)) {
- if (is_mcc && alternate) {
- modest_platform_information_banner (parent_window, NULL, alternate);
- } else {
- 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, NULL)) {
+ 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, NULL);
+ /* 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_utils_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
}
+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_main_window_get_child_widget ((ModestMainWindow *) source,
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+#endif
+ if (header_view) {
+ TnyFolder *folder = modest_header_view_get_folder (header_view);
+ if (folder) {
+ /* 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,
+ (ModestWindow *) source, NULL, NULL);
+ g_object_unref (folder);
+ }
+ }
+
+ return FALSE;
+}
+
static void
-new_messages_arrived (ModestMailOperation *self,
- TnyList *new_headers,
- gpointer user_data)
+update_account_cb (ModestMailOperation *self,
+ TnyList *new_headers,
+ gpointer user_data)
{
GObject *source;
gboolean show_visual_notifications;
source = modest_mail_operation_get_source (self);
show_visual_notifications = (source) ? FALSE : TRUE;
- if (source)
- g_object_unref (source);
/* Notify new messages have been downloaded. If the
send&receive was invoked by the user then do not show any
flags = tny_header_get_flags (header);
if (!(flags & TNY_HEADER_FLAG_SEEN)) {
- tny_list_append (actually_new_list, G_OBJECT (header));
+ /* 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 (actually_new_list);
}
-}
-
-gboolean
-retrieve_all_messages_cb (GObject *source,
- guint num_msgs,
- guint retrieve_limit)
-{
- GtkWindow *window;
- gchar *msg;
- gint response;
-
- window = GTK_WINDOW (source);
- msg = g_strdup_printf (_("mail_nc_msg_count_limit_exceeded"),
- num_msgs, retrieve_limit);
-
- /* 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 (source) {
+ /* 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 (source),
+ g_object_unref);
+ g_object_unref (source);
+ }
}
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, NULL);
+ /* 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 (),
/* 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);
+ 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 */
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;
}
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 */
- if (!check_memory_full_error ((GtkWidget *) source_win, (GError *) error,
- _("mail_in_ui_folder_create_error_memory"))) {
+ 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? */
ModestMailOperation *mail_op;
if (canceled || err) {
- /* In memory full conditions we could get this error here */
- check_memory_full_error ((GtkWidget *) parent_window, err,
- _("mail_in_ui_folder_create_error_memory"));
+ /* 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 */
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, NULL);
+ 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);
}
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, NULL);
+ /* 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 =
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;
modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view));
- 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_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
}
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)
{
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;
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 ();
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);
}
{
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, NULL)) {
- 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, NULL)) {
+ 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),
/* 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);
if (MODEST_IS_MAIN_WINDOW (parent_window)) {
modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
TnyList *headers = TNY_LIST (user_data);
if (err || canceled) {
- check_memory_full_error ((GtkWidget *) parent_window, err, NULL);
+ modest_tny_account_store_check_disk_full_error (modest_runtime_get_account_store(),
+ (GtkWidget *) parent_window, err,
+ account, NULL);
goto out;
}
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;
}
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;
+}