aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-utils.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-10-07 11:38:52 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-10-13 01:58:59 +0800
commita06e4484b8df804124b5bcf88d94dec5acfba270 (patch)
tree4fa42793d7dc461f2b3767296d76592182c48222 /mail/em-utils.c
parent5e0758bb6934a7859b1d8a247c8fb21c156772cf (diff)
downloadgsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.tar
gsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.tar.gz
gsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.tar.bz2
gsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.tar.lz
gsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.tar.xz
gsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.tar.zst
gsoc2013-evolution-a06e4484b8df804124b5bcf88d94dec5acfba270.zip
Give MailSession a permanent home.
Global variables in shared libraries are a bad idea. EMailBackend now owns the MailSession instance, which is actually now EMailSession. Move the blocking utility functions in mail-tools.c to e-mail-session.c and add asynchronous variants. Same approach as Camel. Replace EMailReader.get_shell_backend() with EMailReader.get_backend(), which returns an EMailBackend. Easier access to the EMailSession.
Diffstat (limited to 'mail/em-utils.c')
-rw-r--r--mail/em-utils.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 971d74f892..ab85007787 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -74,7 +74,7 @@
#include "em-composer-utils.h"
#include "em-format-quote.h"
#include "e-mail-local.h"
-#include "mail-session.h"
+#include "e-mail-session.h"
/* XXX This is a dirty hack on a dirty hack. We really need
* to rework or get rid of the functions that use this. */
@@ -266,18 +266,22 @@ static EMFilterSource em_filter_source_element_names[] = {
/**
* em_utils_edit_filters:
* @parent: parent window
+ * @session: an #EMailSession
*
* Opens or raises the filters editor dialog so that the user may edit
* his/her filters. If @parent is non-NULL, then the dialog will be
* created as a child window of @parent's toplevel window.
**/
void
-em_utils_edit_filters (GtkWidget *parent)
+em_utils_edit_filters (GtkWidget *parent,
+ EMailSession *session)
{
const gchar *config_dir;
gchar *user, *system;
EMFilterContext *fc;
+ g_return_if_fail (E_IS_MAIL_SESSION (session));
+
if (filter_editor) {
gtk_window_present (GTK_WINDOW (filter_editor));
return;
@@ -285,7 +289,7 @@ em_utils_edit_filters (GtkWidget *parent)
config_dir = mail_session_get_config_dir ();
- fc = em_filter_context_new ();
+ fc = em_filter_context_new (session);
user = g_build_filename (config_dir, "filters.xml", NULL);
system = g_build_filename (EVOLUTION_PRIVDATADIR, "filtertypes.xml", NULL);
e_rule_context_load ((ERuleContext *) fc, system, user);
@@ -366,6 +370,7 @@ em_utils_flag_for_followup (EMailReader *reader,
GPtrArray *uids)
{
EShell *shell;
+ EMailBackend *backend;
EShellSettings *shell_settings;
EShellBackend *shell_backend;
EMFormatHTML *formatter;
@@ -378,11 +383,13 @@ em_utils_flag_for_followup (EMailReader *reader,
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
- editor = e_mail_tag_editor_new ();
window = e_mail_reader_get_window (reader);
+ backend = e_mail_reader_get_backend (reader);
+
+ editor = e_mail_tag_editor_new ();
gtk_window_set_transient_for (GTK_WINDOW (editor), window);
- shell_backend = e_mail_reader_get_shell_backend (reader);
+ shell_backend = E_SHELL_BACKEND (backend);
shell = e_shell_backend_get_shell (shell_backend);
shell_settings = e_shell_get_shell_settings (shell);
@@ -759,6 +766,7 @@ em_utils_selection_set_uidlist (GtkSelectionData *selection_data,
/**
* em_utils_selection_get_uidlist:
* @data: selection data
+ * @session: an #EMailSession
* @move: do we delete the messages.
*
* Convert a uid list into a copy/move operation.
@@ -767,6 +775,7 @@ em_utils_selection_set_uidlist (GtkSelectionData *selection_data,
**/
void
em_utils_selection_get_uidlist (GtkSelectionData *selection_data,
+ EMailSession *session,
CamelFolder *dest,
gint move,
GCancellable *cancellable,
@@ -780,6 +789,7 @@ em_utils_selection_get_uidlist (GtkSelectionData *selection_data,
gint length;
g_return_if_fail (selection_data != NULL);
+ g_return_if_fail (E_IS_MAIL_SESSION (session));
data = gtk_selection_data_get_data (selection_data);
length = gtk_selection_data_get_length (selection_data);
@@ -808,9 +818,9 @@ em_utils_selection_get_uidlist (GtkSelectionData *selection_data,
return;
}
- /* FIXME mail_tool_uri_to_folder() may block. */
- folder = mail_tool_uri_to_folder (
- (gchar *) data, 0, cancellable, error);
+ /* FIXME e_mail_session_uri_to_folder_sync() may block. */
+ folder = e_mail_session_uri_to_folder_sync (
+ session, (gchar *) data, 0, cancellable, error);
if (folder) {
/* FIXME camel_folder_transfer_messages_to_sync() may block. */
camel_folder_transfer_messages_to_sync (
@@ -1274,17 +1284,21 @@ em_utils_expunge_folder (GtkWidget *parent, CamelFolder *folder)
/**
* em_utils_empty_trash:
* @parent: parent window
+ * @session: an #EMailSession
*
* Empties all Trash folders.
**/
void
-em_utils_empty_trash (GtkWidget *parent)
+em_utils_empty_trash (GtkWidget *parent,
+ EMailSession *session)
{
CamelProvider *provider;
EAccountList *accounts;
EAccount *account;
EIterator *iter;
+ g_return_if_fail (E_IS_MAIL_SESSION (session));
+
if (!em_utils_prompt_user((GtkWindow *) parent, "/apps/evolution/mail/prompts/empty_trash", "mail:ask-empty-trash", NULL))
return;
@@ -1299,7 +1313,7 @@ em_utils_empty_trash (GtkWidget *parent)
if (provider) {
/* make sure this store is a remote store */
if (provider->flags & CAMEL_PROVIDER_IS_STORAGE) {
- mail_empty_trash (account, NULL, NULL);
+ mail_empty_trash (session, account, NULL, NULL);
}
}
}
@@ -1310,7 +1324,7 @@ em_utils_empty_trash (GtkWidget *parent)
g_object_unref (iter);
/* Now empty the local trash folder */
- mail_empty_trash (NULL, NULL, NULL);
+ mail_empty_trash (session, NULL, NULL, NULL);
}
gchar *