aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--calendar/gui/dialogs/event-page.c36
-rw-r--r--calendar/gui/dialogs/memo-page.c19
-rw-r--r--calendar/gui/dialogs/task-page.c24
-rw-r--r--calendar/gui/e-cal-model.c10
-rw-r--r--calendar/gui/e-meeting-store.c6
-rw-r--r--calendar/gui/itip-utils.c19
-rw-r--r--capplet/anjal-settings-main.c2
-rw-r--r--capplet/settings/Makefile.am2
-rw-r--r--capplet/settings/anjal-mail-view.c2
-rw-r--r--capplet/settings/mail-capplet-shell.c4
-rw-r--r--capplet/settings/mail-settings-view.c6
-rw-r--r--capplet/settings/mail-view.c2
-rw-r--r--composer/Makefile.am1
-rw-r--r--composer/e-composer-header-table.h4
-rw-r--r--composer/e-msg-composer.c14
-rw-r--r--configure.ac4
-rw-r--r--e-util/Makefile.am8
-rw-r--r--e-util/e-marshal.list3
-rw-r--r--evolution-mail.pc.in2
-rw-r--r--libemail-engine/Makefile.am71
-rw-r--r--libemail-engine/e-mail-enums.h (renamed from mail/e-mail-enums.h)0
-rw-r--r--libemail-engine/e-mail-folder-utils.c (renamed from mail/e-mail-folder-utils.c)2
-rw-r--r--libemail-engine/e-mail-folder-utils.h (renamed from mail/e-mail-folder-utils.h)0
-rw-r--r--libemail-engine/e-mail-junk-filter.c (renamed from mail/e-mail-junk-filter.c)2
-rw-r--r--libemail-engine/e-mail-junk-filter.h (renamed from mail/e-mail-junk-filter.h)0
-rw-r--r--libemail-engine/e-mail-session-utils.c (renamed from mail/e-mail-session-utils.c)13
-rw-r--r--libemail-engine/e-mail-session-utils.h (renamed from mail/e-mail-session-utils.h)2
-rw-r--r--libemail-engine/e-mail-session.c (renamed from mail/e-mail-session.c)606
-rw-r--r--libemail-engine/e-mail-session.h (renamed from mail/e-mail-session.h)19
-rw-r--r--libemail-engine/e-mail-store-utils.c (renamed from mail/e-mail-store-utils.c)2
-rw-r--r--libemail-engine/e-mail-store-utils.h (renamed from mail/e-mail-store-utils.h)0
-rw-r--r--libemail-engine/e-mail-utils.c1062
-rw-r--r--libemail-engine/e-mail-utils.h56
-rw-r--r--libemail-engine/libemail-engine.pc.in15
-rw-r--r--libemail-engine/mail-config.c (renamed from mail/mail-config.c)5
-rw-r--r--libemail-engine/mail-config.h (renamed from mail/mail-config.h)2
-rw-r--r--libemail-engine/mail-folder-cache.c (renamed from mail/mail-folder-cache.c)196
-rw-r--r--libemail-engine/mail-folder-cache.h (renamed from mail/mail-folder-cache.h)12
-rw-r--r--libemail-engine/mail-ops.c (renamed from mail/mail-ops.c)17
-rw-r--r--libemail-engine/mail-ops.h (renamed from mail/mail-ops.h)5
-rw-r--r--libemail-engine/mail-tools.c (renamed from mail/mail-tools.c)1
-rw-r--r--libemail-engine/mail-tools.h (renamed from mail/mail-tools.h)0
-rw-r--r--libemail-utils/Makefile.am44
-rw-r--r--libemail-utils/e-account-utils.c (renamed from e-util/e-account-utils.c)0
-rw-r--r--libemail-utils/e-account-utils.h (renamed from e-util/e-account-utils.h)0
-rw-r--r--libemail-utils/e-signature-list.c (renamed from e-util/e-signature-list.c)0
-rw-r--r--libemail-utils/e-signature-list.h (renamed from e-util/e-signature-list.h)2
-rw-r--r--libemail-utils/e-signature-utils.c (renamed from e-util/e-signature-utils.c)2
-rw-r--r--libemail-utils/e-signature-utils.h (renamed from e-util/e-signature-utils.h)4
-rw-r--r--libemail-utils/e-signature.c (renamed from e-util/e-signature.c)0
-rw-r--r--libemail-utils/e-signature.h (renamed from e-util/e-signature.h)0
-rw-r--r--libemail-utils/libemail-utils.pc.in15
-rw-r--r--libemail-utils/mail-mt.c (renamed from mail/mail-mt.c)139
-rw-r--r--libemail-utils/mail-mt.h (renamed from mail/mail-mt.h)17
-rw-r--r--mail/Makefile.am37
-rw-r--r--mail/e-mail-account-manager.c2
-rw-r--r--mail/e-mail-account-manager.h2
-rw-r--r--mail/e-mail-account-store.c39
-rw-r--r--mail/e-mail-backend.c193
-rw-r--r--mail/e-mail-backend.h2
-rw-r--r--mail/e-mail-folder-pane.c6
-rw-r--r--mail/e-mail-junk-options.c2
-rw-r--r--mail/e-mail-junk-options.h2
-rw-r--r--mail/e-mail-migrate.c21
-rw-r--r--mail/e-mail-notebook-view.c2
-rw-r--r--mail/e-mail-paned-view.c8
-rw-r--r--mail/e-mail-reader-utils.c8
-rw-r--r--mail/e-mail-reader.c11
-rw-r--r--mail/e-mail-sidebar.h2
-rw-r--r--mail/e-mail-ui-session.c904
-rw-r--r--mail/e-mail-ui-session.h93
-rw-r--r--mail/e-mail.h4
-rw-r--r--mail/em-account-editor.c42
-rw-r--r--mail/em-composer-utils.c33
-rw-r--r--mail/em-composer-utils.h2
-rw-r--r--mail/em-filter-context.h2
-rw-r--r--mail/em-filter-folder-element.h2
-rw-r--r--mail/em-filter-source-element.c2
-rw-r--r--mail/em-filter-source-element.h2
-rw-r--r--mail/em-folder-properties.c16
-rw-r--r--mail/em-folder-properties.h3
-rw-r--r--mail/em-folder-selection-button.c3
-rw-r--r--mail/em-folder-selection-button.h2
-rw-r--r--mail/em-folder-selector.c3
-rw-r--r--mail/em-folder-tree-model.c28
-rw-r--r--mail/em-folder-tree-model.h2
-rw-r--r--mail/em-folder-tree.c20
-rw-r--r--mail/em-folder-tree.h3
-rw-r--r--mail/em-folder-utils.c23
-rw-r--r--mail/em-folder-utils.h2
-rw-r--r--mail/em-format-html-print.c8
-rw-r--r--mail/em-format-html.c9
-rw-r--r--mail/em-format-html.h2
-rw-r--r--mail/em-subscription-editor.c8
-rw-r--r--mail/em-subscription-editor.h2
-rw-r--r--mail/em-sync-stream.c2
-rw-r--r--mail/em-utils.c1020
-rw-r--r--mail/em-utils.h29
-rw-r--r--mail/em-vfolder-context.h2
-rw-r--r--mail/em-vfolder-rule.c20
-rw-r--r--mail/em-vfolder-rule.h2
-rw-r--r--mail/importers/Makefile.am2
-rw-r--r--mail/importers/elm-importer.c2
-rw-r--r--mail/importers/evolution-mbox-importer.c2
-rw-r--r--mail/importers/mail-importer.c10
-rw-r--r--mail/importers/mail-importer.h2
-rw-r--r--mail/importers/pine-importer.c2
-rw-r--r--mail/mail-autofilter.c5
-rw-r--r--mail/mail-autofilter.h2
-rw-r--r--mail/mail-send-recv.c26
-rw-r--r--mail/mail-send-recv.h2
-rw-r--r--mail/mail-vfolder.c17
-rw-r--r--mail/message-list.c27
-rw-r--r--mail/message-list.h2
-rw-r--r--modules/bogofilter/Makefile.am2
-rw-r--r--modules/bogofilter/evolution-bogofilter.c2
-rw-r--r--modules/calendar/Makefile.am1
-rw-r--r--modules/calendar/e-cal-shell-view-private.h54
-rw-r--r--modules/calendar/e-memo-shell-migrate.c7
-rw-r--r--modules/mail/Makefile.am3
-rw-r--r--modules/mail/e-mail-shell-backend.c56
-rw-r--r--modules/mail/e-mail-shell-content.c32
-rw-r--r--modules/mail/e-mail-shell-view-actions.c14
-rw-r--r--modules/mail/e-mail-shell-view-private.c3
-rw-r--r--modules/mail/e-mail-shell-view-private.h69
-rw-r--r--modules/mail/e-mail-shell-view.c2
-rw-r--r--modules/mail/em-account-prefs.c25
-rw-r--r--modules/mail/em-composer-prefs.c21
-rw-r--r--modules/mail/em-network-prefs.c17
-rw-r--r--modules/mdn/evolution-mdn.c6
-rw-r--r--modules/online-accounts/Makefile.am1
-rw-r--r--modules/online-accounts/camel-sasl-xoauth.c6
-rw-r--r--modules/online-accounts/e-online-accounts-google.c2
-rw-r--r--modules/online-accounts/evolution-online-accounts.c3
-rw-r--r--modules/spamassassin/Makefile.am2
-rw-r--r--modules/spamassassin/evolution-spamassassin.c2
-rw-r--r--modules/startup-wizard/Makefile.am2
-rw-r--r--modules/startup-wizard/evolution-startup-wizard.c6
-rw-r--r--plugins/caldav/Makefile.am1
-rw-r--r--plugins/caldav/caldav-browse-server.c3
-rw-r--r--plugins/dbx-import/Makefile.am2
-rw-r--r--plugins/dbx-import/dbx-importer.c7
-rw-r--r--plugins/imap-features/imap-headers.c9
-rw-r--r--plugins/itip-formatter/Makefile.am2
-rw-r--r--plugins/itip-formatter/itip-formatter.c29
-rw-r--r--plugins/mail-notification/Makefile.am1
-rw-r--r--plugins/mail-notification/mail-notification.c2
-rw-r--r--plugins/mail-to-task/Makefile.am1
-rw-r--r--plugins/mail-to-task/mail-to-task.c23
-rw-r--r--plugins/mailing-list-actions/Makefile.am2
-rw-r--r--plugins/mailing-list-actions/mailing-list-actions.c39
-rw-r--r--plugins/mark-all-read/mark-all-read.c3
-rw-r--r--plugins/pst-import/pst-importer.c5
-rw-r--r--plugins/templates/Makefile.am1
-rw-r--r--plugins/templates/templates.c16
-rw-r--r--po/POTFILES.in21
-rw-r--r--shell/Makefile.am2
-rw-r--r--smime/lib/Makefile.am1
-rw-r--r--widgets/misc/Makefile.am1
-rw-r--r--widgets/misc/e-signature-combo-box.h4
-rw-r--r--widgets/misc/e-signature-editor.c2
-rw-r--r--widgets/misc/e-signature-editor.h2
-rw-r--r--widgets/misc/e-signature-manager.h2
-rw-r--r--widgets/misc/e-signature-preview.c3
-rw-r--r--widgets/misc/e-signature-preview.h2
-rw-r--r--widgets/misc/e-signature-tree-view.h4
-rw-r--r--widgets/table/Makefile.am1
-rw-r--r--widgets/text/Makefile.am1
169 files changed, 3419 insertions, 2325 deletions
diff --git a/Makefile.am b/Makefile.am
index a5e0d9f767..d1f0d19a46 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -53,6 +53,8 @@ SUBDIRS = \
data \
smclient \
libgnomecanvas \
+ libemail-utils \
+ libemail-engine \
e-util \
a11y \
filter \
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index c8c208e1b3..a5c0ac6355 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -34,31 +34,35 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
+
+#include <libecal/e-cal-time-util.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
-#include "misc/e-dateedit.h"
-#include "misc/e-send-options.h"
-#include "misc/e-buffer-tagger.h"
-#include <libecal/e-cal-time-util.h>
-#include "../e-timezone-entry.h"
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-categories-config.h"
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-dialog-widgets.h"
-#include "e-util/e-util-private.h"
+#include <e-util/e-util.h>
+#include <e-util/e-categories-config.h>
+#include <e-util/e-dialog-utils.h>
+#include <e-util/e-dialog-widgets.h>
+#include <e-util/e-util-private.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <misc/e-dateedit.h>
+#include <misc/e-send-options.h>
+#include <misc/e-buffer-tagger.h>
+
+#include "../e-alarm-list.h"
#include "../e-meeting-attendee.h"
-#include "../e-meeting-store.h"
#include "../e-meeting-list-view.h"
-#include "comp-editor.h"
-#include "comp-editor-util.h"
-#include "../e-alarm-list.h"
+#include "../e-meeting-store.h"
+#include "../e-timezone-entry.h"
+
#include "alarm-list-dialog.h"
-#include "event-page.h"
+#include "comp-editor-util.h"
+#include "comp-editor.h"
#include "e-send-options-utils.h"
+#include "event-page.h"
#define EVENT_PAGE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index 9bee45c062..bf60445001 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -33,20 +33,23 @@
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
#include <libedataserverui/e-name-selector.h>
#include <libedataserverui/e-name-selector-entry.h>
#include <libedataserverui/e-name-selector-list.h>
-#include <widgets/misc/e-dateedit.h>
-#include "misc/e-buffer-tagger.h"
-
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-categories-config.h"
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-util-private.h"
+
+#include <e-util/e-util.h>
+#include <e-util/e-categories-config.h>
+#include <e-util/e-dialog-utils.h>
+#include <e-util/e-util-private.h>
+
+#include <misc/e-dateedit.h>
+#include <misc/e-buffer-tagger.h>
+
+#include <libemail-utils/e-account-utils.h>
#include "../calendar-config.h"
#include "comp-editor.h"
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index 08cb6f45ea..2033a46ff2 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -33,27 +33,31 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
+
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
+
#include <misc/e-dateedit.h>
-#include "misc/e-buffer-tagger.h"
+#include <misc/e-buffer-tagger.h>
+
+#include <e-util/e-categories-config.h>
#include <e-util/e-dialog-utils.h>
+#include <e-util/e-util-private.h>
+#include <e-util/e-util.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include "../e-meeting-attendee.h"
+#include "../e-meeting-list-view.h"
+#include "../e-meeting-store.h"
#include "../e-timezone-entry.h"
+
#include "comp-editor.h"
#include "comp-editor-util.h"
#include "e-send-options-utils.h"
#include "task-page.h"
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-categories-config.h"
-#include "e-util/e-util-private.h"
-
-#include "../e-meeting-attendee.h"
-#include "../e-meeting-store.h"
-#include "../e-meeting-list-view.h"
-
#define TASK_PAGE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), TYPE_TASK_PAGE, TaskPagePrivate))
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index c1ff096208..7344e87916 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -28,18 +28,22 @@
#include <string.h>
#include <glib/gi18n.h>
+
#include <libebackend/e-extensible.h>
#include <libedataserver/e-flag.h>
#include <libedataserver/e-time-utils.h>
#include <libecal/e-cal-client-view.h>
#include <libecal/e-cal-time-util.h>
+
+#include <e-util/e-util.h>
+#include <e-util/e-util-enumtypes.h>
+
+#include <libemail-utils/e-account-utils.h>
+
#include "comp-util.h"
#include "e-cal-model.h"
#include "itip-utils.h"
#include "misc.h"
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-util-enumtypes.h"
struct _ECalModelComponentPrivate {
GString *categories_str;
diff --git a/calendar/gui/e-meeting-store.c b/calendar/gui/e-meeting-store.c
index 833c6a821e..e11d90e7bb 100644
--- a/calendar/gui/e-meeting-store.c
+++ b/calendar/gui/e-meeting-store.c
@@ -28,6 +28,7 @@
#include <gio/gio.h>
#include <glib/gi18n.h>
#include <libsoup/soup.h>
+
#include <libecal/e-cal-component.h>
#include <libecal/e-cal-util.h>
#include <libecal/e-cal-time-util.h>
@@ -35,8 +36,11 @@
#include <libedataserver/e-data-server-util.h>
#include <libedataserver/e-proxy.h>
#include <libedataserverui/e-passwords.h>
-#include <e-util/e-account-utils.h>
+
#include <e-util/e-util-enumtypes.h>
+
+#include <libemail-utils/e-account-utils.h>
+
#include "itip-utils.h"
#include "e-meeting-utils.h"
#include "e-meeting-attendee.h"
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c
index 4b2a8d262d..e58f2f9c7e 100644
--- a/calendar/gui/itip-utils.c
+++ b/calendar/gui/itip-utils.c
@@ -24,21 +24,24 @@
#include <config.h>
#endif
+#include <time.h>
#include <glib/gi18n.h>
-#include <libedataserver/e-time-utils.h>
-#include <gtk/gtk.h>
#include <libical/ical.h>
-#include <e-util/e-account-utils.h>
-#include <e-util/e-dialog-utils.h>
+#include <libsoup/soup.h>
+
#include <libecal/e-cal-time-util.h>
#include <libecal/e-cal-util.h>
-#include <libsoup/soup.h>
-#include "itip-utils.h"
-#include <time.h>
-#include "dialogs/comp-editor-util.h"
+#include <libedataserver/e-time-utils.h>
+
+#include <e-util/e-dialog-utils.h>
+
+#include <libemail-utils/e-account-utils.h>
#include <composer/e-msg-composer.h>
+#include "itip-utils.h"
+#include "dialogs/comp-editor-util.h"
+
#define d(x)
static const gchar *itip_methods[] = {
diff --git a/capplet/anjal-settings-main.c b/capplet/anjal-settings-main.c
index 7efddcffbf..c04722e42f 100644
--- a/capplet/anjal-settings-main.c
+++ b/capplet/anjal-settings-main.c
@@ -36,7 +36,7 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <libedataserverui/e-passwords.h>
-#include <mail/mail-mt.h>
+#include <libemail-utils/mail-mt.h>
#include "settings/mail-capplet-shell.h"
#include <libedataserver/e-categories.h>
diff --git a/capplet/settings/Makefile.am b/capplet/settings/Makefile.am
index 1367fd5a75..db899e0f6c 100644
--- a/capplet/settings/Makefile.am
+++ b/capplet/settings/Makefile.am
@@ -59,6 +59,8 @@ libevolution_mail_settings_la_LIBADD = \
$(top_builddir)/filter/libfilter.la \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/shell/libeshell.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
$(top_builddir)/e-util/libeutil.la
libevolution_mail_settings_la_LDFLAGS = $(NO_UNDEFINED)
diff --git a/capplet/settings/anjal-mail-view.c b/capplet/settings/anjal-mail-view.c
index c0926536cb..232b8ff118 100644
--- a/capplet/settings/anjal-mail-view.c
+++ b/capplet/settings/anjal-mail-view.c
@@ -28,7 +28,7 @@
#include <glib/gi18n.h>
#include "mail/em-utils.h"
#include "mail/mail-send-recv.h"
-#include "mail/mail-ops.h"
+#include "libemail-engine/mail-ops.h"
#include "mail/em-folder-tree.h"
struct _AnjalMailViewPrivate {
diff --git a/capplet/settings/mail-capplet-shell.c b/capplet/settings/mail-capplet-shell.c
index 707efe3f35..3d3e015e94 100644
--- a/capplet/settings/mail-capplet-shell.c
+++ b/capplet/settings/mail-capplet-shell.c
@@ -38,8 +38,8 @@
#include <mail/em-utils.h>
#include <mail/em-composer-utils.h>
-#include <mail/mail-config.h>
-#include <mail/mail-mt.h>
+#include <libemail-engine/mail-config.h>
+#include <libemail-utils/mail-mt.h>
#include <shell/e-shell.h>
diff --git a/capplet/settings/mail-settings-view.c b/capplet/settings/mail-settings-view.c
index a699dca9ea..992f705826 100644
--- a/capplet/settings/mail-settings-view.c
+++ b/capplet/settings/mail-settings-view.c
@@ -25,10 +25,12 @@
#endif
#include <glib/gi18n.h>
-#include "mail-settings-view.h"
#include <libedataserver/e-account-list.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include "mail-settings-view.h"
#include "mail-view.h"
-#include <e-util/e-account-utils.h>
struct _MailSettingsViewPrivate {
GtkWidget *tab_str;
diff --git a/capplet/settings/mail-view.c b/capplet/settings/mail-view.c
index 53daf3fd08..4477be517a 100644
--- a/capplet/settings/mail-view.c
+++ b/capplet/settings/mail-view.c
@@ -27,7 +27,7 @@
#include <glib/gi18n.h>
#include "mail/em-utils.h"
#include "mail/mail-send-recv.h"
-#include "mail/mail-ops.h"
+#include "libemail-engine/mail-ops.h"
#include "mail-view.h"
#ifndef ANJAL_SETTINGS
#include "mail-folder-view.h"
diff --git a/composer/Makefile.am b/composer/Makefile.am
index 013d04c8bd..cee00a002b 100644
--- a/composer/Makefile.am
+++ b/composer/Makefile.am
@@ -63,6 +63,7 @@ libcomposer_la_LIBADD = \
$(top_builddir)/em-format/libemformat.la \
$(top_builddir)/addressbook/gui/contact-editor/libecontacteditor.la \
$(top_builddir)/addressbook/gui/contact-list-editor/libecontactlisteditor.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/composer/e-composer-header-table.h b/composer/e-composer-header-table.h
index f7edec0b14..9d6a83fb9a 100644
--- a/composer/e-composer-header-table.h
+++ b/composer/e-composer-header-table.h
@@ -23,9 +23,9 @@
#include <libebook/e-destination.h>
#include <shell/e-shell.h>
-#include <e-util/e-signature.h>
-#include <e-util/e-signature-list.h>
#include <composer/e-composer-header.h>
+#include <libemail-utils/e-signature.h>
+#include <libemail-utils/e-signature-list.h>
/* Standard GObject macros */
#define E_TYPE_COMPOSER_HEADER_TABLE \
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index a7250a7d7d..6a48950912 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -37,13 +37,13 @@
#include <ctype.h>
#include <fcntl.h>
-#include "e-util/e-account-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-signature-utils.h"
-#include "e-util/e-util-private.h"
-#include "em-format/em-format.h"
-#include "em-format/em-format-quote.h"
+#include <e-util/e-alert-dialog.h>
+#include <e-util/e-dialog-utils.h>
+#include <e-util/e-util-private.h>
+#include <em-format/em-format.h>
+#include <em-format/em-format-quote.h>
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/e-signature-utils.h>
#include "e-composer-private.h"
diff --git a/configure.ac b/configure.ac
index 8d5fbb4417..102244810a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1618,6 +1618,10 @@ help/quickref/pl/Makefile
help/quickref/pt/Makefile
help/quickref/sv/Makefile
help/quickref/sq/Makefile
+libemail-utils/Makefile
+libemail-utils/libemail-utils.pc
+libemail-engine/Makefile
+libemail-engine/libemail-engine.pc
libgnomecanvas/Makefile
shell/Makefile
shell/evolution-nognome
diff --git a/e-util/Makefile.am b/e-util/Makefile.am
index 8ef95f1841..41a99316ef 100644
--- a/e-util/Makefile.am
+++ b/e-util/Makefile.am
@@ -18,7 +18,6 @@ endif
privsolib_LTLIBRARIES = libeutil.la
eutilinclude_HEADERS = \
- e-account-utils.h \
e-activity.h \
e-alert.h \
e-alert-dialog.h \
@@ -43,9 +42,6 @@ eutilinclude_HEADERS = \
e-plugin-ui.h \
e-plugin-util.h \
e-selection.h \
- e-signature.h \
- e-signature-list.h \
- e-signature-utils.h \
e-sorter.h \
e-sorter-array.h \
e-text-event-processor-emacs-like.h \
@@ -89,7 +85,6 @@ libeutil_la_CPPFLAGS = \
libeutil_la_SOURCES = \
$(eutilinclude_HEADERS) \
- e-account-utils.c \
e-activity.c \
e-alert.c \
e-alert-dialog.c \
@@ -114,9 +109,6 @@ libeutil_la_SOURCES = \
e-plugin-util.c \
e-print.c \
e-selection.c \
- e-signature.c \
- e-signature-list.c \
- e-signature-utils.c \
e-sorter.c \
e-sorter-array.c \
e-text-event-processor-emacs-like.c \
diff --git a/e-util/e-marshal.list b/e-util/e-marshal.list
index 6d3c1fcdb0..bf15633ab8 100644
--- a/e-util/e-marshal.list
+++ b/e-util/e-marshal.list
@@ -42,9 +42,6 @@ NONE:OBJECT,BOOLEAN
NONE:OBJECT,DOUBLE,DOUBLE,BOOLEAN
NONE:OBJECT,OBJECT
NONE:OBJECT,STRING
-NONE:OBJECT,STRING,INT
-NONE:OBJECT,STRING,INT,STRING,STRING,STRING
-NONE:OBJECT,STRING,STRING
NONE:OBJECT,STRING,UINT
NONE:POINTER,INT
NONE:POINTER,INT,INT,INT,INT
diff --git a/evolution-mail.pc.in b/evolution-mail.pc.in
index 782177052f..e2bdf78139 100644
--- a/evolution-mail.pc.in
+++ b/evolution-mail.pc.in
@@ -12,6 +12,6 @@ privincludedir=@privincludedir@
Name: Evolution Mail
Description: Mail utilities for Evolution
Version: @VERSION@
-Requires: evolution-shell-3.0 camel-1.2
+Requires: evolution-shell-3.0 camel-1.2 libemail-engine
Libs: -L${privlibdir} -levolution-mail -lcomposer
Cflags: -I${privincludedir}
diff --git a/libemail-engine/Makefile.am b/libemail-engine/Makefile.am
new file mode 100644
index 0000000000..88a0227aab
--- /dev/null
+++ b/libemail-engine/Makefile.am
@@ -0,0 +1,71 @@
+NULL =
+
+lib_LTLIBRARIES = libemail-engine.la
+
+include $(top_srcdir)/glib-gen.mak
+glib_enum_headers=e-mail-enums.h
+glib_enum_output=e-mail-enumtypes
+glib_enum_define=E_MAIL
+glib_enum_prefix=e_mail
+
+ENUM_GENERATED = e-mail-enumtypes.h e-mail-enumtypes.c
+
+libemail_engine_la_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ $(EVOLUTION_DATA_SERVER_CFLAGS) \
+ $(GNOME_PLATFORM_CFLAGS) \
+ $(NULL)
+
+libmailengineincludedir = $(privincludedir)/libemail-engine
+libmailengineinclude_HEADERS = \
+ e-mail-enums.h \
+ e-mail-enumtypes.h \
+ e-mail-folder-utils.h \
+ e-mail-junk-filter.h \
+ e-mail-session-utils.h \
+ e-mail-session.h \
+ e-mail-store-utils.h \
+ e-mail-utils.h \
+ mail-config.h \
+ mail-folder-cache.h \
+ mail-ops.h \
+ mail-tools.h \
+ $(NULL)
+
+libemail_engine_la_SOURCES = \
+ $(libmailengineinclude_HEADERS) \
+ e-mail-enumtypes.c \
+ e-mail-folder-utils.c \
+ e-mail-junk-filter.c \
+ e-mail-session-utils.c \
+ e-mail-session.c \
+ e-mail-store-utils.c \
+ e-mail-utils.c \
+ mail-config.c \
+ mail-folder-cache.c \
+ mail-ops.c \
+ mail-tools.c \
+ $(NULL)
+
+libemail_engine_la_LIBADD = \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
+ $(EVOLUTION_DATA_SERVER_LIBS) \
+ $(GNOME_PLATFORM_LIBS) \
+ $(NULL)
+
+libemail_engine_la_LDFLAGS = $(NO_UNDEFINED)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libemail-engine.pc
+
+BUILT_SOURCES = $(ENUM_GENERATED)
+
+CLEANFILES = $(BUILT_SOURCES)
+DISTCLEANFILES = $(pkgconfig_DATA)
+
+dist-hook:
+ cd $(distdir); rm -f $(BUILT_SOURCES)
+
+-include $(top_srcdir)/git.mk
diff --git a/mail/e-mail-enums.h b/libemail-engine/e-mail-enums.h
index e0ad3ad86f..e0ad3ad86f 100644
--- a/mail/e-mail-enums.h
+++ b/libemail-engine/e-mail-enums.h
diff --git a/mail/e-mail-folder-utils.c b/libemail-engine/e-mail-folder-utils.c
index fe093adb21..25754f4f96 100644
--- a/mail/e-mail-folder-utils.c
+++ b/libemail-engine/e-mail-folder-utils.c
@@ -24,7 +24,7 @@
#include <glib/gi18n-lib.h>
-#include "mail/mail-tools.h"
+#include <libemail-engine/mail-tools.h>
/* X-Mailer header value */
#define X_MAILER ("Evolution " VERSION SUB_VERSION " " VERSION_COMMENT)
diff --git a/mail/e-mail-folder-utils.h b/libemail-engine/e-mail-folder-utils.h
index 9e8dd0f050..9e8dd0f050 100644
--- a/mail/e-mail-folder-utils.h
+++ b/libemail-engine/e-mail-folder-utils.h
diff --git a/mail/e-mail-junk-filter.c b/libemail-engine/e-mail-junk-filter.c
index 71128013ad..fda8efb163 100644
--- a/mail/e-mail-junk-filter.c
+++ b/libemail-engine/e-mail-junk-filter.c
@@ -18,7 +18,7 @@
#include "e-mail-junk-filter.h"
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
G_DEFINE_ABSTRACT_TYPE (
EMailJunkFilter,
diff --git a/mail/e-mail-junk-filter.h b/libemail-engine/e-mail-junk-filter.h
index 74a7840c2d..74a7840c2d 100644
--- a/mail/e-mail-junk-filter.h
+++ b/libemail-engine/e-mail-junk-filter.h
diff --git a/mail/e-mail-session-utils.c b/libemail-engine/e-mail-session-utils.c
index f1c27a3425..979d15388e 100644
--- a/mail/e-mail-session-utils.c
+++ b/libemail-engine/e-mail-session-utils.c
@@ -22,18 +22,19 @@
#include "e-mail-session-utils.h"
-#include "em-utils.h"
-
#include <glib/gi18n-lib.h>
-#include <mail/mail-tools.h>
-#include <mail/e-mail-folder-utils.h>
-#include <e-util/e-account-utils.h>
-#include <filter/e-filter-rule.h>
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-utils.h>
+#include <libemail-engine/mail-tools.h>
+#include <libemail-utils/e-account-utils.h>
/* X-Mailer header value */
#define X_MAILER ("Evolution " VERSION SUB_VERSION " " VERSION_COMMENT)
+/* FIXME: Temporary - remove this after we move filter/ to eds */
+#define E_FILTER_SOURCE_OUTGOING "outgoing"
+
typedef struct _AsyncContext AsyncContext;
struct _AsyncContext {
diff --git a/mail/e-mail-session-utils.h b/libemail-engine/e-mail-session-utils.h
index b398be5f84..2c92216533 100644
--- a/mail/e-mail-session-utils.h
+++ b/libemail-engine/e-mail-session-utils.h
@@ -21,7 +21,7 @@
/* High-level operations with Evolution-specific policies. */
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
#define E_MAIL_ERROR (e_mail_error_quark ())
diff --git a/mail/e-mail-session.c b/libemail-engine/e-mail-session.c
index 57c800cb91..012ad9ba7d 100644
--- a/mail/e-mail-session.c
+++ b/libemail-engine/e-mail-session.c
@@ -46,29 +46,17 @@
#include <libedataserver/e-proxy.h>
#include <libebackend/e-extensible.h>
#include <libedataserverui/e-passwords.h>
+#include <libedataserver/e-data-server-util.h>
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-util-private.h"
+#include "libemail-utils/e-account-utils.h"
+#include "libemail-utils/mail-mt.h"
-#include "shell/e-shell.h"
-#include "shell/e-shell-view.h"
-#include "shell/e-shell-content.h"
-#include "shell/e-shell-window.h"
-
-#include "e-mail-account-store.h"
-#include "e-mail-folder-utils.h"
#include "e-mail-junk-filter.h"
#include "e-mail-session.h"
-#include "em-composer-utils.h"
-#include "em-filter-context.h"
-#include "em-filter-rule.h"
-#include "em-utils.h"
+#include "e-mail-folder-utils.h"
+#include "e-mail-utils.h"
#include "mail-config.h"
-#include "mail-mt.h"
#include "mail-ops.h"
-#include "mail-send-recv.h"
#include "mail-tools.h"
#define E_MAIL_SESSION_GET_PRIVATE(obj) \
@@ -76,19 +64,14 @@
((obj), E_TYPE_MAIL_SESSION, EMailSessionPrivate))
typedef struct _AsyncContext AsyncContext;
-typedef struct _SourceContext SourceContext;
struct _EMailSessionPrivate {
- EMailAccountStore *account_store;
MailFolderCache *folder_cache;
- EMailLabelListStore *label_store;
EAccountList *account_list;
gulong account_added_handler_id;
- gulong account_changed_handler_id;
CamelStore *local_store;
- CamelStore *vfolder_store;
FILE *filter_logfile;
GHashTable *junk_filters;
@@ -109,28 +92,13 @@ struct _AsyncContext {
CamelFolder *folder;
};
-struct _SourceContext {
- EMailSession *session;
- CamelService *service;
-};
-
enum {
PROP_0,
- PROP_ACCOUNT_STORE,
PROP_FOLDER_CACHE,
PROP_JUNK_FILTER_NAME,
- PROP_LABEL_STORE,
- PROP_LOCAL_STORE,
- PROP_VFOLDER_STORE
+ PROP_LOCAL_STORE
};
-enum {
- ACTIVITY_ADDED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
static const gchar *local_folder_names[E_MAIL_NUM_LOCAL_FOLDERS] = {
N_("Inbox"), /* E_MAIL_LOCAL_FOLDER_INBOX */
N_("Drafts"), /* E_MAIL_LOCAL_FOLDER_DRAFTS */
@@ -140,14 +108,19 @@ static const gchar *local_folder_names[E_MAIL_NUM_LOCAL_FOLDERS] = {
"Inbox" /* E_MAIL_LOCAL_FOLDER_LOCAL_INBOX */
};
+enum {
+ FLUSH_OUTBOX,
+ STORE_ADDED,
+ STORE_REMOVED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
static gchar *mail_data_dir;
static gchar *mail_cache_dir;
static gchar *mail_config_dir;
-#if 0
-static MailMsgInfo ms_thread_info_dummy = { sizeof (MailMsg) };
-#endif
-
G_DEFINE_TYPE_WITH_CODE (
EMailSession,
e_mail_session,
@@ -156,7 +129,6 @@ G_DEFINE_TYPE_WITH_CODE (
/* Support for CamelSession.alert_user() *************************************/
-static gpointer user_message_dialog;
static GQueue user_message_queue = { NULL, NULL, 0 };
struct _user_message_msg {
@@ -176,21 +148,15 @@ static void user_message_exec (struct _user_message_msg *m,
GError **error);
static void
-user_message_response_free (GtkDialog *dialog,
- gint button)
+user_message_response_free (struct _user_message_msg *m)
{
- struct _user_message_msg *m = NULL;
-
- gtk_widget_destroy ((GtkWidget *) dialog);
-
- user_message_dialog = NULL;
/* check for pendings */
if (!g_queue_is_empty (&user_message_queue)) {
GCancellable *cancellable;
m = g_queue_pop_head (&user_message_queue);
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
user_message_exec (m, cancellable, &m->base.error);
mail_msg_unref (m);
}
@@ -198,17 +164,15 @@ user_message_response_free (GtkDialog *dialog,
/* clicked, send back the reply */
static void
-user_message_response (GtkDialog *dialog,
- gint button,
- struct _user_message_msg *m)
+user_message_response (struct _user_message_msg *m)
{
- /* if !m or !button_captions, then we've already replied */
- if (m && m->button_captions) {
- m->result = button;
+ /* if !allow_cancel, then we've already replied */
+ if (m->button_captions) {
+ m->result = TRUE; //If Accepted
e_flag_set (m->done);
}
- user_message_response_free (dialog, button);
+ user_message_response_free (m);
}
static void
@@ -216,127 +180,14 @@ user_message_exec (struct _user_message_msg *m,
GCancellable *cancellable,
GError **error)
{
- gboolean info_only;
- GtkWindow *parent;
- EShell *shell;
- const gchar *error_type;
- gint index;
- GSList *iter;
-
- info_only = g_slist_length (m->button_captions) <= 1;
-
- if (!m->ismain && user_message_dialog != NULL && !info_only) {
- g_queue_push_tail (&user_message_queue, mail_msg_ref (m));
- return;
- }
-
- switch (m->type) {
- case CAMEL_SESSION_ALERT_INFO:
- error_type = "mail:session-message-info";
- break;
- case CAMEL_SESSION_ALERT_WARNING:
- error_type = "mail:session-message-warning";
- break;
- case CAMEL_SESSION_ALERT_ERROR:
- error_type = "mail:session-message-error";
- break;
- default:
- error_type = NULL;
- g_return_if_reached ();
- }
-
- shell = e_shell_get_default ();
-
- /* try to find "mail" view to place the informational alert to */
- if (info_only) {
- GtkWindow *active_window;
- EShellWindow *shell_window;
- EShellView *shell_view;
- EShellContent *shell_content = NULL;
-
- /* check currently active window first, ... */
- active_window = e_shell_get_active_window (shell);
- if (active_window && E_IS_SHELL_WINDOW (active_window)) {
- if (E_IS_SHELL_WINDOW (active_window)) {
- shell_window = E_SHELL_WINDOW (active_window);
- shell_view = e_shell_window_peek_shell_view (shell_window, "mail");
- if (shell_view)
- shell_content = e_shell_view_get_shell_content (shell_view);
- }
- }
-
- if (!shell_content) {
- GList *list, *iter;
-
- list = gtk_application_get_windows (GTK_APPLICATION (shell));
-
- /* ...then iterate through all opened windows and pick one which has it */
- for (iter = list; iter != NULL && !shell_content; iter = g_list_next (iter)) {
- if (E_IS_SHELL_WINDOW (iter->data)) {
- shell_window = iter->data;
- shell_view = e_shell_window_peek_shell_view (shell_window, "mail");
- if (shell_view)
- shell_content = e_shell_view_get_shell_content (shell_view);
- }
- }
- }
-
- /* when no shell-content found, which might not happen, but just in case,
- process the information alert like usual, through an EAlertDialog machinery
- */
- if (shell_content) {
- e_alert_submit (E_ALERT_SINK (shell_content), error_type, m->prompt, NULL);
- return;
- } else if (!m->ismain && user_message_dialog != NULL) {
- g_queue_push_tail (&user_message_queue, mail_msg_ref (m));
- return;
- }
- }
-
- /* Pull in the active window from the shell to get a parent window */
- parent = e_shell_get_active_window (shell);
- user_message_dialog = e_alert_dialog_new_for_args (
- parent, error_type, m->prompt, NULL);
- g_object_set (user_message_dialog, "resizable", TRUE, NULL);
-
- if (m->button_captions) {
- GtkWidget *action_area;
- GList *children, *child;
-
- /* remove all default buttons and keep only those requested */
- action_area = gtk_dialog_get_action_area (GTK_DIALOG (user_message_dialog));
-
- children = gtk_container_get_children (GTK_CONTAINER (action_area));
- for (child = children; child != NULL; child = child->next) {
- gtk_container_remove (GTK_CONTAINER (action_area), child->data);
- }
-
- g_list_free (children);
- }
-
- for (index = 0, iter = m->button_captions; iter; index++, iter = iter->next) {
- gtk_dialog_add_button (GTK_DIALOG (user_message_dialog), iter->data, index);
- }
-
/* XXX This is a case where we need to be able to construct
* custom EAlerts without a predefined XML definition. */
if (m->ismain) {
- gint response;
-
- response = gtk_dialog_run (user_message_dialog);
- user_message_response (
- user_message_dialog, response, m);
- } else {
- gpointer user_data = m;
-
- if (g_slist_length (m->button_captions) <= 1)
- user_data = NULL;
-
- g_signal_connect (
- user_message_dialog, "response",
- G_CALLBACK (user_message_response), user_data);
- gtk_widget_show (user_message_dialog);
- }
+ /* Use DBUS to raise dialogs in clients and reply back.
+ * For now say accept all. */
+ user_message_response (m);
+ } else
+ g_queue_push_tail (&user_message_queue, mail_msg_ref (m));
}
static void
@@ -371,63 +222,17 @@ get_folder (CamelFilterDriver *d,
session, uri, 0, NULL, error);
}
-static gboolean
-session_play_sound_cb (const gchar *filename)
-{
-#ifdef HAVE_CANBERRA
- if (filename != NULL && *filename != '\0')
- ca_context_play (
- ca_gtk_context_get (), 0,
- CA_PROP_MEDIA_FILENAME, filename,
- NULL);
- else
-#endif
- gdk_beep ();
-
- return FALSE;
-}
-
-static void
-session_play_sound (CamelFilterDriver *driver,
- const gchar *filename,
- gpointer user_data)
-{
- g_idle_add_full (
- G_PRIORITY_DEFAULT_IDLE,
- (GSourceFunc) session_play_sound_cb,
- g_strdup (filename), (GDestroyNotify) g_free);
-}
-
-static void
-session_system_beep (CamelFilterDriver *driver,
- gpointer user_data)
-{
- g_idle_add ((GSourceFunc) session_play_sound_cb, NULL);
-}
-
static CamelFilterDriver *
main_get_filter_driver (CamelSession *session,
const gchar *type,
GError **error)
{
- EMailSession *ms = E_MAIL_SESSION (session);
CamelFilterDriver *driver;
- EFilterRule *rule = NULL;
- const gchar *config_dir;
- gchar *user, *system;
+ EMailSession *ms = (EMailSession *)session;
GSettings *settings;
- ERuleContext *fc;
settings = g_settings_new ("org.gnome.evolution.mail");
- config_dir = mail_session_get_config_dir ();
- user = g_build_filename (config_dir, "filters.xml", NULL);
- system = g_build_filename (EVOLUTION_PRIVDATADIR, "filtertypes.xml", NULL);
- fc = (ERuleContext *) em_filter_context_new (ms);
- e_rule_context_load (fc, system, user);
- g_free (system);
- g_free (user);
-
driver = camel_filter_driver_new (session);
camel_filter_driver_set_folder_func (driver, get_folder, session);
@@ -446,52 +251,6 @@ main_get_filter_driver (CamelSession *session,
camel_filter_driver_set_logfile (driver, ms->priv->filter_logfile);
}
- camel_filter_driver_set_shell_func (driver, mail_execute_shell_command, NULL);
- camel_filter_driver_set_play_sound_func (driver, session_play_sound, NULL);
- camel_filter_driver_set_system_beep_func (driver, session_system_beep, NULL);
-
- if ((!strcmp (type, E_FILTER_SOURCE_INCOMING) ||
- !strcmp (type, E_FILTER_SOURCE_JUNKTEST))
- && camel_session_get_check_junk (session)) {
-
- /* implicit junk check as 1st rule */
- camel_filter_driver_add_rule (
- driver, "Junk check", "(junk-test)",
- "(begin (set-system-flag \"junk\"))");
- }
-
- if (strcmp (type, E_FILTER_SOURCE_JUNKTEST) != 0) {
- GString *fsearch, *faction;
-
- fsearch = g_string_new ("");
- faction = g_string_new ("");
-
- if (!strcmp (type, E_FILTER_SOURCE_DEMAND))
- type = E_FILTER_SOURCE_INCOMING;
-
- /* add the user-defined rules next */
- while ((rule = e_rule_context_next_rule (fc, rule, type))) {
- g_string_truncate (fsearch, 0);
- g_string_truncate (faction, 0);
-
- /* skip disabled rules */
- if (!rule->enabled)
- continue;
-
- e_filter_rule_build_code (rule, fsearch);
- em_filter_rule_build_action (
- EM_FILTER_RULE (rule), faction);
- camel_filter_driver_add_rule (
- driver, rule->name,
- fsearch->str, faction->str);
- }
-
- g_string_free (fsearch, TRUE);
- g_string_free (faction, TRUE);
- }
-
- g_object_unref (fc);
-
g_object_unref (settings);
return driver;
@@ -504,10 +263,11 @@ static guint preparing_flush = 0;
static gboolean
forward_to_flush_outbox_cb (EMailSession *session)
{
- g_return_val_if_fail (preparing_flush != 0, FALSE);
preparing_flush = 0;
- mail_send (session);
+
+ /* Connect to this and call mail_send in the main email client.*/
+ g_signal_emit (session, signals[FLUSH_OUTBOX], 0);
return FALSE;
}
@@ -551,18 +311,6 @@ async_context_free (AsyncContext *context)
g_slice_free (AsyncContext, context);
}
-static void
-source_context_free (SourceContext *context)
-{
- if (context->session != NULL)
- g_object_unref (context->session);
-
- if (context->service != NULL)
- g_object_unref (context->service);
-
- g_slice_free (SourceContext, context);
-}
-
static gchar *
mail_session_make_key (CamelService *service,
const gchar *item)
@@ -755,60 +503,6 @@ mail_session_account_added_cb (EAccountList *account_list,
}
static void
-mail_session_account_changed_cb (EAccountList *account_list,
- EAccount *account,
- EMailSession *session)
-{
- EMFolderTreeModel *folder_tree_model;
- CamelService *service;
-
- service = camel_session_get_service (
- CAMEL_SESSION (session), account->uid);
-
- if (!CAMEL_IS_STORE (service))
- return;
-
- /* Update the display name of the corresponding CamelStore.
- * EMailAccountStore listens for "notify" signals from each
- * service so it will detect this and update the model.
- *
- * XXX If EAccount defined GObject properties we could just
- * bind EAccount:name to CamelService:display-name and
- * be done with it. Oh well.
- */
-
- camel_service_set_display_name (service, account->name);
-
- /* Remove the store from the folder tree model and, if the
- * account is still enabled, re-add it. Easier than trying
- * to update the model with the store in place.
- *
- * em_folder_tree_model_add_store() already knows which types
- * of stores to disregard, so we don't have to deal with that
- * here. */
-
- folder_tree_model = em_folder_tree_model_get_default ();
-
- em_folder_tree_model_remove_store (
- folder_tree_model, CAMEL_STORE (service));
-
- if (account->enabled)
- em_folder_tree_model_add_store (
- folder_tree_model, CAMEL_STORE (service));
-}
-
-static gboolean
-mail_session_add_service_cb (SourceContext *context)
-{
- EMailAccountStore *store;
-
- store = e_mail_session_get_account_store (context->session);
- e_mail_account_store_add_service (store, context->service);
-
- return FALSE;
-}
-
-static void
mail_session_add_local_store (EMailSession *session)
{
CamelLocalSettings *local_settings;
@@ -885,38 +579,6 @@ mail_session_add_local_store (EMailSession *session)
}
static void
-mail_session_add_vfolder_store (EMailSession *session)
-{
- CamelSession *camel_session;
- CamelService *service;
- GError *error = NULL;
-
- camel_session = CAMEL_SESSION (session);
-
- service = camel_session_add_service (
- camel_session, E_MAIL_SESSION_VFOLDER_UID,
- "vfolder", CAMEL_PROVIDER_STORE, &error);
-
- if (error != NULL) {
- g_critical ("%s: %s", G_STRFUNC, error->message);
- g_error_free (error);
- return;
- }
-
- g_return_if_fail (CAMEL_IS_SERVICE (service));
-
- camel_service_set_display_name (service, _("Search Folders"));
- em_utils_connect_service_sync (service, NULL, NULL);
-
- /* XXX There's more configuration to do in vfolder_load_storage()
- * but it requires an EMailBackend, which we don't have access
- * to from here, so it has to be called from elsewhere. Kinda
- * thinking about reworking that... */
-
- session->priv->vfolder_store = g_object_ref (service);
-}
-
-static void
mail_session_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -940,13 +602,6 @@ mail_session_get_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
- case PROP_ACCOUNT_STORE:
- g_value_set_object (
- value,
- e_mail_session_get_account_store (
- E_MAIL_SESSION (object)));
- return;
-
case PROP_FOLDER_CACHE:
g_value_set_object (
value,
@@ -961,26 +616,12 @@ mail_session_get_property (GObject *object,
E_MAIL_SESSION (object)));
return;
- case PROP_LABEL_STORE:
- g_value_set_object (
- value,
- e_mail_session_get_label_store (
- E_MAIL_SESSION (object)));
- return;
-
case PROP_LOCAL_STORE:
g_value_set_object (
value,
e_mail_session_get_local_store (
E_MAIL_SESSION (object)));
return;
-
- case PROP_VFOLDER_STORE:
- g_value_set_object (
- value,
- e_mail_session_get_vfolder_store (
- E_MAIL_SESSION (object)));
- return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -993,29 +634,15 @@ mail_session_dispose (GObject *object)
priv = E_MAIL_SESSION_GET_PRIVATE (object);
- if (priv->account_store != NULL) {
- e_mail_account_store_clear (priv->account_store);
- g_object_unref (priv->account_store);
- priv->account_store = NULL;
- }
-
if (priv->folder_cache != NULL) {
g_object_unref (priv->folder_cache);
priv->folder_cache = NULL;
}
- if (priv->label_store != NULL) {
- g_object_unref (priv->label_store);
- priv->label_store = NULL;
- }
-
if (priv->account_list != NULL) {
g_signal_handler_disconnect (
priv->account_list,
priv->account_added_handler_id);
- g_signal_handler_disconnect (
- priv->account_list,
- priv->account_changed_handler_id);
g_object_unref (priv->account_list);
priv->account_list = NULL;
}
@@ -1025,11 +652,6 @@ mail_session_dispose (GObject *object)
priv->local_store = NULL;
}
- if (priv->vfolder_store != NULL) {
- g_object_unref (priv->vfolder_store);
- priv->vfolder_store = NULL;
- }
-
g_ptr_array_set_size (priv->local_folders, 0);
g_ptr_array_set_size (priv->local_folder_uris, 0);
@@ -1079,8 +701,7 @@ mail_session_initialize_stores_idle (gpointer user_data)
g_return_val_if_fail (session != NULL, FALSE);
- /* Load user-defined mail accounts. */
- account_list = session->priv->account_list;
+ account_list = e_get_account_list ();
iter = e_list_get_iterator (E_LIST (account_list));
while (e_iterator_is_valid (iter)) {
@@ -1094,25 +715,12 @@ mail_session_initialize_stores_idle (gpointer user_data)
g_object_unref (iter);
- /* Initialize which account is default. */
-
- account = e_get_default_account ();
- if (account != NULL) {
- CamelService *service;
-
- service = camel_session_get_service (
- CAMEL_SESSION (session), account->uid);
- e_mail_account_store_set_default_service (
- session->priv->account_store, service);
- }
-
return FALSE;
}
static void
mail_session_constructed (GObject *object)
{
- EMFolderTreeModel *folder_tree_model;
EMailSession *session;
EExtensible *extensible;
GType extension_type;
@@ -1129,27 +737,11 @@ mail_session_constructed (GObject *object)
account_list = e_get_account_list ();
session->priv->account_list = g_object_ref (account_list);
- session->priv->account_store = e_mail_account_store_new (session);
-
/* This must be created after the account store. */
session->priv->folder_cache = mail_folder_cache_new (session);
- /* XXX Make sure the folder tree model is created before we
- * add built-in CamelStores so it gets signals from the
- * EMailAccountStore.
- *
- * XXX This is creating a circular reference. Perhaps the
- * model should only hold a weak pointer to EMailSession?
- *
- * FIXME EMailSession should just own the default instance.
- */
- folder_tree_model = em_folder_tree_model_get_default ();
- em_folder_tree_model_set_session (folder_tree_model, session);
-
/* Add built-in CamelStores. */
-
mail_session_add_local_store (session);
- mail_session_add_vfolder_store (session);
/* Give it a chance to load user settings, they are not loaded yet.
*
@@ -1166,11 +758,6 @@ mail_session_constructed (GObject *object)
G_CALLBACK (mail_session_account_added_cb), session);
session->priv->account_added_handler_id = handler_id;
- handler_id = g_signal_connect (
- account_list, "account-changed",
- G_CALLBACK (mail_session_account_changed_cb), session);
- session->priv->account_changed_handler_id = handler_id;
-
extensible = E_EXTENSIBLE (object);
e_extensible_load_extensions (extensible);
@@ -1289,22 +876,6 @@ mail_session_add_service (CamelSession *session,
}
}
- /* Inform the EMailAccountStore of the new CamelService
- * from an idle callback so the service has a chance to
- * fully initialize first. */
- if (CAMEL_IS_STORE (service)) {
- SourceContext *context;
-
- context = g_slice_new0 (SourceContext);
- context->session = g_object_ref (session);
- context->service = g_object_ref (service);
-
- g_idle_add_full (
- G_PRIORITY_DEFAULT_IDLE,
- (GSourceFunc) mail_session_add_service_cb,
- context, (GDestroyNotify) source_context_free);
- }
-
return service;
}
@@ -1467,7 +1038,7 @@ mail_session_alert_user (CamelSession *session,
if (g_slist_length (button_captions) > 1)
mail_msg_ref (m);
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
if (m->ismain)
user_message_exec (m, cancellable, &m->base.error);
@@ -1848,17 +1419,6 @@ e_mail_session_class_init (EMailSessionClass *class)
g_object_class_install_property (
object_class,
- PROP_LABEL_STORE,
- g_param_spec_object (
- "label-store",
- "Label Store",
- "Mail label store",
- E_TYPE_MAIL_LABEL_LIST_STORE,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (
- object_class,
PROP_LOCAL_STORE,
g_param_spec_object (
"local-store",
@@ -1868,26 +1428,57 @@ e_mail_session_class_init (EMailSessionClass *class)
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (
- object_class,
- PROP_VFOLDER_STORE,
- g_param_spec_object (
- "vfolder-store",
- "Search Folder Store",
- "Built-in search folder store",
- CAMEL_TYPE_STORE,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
+ /**
+ * EMailSession::flush-outbox
+ * @session: the email session
+ *
+ * Emitted if the send folder should be flushed.
+ **/
+ signals[FLUSH_OUTBOX] = g_signal_new (
+ "flush-outbox",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, /* struct offset */
+ NULL, NULL, /* accumulator */
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ /**
+ * EMailSession::store-added
+ * @session: the email session
+ * @store: the CamelStore
+ *
+ * Emitted when a store is added
+ **/
+ signals[STORE_ADDED] = g_signal_new (
+ "store-added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, /* struct offset */
+ NULL, NULL, /* accumulator */
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ CAMEL_TYPE_STORE);
+
- signals[ACTIVITY_ADDED] = g_signal_new (
- "activity-added",
- G_OBJECT_CLASS_TYPE (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EMailSessionClass, activity_added),
- NULL, NULL,
+ /**
+ * EMailSession::store-removed
+ * @session: the email session
+ * @store: the CamelStore
+ *
+ * Emitted when a store is removed
+ **/
+ signals[STORE_REMOVED] = g_signal_new (
+ "store-removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0, /* struct offset */
+ NULL, NULL, /* accumulator */
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
- E_TYPE_ACTIVITY);
+ CAMEL_TYPE_STORE);
+
+
}
static void
@@ -1901,7 +1492,6 @@ e_mail_session_init (EMailSession *session)
(GEqualFunc) g_str_equal);
session->priv = E_MAIL_SESSION_GET_PRIVATE (session);
- session->priv->label_store = e_mail_label_list_store_new ();
session->priv->junk_filters = junk_filters;
session->priv->proxy = e_proxy_new ();
@@ -1947,24 +1537,6 @@ e_mail_session_new (void)
NULL);
}
-void
-e_mail_session_add_activity (EMailSession *session,
- EActivity *activity)
-{
- g_return_if_fail (E_IS_MAIL_SESSION (session));
- g_return_if_fail (E_IS_ACTIVITY (activity));
-
- g_signal_emit (session, signals[ACTIVITY_ADDED], 0, activity);
-}
-
-EMailAccountStore *
-e_mail_session_get_account_store (EMailSession *session)
-{
- g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL);
-
- return session->priv->account_store;
-}
-
MailFolderCache *
e_mail_session_get_folder_cache (EMailSession *session)
{
@@ -1973,14 +1545,6 @@ e_mail_session_get_folder_cache (EMailSession *session)
return session->priv->folder_cache;
}
-EMailLabelListStore *
-e_mail_session_get_label_store (EMailSession *session)
-{
- g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL);
-
- return session->priv->label_store;
-}
-
CamelStore *
e_mail_session_get_local_store (EMailSession *session)
{
@@ -1989,14 +1553,6 @@ e_mail_session_get_local_store (EMailSession *session)
return session->priv->local_store;
}
-CamelStore *
-e_mail_session_get_vfolder_store (EMailSession *session)
-{
- g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL);
-
- return session->priv->vfolder_store;
-}
-
CamelFolder *
e_mail_session_get_local_folder (EMailSession *session,
EMailLocalFolder type)
diff --git a/mail/e-mail-session.h b/libemail-engine/e-mail-session.h
index 7f5f22de27..af7892dc22 100644
--- a/mail/e-mail-session.h
+++ b/libemail-engine/e-mail-session.h
@@ -26,11 +26,8 @@
#define E_MAIL_SESSION_H
#include <camel/camel.h>
-#include <e-util/e-activity.h>
-#include <mail/e-mail-enums.h>
-#include <mail/e-mail-account-store.h>
-#include <mail/e-mail-label-list-store.h>
-#include <mail/mail-folder-cache.h>
+#include <libemail-engine/e-mail-enums.h>
+#include <libemail-engine/mail-folder-cache.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_SESSION \
@@ -68,25 +65,13 @@ struct _EMailSession {
struct _EMailSessionClass {
CamelSessionClass parent_class;
-
- void (*activity_added) (EMailSession *session,
- EActivity *activity);
};
GType e_mail_session_get_type (void);
EMailSession * e_mail_session_new (void);
-void e_mail_session_add_activity (EMailSession *session,
- EActivity *activity);
-EMailAccountStore *
- e_mail_session_get_account_store
- (EMailSession *session);
MailFolderCache *
e_mail_session_get_folder_cache (EMailSession *session);
-EMailLabelListStore *
- e_mail_session_get_label_store (EMailSession *session);
CamelStore * e_mail_session_get_local_store (EMailSession *session);
-CamelStore * e_mail_session_get_vfolder_store
- (EMailSession *session);
CamelFolder * e_mail_session_get_local_folder (EMailSession *session,
EMailLocalFolder type);
const gchar * e_mail_session_get_local_folder_uri
diff --git a/mail/e-mail-store-utils.c b/libemail-engine/e-mail-store-utils.c
index 7f978c8b7f..757f86dfd5 100644
--- a/mail/e-mail-store-utils.c
+++ b/libemail-engine/e-mail-store-utils.c
@@ -20,7 +20,7 @@
#include <config.h>
#endif
-#include "em-utils.h"
+#include "e-mail-utils.h"
#include "e-mail-store-utils.h"
diff --git a/mail/e-mail-store-utils.h b/libemail-engine/e-mail-store-utils.h
index de4484c020..de4484c020 100644
--- a/mail/e-mail-store-utils.h
+++ b/libemail-engine/e-mail-store-utils.h
diff --git a/libemail-engine/e-mail-utils.c b/libemail-engine/e-mail-utils.c
new file mode 100644
index 0000000000..05f5381147
--- /dev/null
+++ b/libemail-engine/e-mail-utils.c
@@ -0,0 +1,1062 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Srinivasa Ragavan <sragavan@gnome.org>
+ *
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <time.h>
+
+#include <glib/gstdio.h>
+
+#ifdef G_OS_WIN32
+/* Work around namespace clobbage in <windows.h> */
+#define DATADIR windows_DATADIR
+#include <windows.h>
+#undef DATADIR
+#undef interface
+#endif
+
+#include <libebook/e-book-client.h>
+#include <libebook/e-book-query.h>
+
+
+#include <glib/gi18n.h>
+
+#include <gio/gio.h>
+
+#include <libedataserver/e-data-server-util.h>
+#include <libedataserver/e-flag.h>
+#include <libedataserver/e-proxy.h>
+
+#include "libemail-utils/e-account-utils.h"
+#include "libemail-utils/mail-mt.h"
+
+#include "e-mail-folder-utils.h"
+#include "e-mail-session.h"
+#include "e-mail-utils.h"
+#include "mail-tools.h"
+
+#define d(x)
+
+/**
+ * em_utils_folder_is_templates:
+ * @folder: a #CamelFolder
+ *
+ * Decides if @folder is a Templates folder.
+ *
+ * Returns %TRUE if this is a Templates folder or %FALSE otherwise.
+ **/
+
+gboolean
+em_utils_folder_is_templates (CamelFolder *folder)
+{
+ CamelFolder *local_templates_folder;
+ CamelSession *session;
+ CamelStore *store;
+ EAccountList *account_list;
+ EIterator *iterator;
+ gchar *folder_uri;
+ gboolean is_templates = FALSE;
+
+ g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+
+ store = camel_folder_get_parent_store (folder);
+ session = camel_service_get_session (CAMEL_SERVICE (store));
+
+ local_templates_folder =
+ e_mail_session_get_local_folder (
+ E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_TEMPLATES);
+
+ if (folder == local_templates_folder)
+ return TRUE;
+
+ folder_uri = e_mail_folder_uri_from_folder (folder);
+
+ account_list = e_get_account_list ();
+ iterator = e_list_get_iterator (E_LIST (account_list));
+
+ while (!is_templates && e_iterator_is_valid (iterator)) {
+ EAccount *account;
+
+ /* XXX EIterator misuses const. */
+ account = (EAccount *) e_iterator_get (iterator);
+
+ if (account->templates_folder_uri != NULL)
+ is_templates = e_mail_folder_uri_equal (
+ session, folder_uri,
+ account->templates_folder_uri);
+
+ e_iterator_next (iterator);
+ }
+
+ g_object_unref (iterator);
+ g_free (folder_uri);
+
+ return is_templates;
+}
+
+/**
+ * em_utils_folder_is_drafts:
+ * @folder: a #CamelFolder
+ *
+ * Decides if @folder is a Drafts folder.
+ *
+ * Returns %TRUE if this is a Drafts folder or %FALSE otherwise.
+ **/
+gboolean
+em_utils_folder_is_drafts (CamelFolder *folder)
+{
+ CamelFolder *local_drafts_folder;
+ CamelSession *session;
+ CamelStore *store;
+ EAccountList *account_list;
+ EIterator *iterator;
+ gchar *folder_uri;
+ gboolean is_drafts = FALSE;
+
+ g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+
+ store = camel_folder_get_parent_store (folder);
+ session = camel_service_get_session (CAMEL_SERVICE (store));
+
+ local_drafts_folder =
+ e_mail_session_get_local_folder (
+ E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_DRAFTS);
+
+ if (folder == local_drafts_folder)
+ return TRUE;
+
+ folder_uri = e_mail_folder_uri_from_folder (folder);
+
+ account_list = e_get_account_list ();
+ iterator = e_list_get_iterator (E_LIST (account_list));
+
+ while (!is_drafts && e_iterator_is_valid (iterator)) {
+ EAccount *account;
+
+ /* XXX EIterator misuses const. */
+ account = (EAccount *) e_iterator_get (iterator);
+
+ if (account->drafts_folder_uri != NULL)
+ is_drafts = e_mail_folder_uri_equal (
+ session, folder_uri,
+ account->drafts_folder_uri);
+
+ e_iterator_next (iterator);
+ }
+
+ g_object_unref (iterator);
+ g_free (folder_uri);
+
+ return is_drafts;
+}
+
+/**
+ * em_utils_folder_is_sent:
+ * @folder: a #CamelFolder
+ *
+ * Decides if @folder is a Sent folder.
+ *
+ * Returns %TRUE if this is a Sent folder or %FALSE otherwise.
+ **/
+gboolean
+em_utils_folder_is_sent (CamelFolder *folder)
+{
+ CamelFolder *local_sent_folder;
+ CamelSession *session;
+ CamelStore *store;
+ EAccountList *account_list;
+ EIterator *iterator;
+ gchar *folder_uri;
+ gboolean is_sent = FALSE;
+
+ g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+
+ store = camel_folder_get_parent_store (folder);
+ session = camel_service_get_session (CAMEL_SERVICE (store));
+
+ local_sent_folder =
+ e_mail_session_get_local_folder (
+ E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_SENT);
+
+ if (folder == local_sent_folder)
+ return TRUE;
+
+ folder_uri = e_mail_folder_uri_from_folder (folder);
+
+ account_list = e_get_account_list ();
+ iterator = e_list_get_iterator (E_LIST (account_list));
+
+ while (!is_sent && e_iterator_is_valid (iterator)) {
+ EAccount *account;
+
+ /* XXX EIterator misuses const. */
+ account = (EAccount *) e_iterator_get (iterator);
+
+ if (account->sent_folder_uri != NULL)
+ is_sent = e_mail_folder_uri_equal (
+ session, folder_uri,
+ account->sent_folder_uri);
+
+ e_iterator_next (iterator);
+ }
+
+ g_object_unref (iterator);
+ g_free (folder_uri);
+
+ return is_sent;
+}
+
+/**
+ * em_utils_folder_is_outbox:
+ * @folder: a #CamelFolder
+ *
+ * Decides if @folder is an Outbox folder.
+ *
+ * Returns %TRUE if this is an Outbox folder or %FALSE otherwise.
+ **/
+gboolean
+em_utils_folder_is_outbox (CamelFolder *folder)
+{
+ CamelStore *store;
+ CamelSession *session;
+ CamelFolder *local_outbox_folder;
+
+ g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
+
+ store = camel_folder_get_parent_store (folder);
+ session = camel_service_get_session (CAMEL_SERVICE (store));
+
+ local_outbox_folder =
+ e_mail_session_get_local_folder (
+ E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_OUTBOX);
+
+ return (folder == local_outbox_folder);
+}
+
+/* ********************************************************************** */
+
+
+/* runs sync, in main thread */
+static gpointer
+emu_addr_setup (gpointer user_data)
+{
+ GError *err = NULL;
+ ESourceList **psource_list = user_data;
+
+ if (!e_book_client_get_sources (psource_list, &err))
+ g_error_free (err);
+
+ return NULL;
+}
+
+static void
+emu_addr_cancel_stop (gpointer data)
+{
+ gboolean *stop = data;
+
+ g_return_if_fail (stop != NULL);
+
+ *stop = TRUE;
+}
+
+static void
+emu_addr_cancel_cancellable (gpointer data)
+{
+ GCancellable *cancellable = data;
+
+ g_return_if_fail (cancellable != NULL);
+
+ g_cancellable_cancel (cancellable);
+}
+
+struct TryOpenEBookStruct {
+ GError **error;
+ EFlag *flag;
+ gboolean result;
+};
+
+static void
+try_open_book_client_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer closure)
+{
+ EBookClient *book_client = E_BOOK_CLIENT (source_object);
+ struct TryOpenEBookStruct *data = (struct TryOpenEBookStruct *) closure;
+ GError *error = NULL;
+
+ if (!data)
+ return;
+
+ e_client_open_finish (E_CLIENT (book_client), result, &error);
+
+ data->result = error == NULL;
+
+ if (!data->result) {
+ g_clear_error (data->error);
+ g_propagate_error (data->error, error);
+ }
+
+ e_flag_set (data->flag);
+}
+
+/*
+ * try_open_book_client:
+ * Tries to open address book asynchronously, but acts as synchronous.
+ * The advantage is it checks periodically whether the camel_operation
+ * has been canceled or not, and if so, then stops immediately, with
+ * result FALSE. Otherwise returns same as e_client_open()
+ */
+static gboolean
+try_open_book_client (EBookClient *book_client,
+ gboolean only_if_exists,
+ GCancellable *cancellable,
+ GError **error)
+{
+ struct TryOpenEBookStruct data;
+ gboolean canceled = FALSE;
+ EFlag *flag = e_flag_new ();
+
+ data.error = error;
+ data.flag = flag;
+ data.result = FALSE;
+
+ e_client_open (
+ E_CLIENT (book_client), only_if_exists,
+ cancellable, try_open_book_client_cb, &data);
+
+ while (canceled = g_cancellable_is_cancelled (cancellable),
+ !canceled && !e_flag_is_set (flag)) {
+ GTimeVal wait;
+
+ g_get_current_time (&wait);
+ g_time_val_add (&wait, 250000); /* waits 250ms */
+
+ e_flag_timed_wait (flag, &wait);
+ }
+
+ if (canceled) {
+ g_cancellable_cancel (cancellable);
+
+ g_clear_error (error);
+ g_propagate_error (
+ error, e_client_error_create (
+ E_CLIENT_ERROR_CANCELLED, NULL));
+ }
+
+ e_flag_wait (flag);
+ e_flag_free (flag);
+
+ return data.result && (!error || !*error);
+}
+
+
+#define NOT_FOUND_BOOK (GINT_TO_POINTER (1))
+
+G_LOCK_DEFINE_STATIC (contact_cache);
+
+/* key is lowercased contact email; value is EBook pointer
+ * (just for comparison) where it comes from */
+static GHashTable *contact_cache = NULL;
+
+/* key is source ID; value is pointer to EBook */
+static GHashTable *emu_books_hash = NULL;
+
+/* key is source ID; value is same pointer as key; this is hash of
+ * broken books, which failed to open for some reason */
+static GHashTable *emu_broken_books_hash = NULL;
+
+static ESourceList *emu_books_source_list = NULL;
+
+static gboolean
+search_address_in_addressbooks (const gchar *address,
+ gboolean local_only,
+ gboolean (*check_contact) (EContact *contact,
+ gpointer user_data),
+ gpointer user_data)
+{
+ gboolean found = FALSE, stop = FALSE, found_any = FALSE;
+ gchar *lowercase_addr;
+ gpointer ptr;
+ EBookQuery *book_query;
+ gchar *query;
+ GSList *s, *g, *addr_sources = NULL;
+ GHook *hook_cancellable;
+ GCancellable *cancellable;
+
+ if (!address || !*address)
+ return FALSE;
+
+ G_LOCK (contact_cache);
+
+ if (!emu_books_source_list) {
+ mail_call_main (
+ MAIL_CALL_p_p, (MailMainFunc)
+ emu_addr_setup, &emu_books_source_list);
+ emu_books_hash = g_hash_table_new_full (
+ g_str_hash, g_str_equal, g_free, g_object_unref);
+ emu_broken_books_hash = g_hash_table_new_full (
+ g_str_hash, g_str_equal, g_free, NULL);
+ contact_cache = g_hash_table_new_full (
+ g_str_hash, g_str_equal, g_free, NULL);
+ }
+
+ if (!emu_books_source_list) {
+ G_UNLOCK (contact_cache);
+ return FALSE;
+ }
+
+ lowercase_addr = g_utf8_strdown (address, -1);
+ ptr = g_hash_table_lookup (contact_cache, lowercase_addr);
+ if (ptr != NULL && (check_contact == NULL || ptr == NOT_FOUND_BOOK)) {
+ g_free (lowercase_addr);
+ G_UNLOCK (contact_cache);
+ return ptr != NOT_FOUND_BOOK;
+ }
+
+ book_query = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_IS, address);
+ query = e_book_query_to_string (book_query);
+ e_book_query_unref (book_query);
+
+ for (g = e_source_list_peek_groups (emu_books_source_list);
+ g; g = g_slist_next (g)) {
+ ESourceGroup *group = g->data;
+
+ if (!group)
+ continue;
+
+ if (local_only && !(e_source_group_peek_base_uri (group) &&
+ g_str_has_prefix (
+ e_source_group_peek_base_uri (group), "local:")))
+ continue;
+
+ for (s = e_source_group_peek_sources (group); s; s = g_slist_next (s)) {
+ ESource *source = s->data;
+ const gchar *completion = e_source_get_property (source, "completion");
+
+ if (completion && g_ascii_strcasecmp (completion, "true") == 0) {
+ addr_sources = g_slist_prepend (addr_sources, g_object_ref (source));
+ }
+ }
+ }
+
+ cancellable = g_cancellable_new ();
+ hook_cancellable = mail_cancel_hook_add (emu_addr_cancel_cancellable, cancellable);
+
+ for (s = addr_sources; !stop && !found && s; s = g_slist_next (s)) {
+ ESource *source = s->data;
+ GSList *contacts;
+ EBookClient *book_client = NULL;
+ GHook *hook_stop;
+ gboolean cached_book = FALSE;
+ const gchar *display_name;
+ const gchar *uid;
+ GError *err = NULL;
+
+ uid = e_source_peek_uid (source);
+ display_name = e_source_peek_name (source);
+
+ /* failed to load this book last time, skip it now */
+ if (g_hash_table_lookup (emu_broken_books_hash, uid) != NULL) {
+ d(printf ("%s: skipping broken book '%s'\n",
+ G_STRFUNC, display_name));
+ continue;
+ }
+
+ d(printf(" checking '%s'\n", e_source_get_uri(source)));
+
+ hook_stop = mail_cancel_hook_add (emu_addr_cancel_stop, &stop);
+
+ book_client = g_hash_table_lookup (emu_books_hash, uid);
+ if (!book_client) {
+ book_client = e_book_client_new (source, &err);
+
+ if (book_client == NULL) {
+ if (err && (g_error_matches (err, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
+ g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))) {
+ stop = TRUE;
+ } else if (err) {
+ gchar *source_uid;
+
+ source_uid = g_strdup (uid);
+
+ g_hash_table_insert (
+ emu_broken_books_hash,
+ source_uid, source_uid);
+
+ g_warning (
+ "%s: Unable to create addressbook '%s': %s",
+ G_STRFUNC,
+ display_name,
+ err->message);
+ }
+ g_clear_error (&err);
+ } else if (!stop && !try_open_book_client (book_client, TRUE, cancellable, &err)) {
+ g_object_unref (book_client);
+ book_client = NULL;
+
+ if (err && (g_error_matches (err, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
+ g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))) {
+ stop = TRUE;
+ } else if (err) {
+ gchar *source_uid;
+
+ source_uid = g_strdup (uid);
+
+ g_hash_table_insert (
+ emu_broken_books_hash,
+ source_uid, source_uid);
+
+ g_warning (
+ "%s: Unable to open addressbook '%s': %s",
+ G_STRFUNC,
+ display_name,
+ err->message);
+ }
+ g_clear_error (&err);
+ }
+ } else {
+ cached_book = TRUE;
+ }
+
+ if (book_client && !stop && e_book_client_get_contacts_sync (book_client, query, &contacts, cancellable, &err)) {
+ if (contacts != NULL) {
+ if (!found_any) {
+ g_hash_table_insert (contact_cache, g_strdup (lowercase_addr), book_client);
+ }
+ found_any = TRUE;
+
+ if (check_contact) {
+ GSList *l;
+
+ for (l = contacts; l && !found; l = l->next) {
+ EContact *contact = l->data;
+
+ found = check_contact (contact, user_data);
+ }
+ } else {
+ found = TRUE;
+ }
+
+ g_slist_foreach (contacts, (GFunc) g_object_unref, NULL);
+ g_slist_free (contacts);
+ }
+ } else if (book_client) {
+ stop = stop || (err &&
+ (g_error_matches (err, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
+ g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)));
+ if (err && !stop) {
+ gchar *source_uid = g_strdup (uid);
+
+ g_hash_table_insert (emu_broken_books_hash, source_uid, source_uid);
+
+ g_warning (
+ "%s: Can't get contacts from '%s': %s",
+ G_STRFUNC,
+ display_name,
+ err->message);
+ }
+ g_clear_error (&err);
+ }
+
+ mail_cancel_hook_remove (hook_stop);
+
+ if (stop && !cached_book && book_client) {
+ g_object_unref (book_client);
+ } else if (!stop && book_client && !cached_book) {
+ g_hash_table_insert (
+ emu_books_hash, g_strdup (uid), book_client);
+ }
+ }
+
+ mail_cancel_hook_remove (hook_cancellable);
+ g_object_unref (cancellable);
+
+ g_slist_free_full (addr_sources, (GDestroyNotify) g_object_unref);
+
+ g_free (query);
+
+ if (!found_any) {
+ g_hash_table_insert (contact_cache, lowercase_addr, NOT_FOUND_BOOK);
+ lowercase_addr = NULL;
+ }
+
+ G_UNLOCK (contact_cache);
+
+ g_free (lowercase_addr);
+
+ return found_any;
+}
+
+gboolean
+em_utils_in_addressbook (CamelInternetAddress *iaddr,
+ gboolean local_only)
+{
+ const gchar *addr;
+
+ /* TODO: check all addresses? */
+ if (iaddr == NULL || !camel_internet_address_get (iaddr, 0, NULL, &addr))
+ return FALSE;
+
+ return search_address_in_addressbooks (addr, local_only, NULL, NULL);
+}
+
+static gboolean
+extract_photo_data (EContact *contact,
+ gpointer user_data)
+{
+ EContactPhoto **photo = user_data;
+
+ g_return_val_if_fail (contact != NULL, FALSE);
+ g_return_val_if_fail (user_data != NULL, FALSE);
+
+ *photo = e_contact_get (contact, E_CONTACT_PHOTO);
+ if (!*photo)
+ *photo = e_contact_get (contact, E_CONTACT_LOGO);
+
+ return *photo != NULL;
+}
+
+typedef struct _PhotoInfo {
+ gchar *address;
+ EContactPhoto *photo;
+} PhotoInfo;
+
+static void
+emu_free_photo_info (PhotoInfo *pi)
+{
+ if (!pi)
+ return;
+
+ if (pi->address)
+ g_free (pi->address);
+ if (pi->photo)
+ e_contact_photo_free (pi->photo);
+ g_free (pi);
+}
+
+G_LOCK_DEFINE_STATIC (photos_cache);
+static GSList *photos_cache = NULL; /* list of PhotoInfo-s */
+
+CamelMimePart *
+em_utils_contact_photo (CamelInternetAddress *cia,
+ gboolean local_only)
+{
+ const gchar *addr = NULL;
+ CamelMimePart *part = NULL;
+ EContactPhoto *photo = NULL;
+ GSList *p, *first_not_null = NULL;
+ gint count_not_null = 0;
+
+ if (cia == NULL || !camel_internet_address_get (cia, 0, NULL, &addr) || !addr) {
+ return NULL;
+ }
+
+ G_LOCK (photos_cache);
+
+ /* search a cache first */
+ for (p = photos_cache; p; p = p->next) {
+ PhotoInfo *pi = p->data;
+
+ if (!pi)
+ continue;
+
+ if (pi->photo) {
+ if (!first_not_null)
+ first_not_null = p;
+ count_not_null++;
+ }
+
+ if (g_ascii_strcasecmp (addr, pi->address) == 0) {
+ photo = pi->photo;
+ break;
+ }
+ }
+
+ /* !p means the address had not been found in the cache */
+ if (!p && search_address_in_addressbooks (
+ addr, local_only, extract_photo_data, &photo)) {
+ PhotoInfo *pi;
+
+ if (photo && photo->type != E_CONTACT_PHOTO_TYPE_INLINED) {
+ e_contact_photo_free (photo);
+ photo = NULL;
+ }
+
+ /* keep only up to 10 photos in memory */
+ if (photo && count_not_null >= 10 && first_not_null) {
+ pi = first_not_null->data;
+
+ photos_cache = g_slist_remove (photos_cache, pi);
+
+ emu_free_photo_info (pi);
+ }
+
+ pi = g_new0 (PhotoInfo, 1);
+ pi->address = g_strdup (addr);
+ pi->photo = photo;
+
+ photos_cache = g_slist_append (photos_cache, pi);
+ }
+
+ /* some photo found, use it */
+ if (photo) {
+ /* Form a mime part out of the photo */
+ part = camel_mime_part_new ();
+ camel_mime_part_set_content (part,
+ (const gchar *) photo->data.inlined.data,
+ photo->data.inlined.length, "image/jpeg");
+ }
+
+ G_UNLOCK (photos_cache);
+
+ return part;
+}
+
+/* list of email addresses (strings) to remove from local cache of photos and
+ * contacts, but only if the photo doesn't exist or is an not-found contact */
+void
+emu_remove_from_mail_cache (const GSList *addresses)
+{
+ const GSList *a;
+ GSList *p;
+ CamelInternetAddress *cia;
+
+ cia = camel_internet_address_new ();
+
+ for (a = addresses; a; a = a->next) {
+ const gchar *addr = NULL;
+
+ if (!a->data)
+ continue;
+
+ if (camel_address_decode ((CamelAddress *) cia, a->data) != -1 &&
+ camel_internet_address_get (cia, 0, NULL, &addr) && addr) {
+ gchar *lowercase_addr = g_utf8_strdown (addr, -1);
+
+ G_LOCK (contact_cache);
+ if (g_hash_table_lookup (contact_cache, lowercase_addr) == NOT_FOUND_BOOK)
+ g_hash_table_remove (contact_cache, lowercase_addr);
+ G_UNLOCK (contact_cache);
+
+ g_free (lowercase_addr);
+
+ G_LOCK (photos_cache);
+ for (p = photos_cache; p; p = p->next) {
+ PhotoInfo *pi = p->data;
+
+ if (pi && !pi->photo && g_ascii_strcasecmp (pi->address, addr) == 0) {
+ photos_cache = g_slist_remove (photos_cache, pi);
+ emu_free_photo_info (pi);
+ break;
+ }
+ }
+ G_UNLOCK (photos_cache);
+ }
+ }
+
+ g_object_unref (cia);
+}
+
+
+void
+emu_remove_from_mail_cache_1 (const gchar *address)
+{
+ GSList *l;
+
+ g_return_if_fail (address != NULL);
+
+ l = g_slist_append (NULL, (gpointer) address);
+
+ emu_remove_from_mail_cache (l);
+
+ g_slist_free (l);
+}
+
+/* frees all data created by call of em_utils_in_addressbook() or
+ * em_utils_contact_photo() */
+void
+emu_free_mail_cache (void)
+{
+ G_LOCK (contact_cache);
+
+ if (emu_books_hash) {
+ g_hash_table_destroy (emu_books_hash);
+ emu_books_hash = NULL;
+ }
+
+ if (emu_broken_books_hash) {
+ g_hash_table_destroy (emu_broken_books_hash);
+ emu_broken_books_hash = NULL;
+ }
+
+ if (emu_books_source_list) {
+ g_object_unref (emu_books_source_list);
+ emu_books_source_list = NULL;
+ }
+
+ if (contact_cache) {
+ g_hash_table_destroy (contact_cache);
+ contact_cache = NULL;
+ }
+
+ G_UNLOCK (contact_cache);
+
+ G_LOCK (photos_cache);
+
+ g_slist_foreach (photos_cache, (GFunc) emu_free_photo_info, NULL);
+ g_slist_free (photos_cache);
+ photos_cache = NULL;
+
+ G_UNLOCK (photos_cache);
+}
+
+static EAccount *
+guess_account_from_folder (CamelFolder *folder)
+{
+ CamelStore *store;
+ const gchar *uid;
+
+ store = camel_folder_get_parent_store (folder);
+ uid = camel_service_get_uid (CAMEL_SERVICE (store));
+
+ return e_get_account_by_uid (uid);
+}
+
+static EAccount *
+guess_account_from_message (CamelMimeMessage *message)
+{
+ const gchar *uid;
+
+ uid = camel_mime_message_get_source (message);
+
+ return (uid != NULL) ? e_get_account_by_uid (uid) : NULL;
+}
+
+EAccount *
+em_utils_guess_account (CamelMimeMessage *message,
+ CamelFolder *folder)
+{
+ EAccount *account = NULL;
+
+ g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
+
+ if (folder != NULL)
+ g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
+
+ /* check for newsgroup header */
+ if (folder != NULL
+ && camel_medium_get_header (CAMEL_MEDIUM (message), "Newsgroups"))
+ account = guess_account_from_folder (folder);
+
+ /* check for source folder */
+ if (account == NULL && folder != NULL)
+ account = guess_account_from_folder (folder);
+
+ /* then message source */
+ if (account == NULL)
+ account = guess_account_from_message (message);
+
+ return account;
+}
+
+EAccount *
+em_utils_guess_account_with_recipients (CamelMimeMessage *message,
+ CamelFolder *folder)
+{
+ EAccount *account = NULL;
+ EAccountList *account_list;
+ GHashTable *recipients;
+ EIterator *iterator;
+ CamelInternetAddress *addr;
+ const gchar *type;
+ const gchar *key;
+
+ /* This policy is subject to debate and tweaking,
+ * but please also document the rational here. */
+
+ g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
+
+ /* Build a set of email addresses in which to test for membership.
+ * Only the keys matter here; the values just need to be non-NULL. */
+ recipients = g_hash_table_new (g_str_hash, g_str_equal);
+
+ type = CAMEL_RECIPIENT_TYPE_TO;
+ addr = camel_mime_message_get_recipients (message, type);
+ if (addr != NULL) {
+ gint index = 0;
+
+ while (camel_internet_address_get (addr, index++, NULL, &key))
+ g_hash_table_insert (
+ recipients, (gpointer) key,
+ GINT_TO_POINTER (1));
+ }
+
+ type = CAMEL_RECIPIENT_TYPE_CC;
+ addr = camel_mime_message_get_recipients (message, type);
+ if (addr != NULL) {
+ gint index = 0;
+
+ while (camel_internet_address_get (addr, index++, NULL, &key))
+ g_hash_table_insert (
+ recipients, (gpointer) key,
+ GINT_TO_POINTER (1));
+ }
+
+ /* First Preference: We were given a folder that maps to an
+ * enabled account, and that account's email address appears
+ * in the list of To: or Cc: recipients. */
+
+ if (folder != NULL)
+ account = guess_account_from_folder (folder);
+
+ if (account == NULL || !account->enabled)
+ goto second_preference;
+
+ if ((key = account->id->address) == NULL)
+ goto second_preference;
+
+ if (g_hash_table_lookup (recipients, key) != NULL)
+ goto exit;
+
+second_preference:
+
+ /* Second Preference: Choose any enabled account whose email
+ * address appears in the list to To: or Cc: recipients. */
+
+ account_list = e_get_account_list ();
+ iterator = e_list_get_iterator (E_LIST (account_list));
+
+ while (e_iterator_is_valid (iterator)) {
+ account = (EAccount *) e_iterator_get (iterator);
+ e_iterator_next (iterator);
+
+ if (account == NULL || !account->enabled)
+ continue;
+
+ if ((key = account->id->address) == NULL)
+ continue;
+
+ if (g_hash_table_lookup (recipients, key) != NULL) {
+ g_object_unref (iterator);
+ goto exit;
+ }
+ }
+ g_object_unref (iterator);
+
+ /* Last Preference: Defer to em_utils_guess_account(). */
+ account = em_utils_guess_account (message, folder);
+
+exit:
+ g_hash_table_destroy (recipients);
+
+ return account;
+}
+
+static void
+cancel_service_connect_cb (GCancellable *cancellable,
+ CamelService *service)
+{
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+
+ camel_service_cancel_connect (service);
+}
+
+gboolean
+em_utils_connect_service_sync (CamelService *service,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean res;
+ gulong handler_id = 0;
+
+ g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
+
+ if (cancellable != NULL)
+ handler_id = g_cancellable_connect (
+ cancellable,
+ G_CALLBACK (cancel_service_connect_cb),
+ service, NULL);
+
+ res = camel_service_connect_sync (service, error);
+
+ if (handler_id)
+ g_cancellable_disconnect (cancellable, handler_id);
+
+ return res;
+}
+
+gboolean
+em_utils_disconnect_service_sync (CamelService *service,
+ gboolean clean,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean res;
+ gulong handler_id = 0;
+
+ g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
+
+ if (cancellable != NULL)
+ handler_id = g_cancellable_connect (
+ cancellable,
+ G_CALLBACK (cancel_service_connect_cb),
+ service, NULL);
+
+ res = camel_service_disconnect_sync (service, clean, error);
+
+ if (handler_id)
+ g_cancellable_disconnect (cancellable, handler_id);
+
+ return res;
+}
+
+/**
+ * em_utils_uids_free:
+ * @uids: array of uids
+ *
+ * Frees the array of uids pointed to by @uids back to the system.
+ **/
+void
+em_utils_uids_free (GPtrArray *uids)
+{
+ gint i;
+
+ for (i = 0; i < uids->len; i++)
+ g_free (uids->pdata[i]);
+
+ g_ptr_array_free (uids, TRUE);
+}
+
+/* Returns TRUE if CamelURL points to a local mbox file. */
+gboolean
+em_utils_is_local_delivery_mbox_file (CamelURL *url)
+{
+ g_return_val_if_fail (url != NULL, FALSE);
+
+ return g_str_equal (url->protocol, "mbox") &&
+ (url->path != NULL) &&
+ g_file_test (url->path, G_FILE_TEST_EXISTS) &&
+ !g_file_test (url->path, G_FILE_TEST_IS_DIR);
+}
+
diff --git a/libemail-engine/e-mail-utils.h b/libemail-engine/e-mail-utils.h
new file mode 100644
index 0000000000..144f13dfdd
--- /dev/null
+++ b/libemail-engine/e-mail-utils.h
@@ -0,0 +1,56 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Srinivasa Ragavan <sragavan@gnome.org>
+ *
+ *
+ */
+
+#ifndef E_MAIL_UTILS_H
+#define E_MAIL_UTILS_H
+
+#include <camel/camel.h>
+#include <libedataserver/e-account.h>
+
+gboolean em_utils_folder_is_drafts (CamelFolder *folder);
+gboolean em_utils_folder_is_templates (CamelFolder *folder);
+gboolean em_utils_folder_is_sent (CamelFolder *folder);
+gboolean em_utils_folder_is_outbox (CamelFolder *folder);
+gboolean em_utils_in_addressbook (CamelInternetAddress *addr,
+ gboolean local_only);
+CamelMimePart * em_utils_contact_photo (CamelInternetAddress *addr,
+ gboolean local);
+EAccount * em_utils_guess_account (CamelMimeMessage *message,
+ CamelFolder *folder);
+EAccount * em_utils_guess_account_with_recipients
+ (CamelMimeMessage *message,
+ CamelFolder *folder);
+void emu_remove_from_mail_cache (const GSList *addresses);
+void emu_remove_from_mail_cache_1 (const gchar *address);
+void emu_free_mail_cache (void);
+gboolean em_utils_connect_service_sync (CamelService *service,
+ GCancellable *cancellable,
+ GError **error);
+gboolean em_utils_disconnect_service_sync
+ (CamelService *service,
+ gboolean clean,
+ GCancellable *cancellable,
+ GError **error);
+void em_utils_uids_free (GPtrArray *uids);
+gboolean em_utils_is_local_delivery_mbox_file
+ (CamelURL *url);
+
+#endif /* E_MAIL_UTILS_H */
diff --git a/libemail-engine/libemail-engine.pc.in b/libemail-engine/libemail-engine.pc.in
new file mode 100644
index 0000000000..1d915bcf33
--- /dev/null
+++ b/libemail-engine/libemail-engine.pc.in
@@ -0,0 +1,15 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+
+privincludedir=@privincludedir@
+
+Name: libemail-engine
+Description: Client library for evolution mail
+Version: @VERSION@
+Requires: libemail-utils
+Libs: -L${libdir} -lemail-engine
+Cflags: -I${privincludedir}
diff --git a/mail/mail-config.c b/libemail-engine/mail-config.c
index fc003acbde..51d34a0714 100644
--- a/mail/mail-config.c
+++ b/libemail-engine/mail-config.c
@@ -31,9 +31,8 @@
#include <libedataserver/e-data-server-util.h>
-#include <e-util/e-util.h>
-#include "e-util/e-account-utils.h"
-#include "e-util/e-signature-utils.h"
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/e-signature-utils.h>
#include "e-mail-folder-utils.h"
#include "mail-config.h"
diff --git a/mail/mail-config.h b/libemail-engine/mail-config.h
index 29038093cb..0a1c618f35 100644
--- a/mail/mail-config.h
+++ b/libemail-engine/mail-config.h
@@ -23,7 +23,7 @@
#ifndef MAIL_CONFIG_H
#define MAIL_CONFIG_H
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
G_BEGIN_DECLS
diff --git a/mail/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c
index 4092ee6861..954c14d379 100644
--- a/mail/mail-folder-cache.c
+++ b/libemail-engine/mail-folder-cache.c
@@ -39,18 +39,17 @@
#include <glib/gstdio.h>
#include <libedataserver/e-data-server-util.h>
-#include <e-util/e-marshal.h>
-#include <e-util/e-util.h>
-#include "mail-mt.h"
+#include <libemail-utils/mail-mt.h>
+
#include "mail-folder-cache.h"
#include "mail-ops.h"
#include "mail-tools.h"
-
-#include "em-utils.h"
+#include "e-mail-utils.h"
#include "e-mail-folder-utils.h"
#include "e-mail-session.h"
#include "e-mail-store-utils.h"
+#include "mail-config.h"
#define w(x)
#define d(x)
@@ -65,7 +64,6 @@ typedef struct _StoreInfo StoreInfo;
struct _MailFolderCachePrivate {
gpointer session; /* weak pointer */
- EMailAccountStore *account_store;
/* source id for the ping timeout callback */
guint ping_id;
@@ -273,7 +271,7 @@ flush_updates_idle_cb (MailFolderCache *cache)
if (CAMEL_IS_VEE_STORE (up->store) && !up->remove) {
/* Normally the vfolder store takes care of the
- * folder_opened event itcache, but we add folder to
+ * folder_opened event itself, but we add folder to
* the noting system later, thus we do not know about
* search folders to update them in a tree, thus
* ensure their changes will be tracked correctly. */
@@ -1046,56 +1044,6 @@ storeinfo_find_folder_info (CamelStore *store,
}
static void
-mail_folder_cache_service_removed (EMailAccountStore *account_store,
- CamelService *service,
- MailFolderCache *cache)
-{
- StoreInfo *si;
-
- if (cache->priv->stores == NULL)
- return;
-
- g_mutex_lock (cache->priv->stores_mutex);
-
- si = g_hash_table_lookup (cache->priv->stores, service);
- if (si != NULL) {
- g_hash_table_remove (cache->priv->stores, service);
-
- g_signal_handlers_disconnect_matched (
- service, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, cache);
-
- g_hash_table_foreach (
- si->folders, (GHFunc)
- unset_folder_info_hash, cache);
-
- store_info_free (si);
- }
-
- g_mutex_unlock (cache->priv->stores_mutex);
-}
-
-static void
-mail_folder_cache_service_enabled (EMailAccountStore *account_store,
- CamelService *service,
- MailFolderCache *cache)
-{
- mail_folder_cache_note_store (
- cache, CAMEL_STORE (service), NULL, NULL, NULL);
-}
-
-static void
-mail_folder_cache_service_disabled (EMailAccountStore *account_store,
- CamelService *service,
- MailFolderCache *cache)
-{
- /* To the folder cache, disabling a service is the same as
- * removing it. We keep a separate callback function only
- * to use as a breakpoint target in a debugger. */
- mail_folder_cache_service_removed (account_store, service, cache);
-}
-
-static void
mail_folder_cache_set_session (MailFolderCache *cache,
EMailSession *session)
{
@@ -1157,14 +1105,6 @@ mail_folder_cache_dispose (GObject *object)
priv->session = NULL;
}
- if (priv->account_store != NULL) {
- g_signal_handlers_disconnect_matched (
- priv->account_store, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, object);
- g_object_unref (priv->account_store);
- priv->account_store = NULL;
- }
-
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (mail_folder_cache_parent_class)->dispose (object);
}
@@ -1200,41 +1140,6 @@ mail_folder_cache_finalize (GObject *object)
}
static void
-mail_folder_cache_constructed (GObject *object)
-{
- MailFolderCache *cache;
- EMailSession *session;
- EMailAccountStore *account_store;
-
- cache = MAIL_FOLDER_CACHE (object);
-
- /* Chain up to parent's constructed() method. */
- G_OBJECT_CLASS (mail_folder_cache_parent_class)->constructed (object);
-
- session = mail_folder_cache_get_session (cache);
- account_store = e_mail_session_get_account_store (session);
-
- cache->priv->account_store = g_object_ref (account_store);
-
- /* No need to connect to "service-added" emissions since it's
- * always immediately followed by either "service-enabled" or
- * "service-disabled". */
-
- g_signal_connect (
- account_store, "service-removed",
- G_CALLBACK (mail_folder_cache_service_removed), cache);
-
- g_signal_connect (
- account_store, "service-enabled",
- G_CALLBACK (mail_folder_cache_service_enabled), cache);
-
- g_signal_connect (
- account_store, "service-disabled",
- G_CALLBACK (mail_folder_cache_service_disabled), cache);
-
-}
-
-static void
mail_folder_cache_folder_available (MailFolderCache *cache,
CamelStore *store,
const gchar *folder_name)
@@ -1396,7 +1301,6 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
object_class->get_property = mail_folder_cache_get_property;
object_class->dispose = mail_folder_cache_dispose;
object_class->finalize = mail_folder_cache_finalize;
- object_class->constructed = mail_folder_cache_constructed;
class->folder_available = mail_folder_cache_folder_available;
class->folder_unavailable = mail_folder_cache_folder_unavailable;
@@ -1426,8 +1330,7 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (MailFolderCacheClass, folder_available),
- NULL, NULL, /* accumulator */
- e_marshal_VOID__OBJECT_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2,
CAMEL_TYPE_STORE,
G_TYPE_STRING);
@@ -1446,8 +1349,7 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (MailFolderCacheClass, folder_unavailable),
- NULL, NULL, /* accumulator */
- e_marshal_VOID__OBJECT_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 2,
CAMEL_TYPE_STORE,
G_TYPE_STRING);
@@ -1465,7 +1367,7 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (MailFolderCacheClass, folder_deleted),
NULL, NULL, /* accumulator */
- e_marshal_VOID__OBJECT_STRING,
+ NULL,
G_TYPE_NONE, 2,
CAMEL_TYPE_STORE,
G_TYPE_STRING);
@@ -1483,8 +1385,7 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (MailFolderCacheClass, folder_renamed),
- NULL, NULL, /* accumulator */
- e_marshal_VOID__OBJECT_STRING_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 3,
CAMEL_TYPE_STORE,
G_TYPE_STRING,
@@ -1503,8 +1404,7 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (MailFolderCacheClass, folder_unread_updated),
- NULL, NULL, /* accumulator */
- e_marshal_VOID__OBJECT_STRING_INT,
+ NULL, NULL, NULL,
G_TYPE_NONE, 3,
CAMEL_TYPE_STORE,
G_TYPE_STRING,
@@ -1527,8 +1427,7 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (MailFolderCacheClass, folder_changed),
- NULL, NULL, /* accumulator */
- e_marshal_VOID__OBJECT_STRING_INT_STRING_STRING_STRING,
+ NULL, NULL, NULL,
G_TYPE_NONE, 6,
CAMEL_TYPE_STORE,
G_TYPE_STRING,
@@ -1812,8 +1711,8 @@ mail_folder_cache_get_folder_has_children (MailFolderCache *cache,
struct _find_info fi = { NULL, NULL };
gchar *folder_uri;
- g_return_val_if_fail (cache != NULL, FALSE);
- g_return_val_if_fail (folder != NULL, FALSE);
+ g_return_val_if_fail (MAIL_IS_FOLDER_CACHE (cache), FALSE);
+ g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
if (cache->priv->stores == NULL)
return FALSE;
@@ -1825,7 +1724,7 @@ mail_folder_cache_get_folder_has_children (MailFolderCache *cache,
g_hash_table_foreach (
cache->priv->stores, (GHFunc)
storeinfo_find_folder_info, &fi);
- if (found)
+ if (found != NULL)
*found = fi.fi != NULL;
g_mutex_unlock (cache->priv->stores_mutex);
@@ -1873,3 +1772,70 @@ mail_folder_cache_get_remote_folder_uris (MailFolderCache *self,
g_mutex_unlock (self->priv->stores_mutex);
}
+
+void
+mail_folder_cache_service_added (MailFolderCache *cache,
+ CamelService *service)
+{
+ g_return_if_fail (MAIL_IS_FOLDER_CACHE (cache));
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+
+ mail_folder_cache_note_store (
+ cache, CAMEL_STORE (service), NULL, NULL, NULL);
+}
+
+void
+mail_folder_cache_service_removed (MailFolderCache *cache,
+ CamelService *service)
+{
+ StoreInfo *si;
+
+ g_return_if_fail (MAIL_IS_FOLDER_CACHE (cache));
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+
+ if (cache->priv->stores == NULL)
+ return;
+
+ g_mutex_lock (cache->priv->stores_mutex);
+
+ si = g_hash_table_lookup (cache->priv->stores, service);
+ if (si != NULL) {
+ g_hash_table_remove (cache->priv->stores, service);
+
+ g_signal_handlers_disconnect_matched (
+ service, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, cache);
+
+ g_hash_table_foreach (
+ si->folders, (GHFunc)
+ unset_folder_info_hash, cache);
+
+ store_info_free (si);
+ }
+
+ g_mutex_unlock (cache->priv->stores_mutex);
+}
+
+void
+mail_folder_cache_service_enabled (MailFolderCache *cache,
+ CamelService *service)
+{
+ g_return_if_fail (MAIL_IS_FOLDER_CACHE (cache));
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+
+ mail_folder_cache_note_store (
+ cache, CAMEL_STORE (service), NULL, NULL, NULL);
+}
+
+void
+mail_folder_cache_service_disabled (MailFolderCache *cache,
+ CamelService *service)
+{
+ g_return_if_fail (MAIL_IS_FOLDER_CACHE (cache));
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+
+ /* To the folder cache, disabling a service is the same as
+ * removing it. We keep a separate callback function only
+ * to use as a breakpoint target in a debugger. */
+ mail_folder_cache_service_removed (cache, service);
+}
diff --git a/mail/mail-folder-cache.h b/libemail-engine/mail-folder-cache.h
index 8e9fa34fe5..b0d1d1bc49 100644
--- a/mail/mail-folder-cache.h
+++ b/libemail-engine/mail-folder-cache.h
@@ -138,6 +138,18 @@ void mail_folder_cache_get_local_folder_uris
void mail_folder_cache_get_remote_folder_uris
(MailFolderCache *cache,
GQueue *out_queue);
+void mail_folder_cache_service_added (MailFolderCache *cache,
+ CamelService *service);
+void mail_folder_cache_service_removed
+ (MailFolderCache *cache,
+ CamelService *service);
+void mail_folder_cache_service_enabled
+ (MailFolderCache *cache,
+ CamelService *service);
+void mail_folder_cache_service_disabled
+ (MailFolderCache *cache,
+ CamelService *service);
+
G_END_DECLS
diff --git a/mail/mail-ops.c b/libemail-engine/mail-ops.c
index 27b48c2aa8..7063179e55 100644
--- a/mail/mail-ops.c
+++ b/libemail-engine/mail-ops.c
@@ -35,11 +35,11 @@
#include <glib/gi18n.h>
#include <libedataserver/e-data-server-util.h>
-#include "e-util/e-account-utils.h"
-#include "em-filter-rule.h"
-#include "em-utils.h"
-#include "mail-mt.h"
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
+
+#include "e-mail-utils.h"
#include "mail-ops.h"
#include "mail-tools.h"
@@ -950,7 +950,7 @@ mail_send_queue (EMailSession *session,
m->queue = g_object_ref (queue);
m->transport = g_object_ref (transport);
if (G_IS_CANCELLABLE (cancellable))
- e_activity_set_cancellable (m->base.activity, cancellable);
+ m->base.cancellable = cancellable;
m->status = status;
m->status_data = status_data;
m->done = done;
@@ -1383,10 +1383,11 @@ expunge_pop3_stores (CamelFolder *expunging,
CamelFolder *folder;
CamelService *service;
CamelSettings *settings;
- gboolean any_found = FALSE, delete_expunged = FALSE, keep_on_server = FALSE;
+ gboolean any_found = FALSE;
+ gboolean delete_expunged = FALSE;
+ gboolean keep_on_server = FALSE;
- service = camel_session_get_service (
- session, account->uid);
+ service = camel_session_get_service (session, account->uid);
if (!CAMEL_IS_STORE (service))
continue;
diff --git a/mail/mail-ops.h b/libemail-engine/mail-ops.h
index b8eb184c7e..236dd2325f 100644
--- a/mail/mail-ops.h
+++ b/libemail-engine/mail-ops.h
@@ -27,9 +27,8 @@
G_BEGIN_DECLS
#include <camel/camel.h>
-
-#include <mail/mail-mt.h>
-#include <mail/e-mail-backend.h>
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/e-mail-session.h>
void mail_transfer_messages (EMailSession *session,
CamelFolder *source,
diff --git a/mail/mail-tools.c b/libemail-engine/mail-tools.c
index 30ac175a18..82b2146b92 100644
--- a/mail/mail-tools.c
+++ b/libemail-engine/mail-tools.c
@@ -38,7 +38,6 @@
#include <glib/gi18n.h>
#include "e-mail-session.h"
-#include "em-utils.h"
#include "mail-folder-cache.h"
#include "mail-tools.h"
diff --git a/mail/mail-tools.h b/libemail-engine/mail-tools.h
index 94b19c0d12..94b19c0d12 100644
--- a/mail/mail-tools.h
+++ b/libemail-engine/mail-tools.h
diff --git a/libemail-utils/Makefile.am b/libemail-utils/Makefile.am
new file mode 100644
index 0000000000..a2aea9aa93
--- /dev/null
+++ b/libemail-utils/Makefile.am
@@ -0,0 +1,44 @@
+NULL =
+
+lib_LTLIBRARIES = libemail-utils.la
+
+libemail_utils_la_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\" \
+ $(EVOLUTION_DATA_SERVER_CFLAGS) \
+ $(GNOME_PLATFORM_CFLAGS) \
+ $(NULL)
+
+libmailutilsincludedir = $(privincludedir)/libemail-utils
+libmailutilsinclude_HEADERS = \
+ e-account-utils.h \
+ e-signature-list.h \
+ e-signature-utils.h \
+ e-signature.h \
+ mail-mt.h \
+ $(NULL)
+
+libemail_utils_la_SOURCES = \
+ $(libmailutilsinclude_HEADERS) \
+ e-account-utils.c \
+ e-signature-list.c \
+ e-signature-utils.c \
+ e-signature.c \
+ mail-mt.c \
+ $(NULL)
+
+libemail_utils_la_LDFLAGS = $(NO_UNDEFINED)
+
+libemail_utils_la_LIBADD = \
+ $(EVOLUTION_DATA_SERVER_LIBS) \
+ $(GNOME_PLATFORM_LIBS) \
+ $(NULL)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libemail-utils.pc
+
+DISTCLEANFILES = $(pkgconfig_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/e-util/e-account-utils.c b/libemail-utils/e-account-utils.c
index 6e64d45747..6e64d45747 100644
--- a/e-util/e-account-utils.c
+++ b/libemail-utils/e-account-utils.c
diff --git a/e-util/e-account-utils.h b/libemail-utils/e-account-utils.h
index d7dbd283fd..d7dbd283fd 100644
--- a/e-util/e-account-utils.h
+++ b/libemail-utils/e-account-utils.h
diff --git a/e-util/e-signature-list.c b/libemail-utils/e-signature-list.c
index afc1d9eefd..afc1d9eefd 100644
--- a/e-util/e-signature-list.c
+++ b/libemail-utils/e-signature-list.c
diff --git a/e-util/e-signature-list.h b/libemail-utils/e-signature-list.h
index 866bc73b65..ebcb4b28e2 100644
--- a/e-util/e-signature-list.h
+++ b/libemail-utils/e-signature-list.h
@@ -26,7 +26,7 @@
#include <gconf/gconf-client.h>
#include <libedataserver/e-list.h>
-#include <e-util/e-signature.h>
+#include <libemail-utils/e-signature.h>
/* Standard GObject macros */
#define E_TYPE_SIGNATURE_LIST \
diff --git a/e-util/e-signature-utils.c b/libemail-utils/e-signature-utils.c
index 7a5a7829ac..ca46f053db 100644
--- a/e-util/e-signature-utils.c
+++ b/libemail-utils/e-signature-utils.c
@@ -31,7 +31,7 @@
#include <sys/wait.h>
#endif
-#include "e-util/e-util.h"
+#include <libedataserver/e-data-server-util.h>
static ESignatureList *global_signature_list;
diff --git a/e-util/e-signature-utils.h b/libemail-utils/e-signature-utils.h
index 56f8564131..a642a136f1 100644
--- a/e-util/e-signature-utils.h
+++ b/libemail-utils/e-signature-utils.h
@@ -21,8 +21,8 @@
#define E_SIGNATURE_UTILS_H
#include <gtk/gtk.h>
-#include <e-util/e-signature.h>
-#include <e-util/e-signature-list.h>
+#include <libemail-utils/e-signature.h>
+#include <libemail-utils/e-signature-list.h>
G_BEGIN_DECLS
diff --git a/e-util/e-signature.c b/libemail-utils/e-signature.c
index 1b49389a82..1b49389a82 100644
--- a/e-util/e-signature.c
+++ b/libemail-utils/e-signature.c
diff --git a/e-util/e-signature.h b/libemail-utils/e-signature.h
index fad1faffa3..fad1faffa3 100644
--- a/e-util/e-signature.h
+++ b/libemail-utils/e-signature.h
diff --git a/libemail-utils/libemail-utils.pc.in b/libemail-utils/libemail-utils.pc.in
new file mode 100644
index 0000000000..384147b793
--- /dev/null
+++ b/libemail-utils/libemail-utils.pc.in
@@ -0,0 +1,15 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+
+privincludedir=@privincludedir@
+
+Name: libemail-utils
+Description: Client library for evolution mail
+Version: @VERSION@
+Requires: camel-1.2 libedataserver-1.2 gio-2.0
+Libs: -L${libdir} -lemail-utils
+Cflags: -I${privincludedir}
diff --git a/mail/mail-mt.c b/libemail-utils/mail-mt.c
index 526571f61f..e932bd6e93 100644
--- a/mail/mail-mt.c
+++ b/libemail-utils/mail-mt.c
@@ -28,9 +28,6 @@
#include <libedataserver/e-flag.h>
-#include <e-util/e-alert-sink.h>
-#include <shell/e-shell-view.h>
-
#include "mail-mt.h"
/*#define MALLOC_CHECK*/
@@ -47,6 +44,29 @@ static GHashTable *mail_msg_active_table;
static GMutex *mail_msg_lock;
static GCond *mail_msg_cond;
+static MailMsgCreateActivityFunc create_activity = NULL;
+static MailMsgSubmitActivityFunc submit_acitivity = NULL;
+static MailMsgFreeActivityFunc free_activity = NULL;
+static MailMsgCompleteActivityFunc complete_activity = NULL;
+static MailMsgAlertErrorFunc alert_error = NULL;
+static MailMsgCancelActivityFunc cancel_activity = NULL;
+
+void mail_msg_register_activities (MailMsgCreateActivityFunc acreate,
+ MailMsgSubmitActivityFunc asubmit,
+ MailMsgFreeActivityFunc freeact,
+ MailMsgCompleteActivityFunc comp_act,
+ MailMsgCancelActivityFunc cancel_act,
+ MailMsgAlertErrorFunc ealert)
+{
+ /* This is a utter hack to keep EActivity out of EDS and still let Evolution do EActivity */
+ create_activity = acreate;
+ submit_acitivity = asubmit;
+ free_activity = freeact;
+ complete_activity = comp_act;
+ cancel_activity = cancel_act;
+ alert_error = ealert;
+}
+
static void
mail_msg_cancelled (CamelOperation *operation,
gpointer user_data)
@@ -54,18 +74,13 @@ mail_msg_cancelled (CamelOperation *operation,
mail_msg_cancel (GPOINTER_TO_UINT (user_data));
}
+
static gboolean
-mail_msg_submit (EActivity *activity)
+mail_msg_submit (CamelOperation *cancellable)
{
- EShell *shell;
- EShellBackend *shell_backend;
-
- shell = e_shell_get_default ();
- shell_backend = e_shell_get_backend_by_name (
- shell, shell_builtin_backend);
-
- e_shell_backend_add_activity (shell_backend, activity);
+ if (submit_acitivity)
+ submit_acitivity ((GCancellable *)cancellable);
return FALSE;
}
@@ -73,7 +88,6 @@ gpointer
mail_msg_new (MailMsgInfo *info)
{
MailMsg *msg;
- GCancellable *cancellable;
g_mutex_lock (mail_msg_lock);
@@ -81,20 +95,17 @@ mail_msg_new (MailMsgInfo *info)
msg->info = info;
msg->ref_count = 1;
msg->seq = mail_msg_seq++;
- msg->activity = e_activity_new ();
- cancellable = camel_operation_new ();
-
- e_activity_set_percent (msg->activity, 0.0);
- e_activity_set_cancellable (msg->activity, cancellable);
+ msg->cancellable = camel_operation_new ();
+
+ if (create_activity)
+ create_activity (msg->cancellable);
g_signal_connect (
- cancellable, "cancelled",
+ msg->cancellable, "cancelled",
G_CALLBACK (mail_msg_cancelled),
GINT_TO_POINTER (msg->seq));
- g_object_unref (cancellable);
-
g_hash_table_insert (
mail_msg_active_table, GINT_TO_POINTER (msg->seq), msg);
@@ -134,8 +145,11 @@ mail_msg_free (MailMsg *mail_msg)
{
/* This is an idle callback. */
- if (mail_msg->activity != NULL)
- g_object_unref (mail_msg->activity);
+ if (free_activity)
+ free_activity (mail_msg->cancellable);
+
+ if (mail_msg->cancellable != NULL)
+ g_object_unref (mail_msg->cancellable);
if (mail_msg->error != NULL)
g_error_free (mail_msg->error);
@@ -196,14 +210,7 @@ mail_msg_unref (gpointer msg)
void
mail_msg_check_error (gpointer msg)
{
- EShell *shell;
- EShellView *shell_view;
- EShellWindow *shell_window = NULL;
- EShellContent *shell_content;
- GtkApplication *application;
MailMsg *m = msg;
- gchar *what;
- GList *list, *iter;
#ifdef MALLOC_CHECK
checkmem (m);
@@ -211,13 +218,17 @@ mail_msg_check_error (gpointer msg)
checkmem (m->priv);
#endif
- if (e_activity_handle_cancellation (m->activity, m->error))
+ if (m->error == NULL)
return;
- e_activity_set_state (m->activity, E_ACTIVITY_COMPLETED);
+ if (complete_activity)
+ complete_activity (m->cancellable);
- if (m->error == NULL)
+ if (g_error_matches (m->error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ if (cancel_activity)
+ cancel_activity (m->cancellable);
return;
+ }
/* XXX Hmm, no explanation of why this is needed. It looks like
* a lame hack and will be removed at some point, if only to
@@ -226,38 +237,17 @@ mail_msg_check_error (gpointer msg)
if (g_error_matches (m->error, CAMEL_FOLDER_ERROR, CAMEL_FOLDER_ERROR_INVALID_UID))
return;
- shell = e_shell_get_default ();
- application = GTK_APPLICATION (shell);
- list = gtk_application_get_windows (application);
+ /* FIXME: Submit an error on the dbus */
+ if (alert_error) {
+ char *what;
- /* Find the most recently used EShellWindow. */
- for (iter = list; iter != NULL; iter = g_list_next (iter)) {
- if (E_IS_SHELL_WINDOW (iter->data)) {
- shell_window = E_SHELL_WINDOW (iter->data);
- break;
- }
+ if (m->info->desc && (what = m->info->desc (m))) {
+ alert_error (m->cancellable, what, m->error->message);
+ g_free (what);
+ } else
+ alert_error (m->cancellable, NULL, m->error->message);
}
-
- /* If we can't find an EShellWindow then... well, screw it. */
- if (shell_window == NULL)
- return;
-
- shell_view = e_shell_window_get_shell_view (
- shell_window, shell_builtin_backend);
- shell_content = e_shell_view_get_shell_content (shell_view);
-
- if (m->info->desc && (what = m->info->desc (m))) {
- e_alert_submit (
- E_ALERT_SINK (shell_content),
- "mail:async-error", what,
- m->error->message, NULL);
- g_free (what);
- } else
- e_alert_submit (
- E_ALERT_SINK (shell_content),
- "mail:async-error-nodescribe",
- m->error->message, NULL);
-}
+}
void
mail_msg_cancel (guint msgid)
@@ -273,7 +263,7 @@ mail_msg_cancel (guint msgid)
/* Hold a reference to the GCancellable so it doesn't finalize
* itself on us between unlocking the mutex and cancelling. */
if (msg != NULL) {
- cancellable = e_activity_get_cancellable (msg->activity);
+ cancellable = msg->cancellable;
if (g_cancellable_is_cancelled (cancellable))
cancellable = NULL;
else
@@ -371,12 +361,12 @@ mail_msg_idle_cb (void)
while ((msg = g_async_queue_try_pop (main_loop_queue)) != NULL) {
GCancellable *cancellable;
- cancellable = e_activity_get_cancellable (msg->activity);
+ cancellable = msg->cancellable;
g_idle_add_full (
G_PRIORITY_DEFAULT,
(GSourceFunc) mail_msg_submit,
- g_object_ref (msg->activity),
+ g_object_ref (msg->cancellable),
(GDestroyNotify) g_object_unref);
if (msg->info->exec != NULL)
msg->info->exec (msg, cancellable, &msg->error);
@@ -400,7 +390,7 @@ mail_msg_proxy (MailMsg *msg)
{
GCancellable *cancellable;
- cancellable = e_activity_get_cancellable (msg->activity);
+ cancellable = msg->cancellable;
if (msg->info->desc != NULL) {
gchar *text = msg->info->desc (msg);
@@ -411,7 +401,7 @@ mail_msg_proxy (MailMsg *msg)
g_idle_add_full (
G_PRIORITY_DEFAULT,
(GSourceFunc) mail_msg_submit,
- g_object_ref (msg->activity),
+ g_object_ref (msg->cancellable),
(GDestroyNotify) g_object_unref);
if (msg->info->exec != NULL)
@@ -584,10 +574,13 @@ do_call (struct _call_msg *m,
break;
}
- e_activity_set_state (
- m->base.activity,
- g_cancellable_is_cancelled (cancellable) ?
- E_ACTIVITY_CANCELLED : E_ACTIVITY_COMPLETED);
+ if (g_cancellable_is_cancelled (cancellable)) {
+ if (cancel_activity)
+ cancel_activity (cancellable);
+ } else {
+ if (complete_activity)
+ complete_activity (cancellable);
+ }
if (m->done != NULL)
e_flag_set (m->done);
@@ -618,7 +611,7 @@ mail_call_main (mail_call_t type,
m->func = func;
G_VA_COPY (m->ap, ap);
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
if (mail_in_main_thread ())
do_call (m, cancellable, &m->base.error);
diff --git a/mail/mail-mt.h b/libemail-utils/mail-mt.h
index 0b595072b6..52da408f70 100644
--- a/mail/mail-mt.h
+++ b/libemail-utils/mail-mt.h
@@ -24,7 +24,6 @@
#define _MAIL_MT
#include <camel/camel.h>
-#include <e-util/e-activity.h>
typedef struct _MailMsg MailMsg;
typedef struct _MailMsgInfo MailMsgInfo;
@@ -37,12 +36,20 @@ typedef void (*MailMsgDoneFunc) (MailMsg *msg);
typedef void (*MailMsgFreeFunc) (MailMsg *msg);
typedef void (*MailMsgDispatchFunc) (gpointer msg);
+
+typedef void (*MailMsgCreateActivityFunc) (GCancellable *cancellable);
+typedef void (*MailMsgSubmitActivityFunc) (GCancellable *cancellable);
+typedef void (*MailMsgFreeActivityFunc) (GCancellable *cancellable);
+typedef void (*MailMsgCompleteActivityFunc) (GCancellable *cancellable);
+typedef void (*MailMsgCancelActivityFunc) (GCancellable *cancellable);
+typedef void (*MailMsgAlertErrorFunc) (GCancellable *cancellable, const char *what, const char *message);
+
struct _MailMsg {
MailMsgInfo *info;
volatile gint ref_count;
guint seq; /* seq number for synchronisation */
gint priority; /* priority (default = 0) */
- EActivity *activity;
+ GCancellable *cancellable;
GError *error; /* up to the caller to use this */
};
@@ -56,6 +63,12 @@ struct _MailMsgInfo {
/* setup ports */
void mail_msg_init (void);
+void mail_msg_register_activities (MailMsgCreateActivityFunc,
+ MailMsgSubmitActivityFunc,
+ MailMsgFreeActivityFunc,
+ MailMsgCompleteActivityFunc,
+ MailMsgCancelActivityFunc,
+ MailMsgAlertErrorFunc);
gboolean mail_in_main_thread (void);
diff --git a/mail/Makefile.am b/mail/Makefile.am
index 8310cff129..b80d56cb8e 100644
--- a/mail/Makefile.am
+++ b/mail/Makefile.am
@@ -4,14 +4,6 @@ privsolib_LTLIBRARIES = libevolution-mail.la
mailincludedir = $(privincludedir)/mail
-include $(top_srcdir)/glib-gen.mak
-glib_enum_headers=e-mail-enums.h
-glib_enum_output=e-mail-enumtypes
-glib_enum_define=E_MAIL
-glib_enum_prefix=e_mail
-
-ENUM_GENERATED = e-mail-enumtypes.h e-mail-enumtypes.c
-
libevolution_mail_la_CPPFLAGS = \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/widgets \
@@ -53,11 +45,7 @@ mailinclude_HEADERS = \
e-mail-backend.h \
e-mail-browser.h \
e-mail-display.h \
- e-mail-enums.h \
- e-mail-enumtypes.h \
e-mail-folder-pane.h \
- e-mail-folder-utils.h \
- e-mail-junk-filter.h \
e-mail-junk-options.h \
e-mail-label-action.h \
e-mail-label-dialog.h \
@@ -70,10 +58,8 @@ mailinclude_HEADERS = \
e-mail-paned-view.h \
e-mail-reader-utils.h \
e-mail-reader.h \
- e-mail-session-utils.h \
- e-mail-session.h \
+ e-mail-ui-session.h \
e-mail-sidebar.h \
- e-mail-store-utils.h \
e-mail-tag-editor.h \
e-mail-view.h \
em-account-editor.h \
@@ -104,13 +90,8 @@ mailinclude_HEADERS = \
em-vfolder-editor.h \
em-vfolder-rule.h \
mail-autofilter.h \
- mail-config.h \
- mail-folder-cache.h \
mail-guess-servers.h \
- mail-mt.h \
- mail-ops.h \
mail-send-recv.h \
- mail-tools.h \
mail-vfolder.h \
message-list.h
@@ -129,10 +110,7 @@ libevolution_mail_la_SOURCES = \
e-mail-backend.c \
e-mail-browser.c \
e-mail-display.c \
- e-mail-enumtypes.c \
e-mail-folder-pane.c \
- e-mail-folder-utils.c \
- e-mail-junk-filter.c \
e-mail-junk-options.c \
e-mail-label-action.c \
e-mail-label-dialog.c \
@@ -145,10 +123,8 @@ libevolution_mail_la_SOURCES = \
e-mail-paned-view.c \
e-mail-reader-utils.c \
e-mail-reader.c \
- e-mail-session-utils.c \
- e-mail-session.c \
+ e-mail-ui-session.c \
e-mail-sidebar.c \
- e-mail-store-utils.c \
e-mail-tag-editor.c \
e-mail-view.c \
em-account-editor.c \
@@ -179,13 +155,8 @@ libevolution_mail_la_SOURCES = \
em-vfolder-editor.c \
em-vfolder-rule.c \
mail-autofilter.c \
- mail-config.c \
- mail-folder-cache.c \
mail-guess-servers.c \
- mail-mt.c \
- mail-ops.c \
mail-send-recv.c \
- mail-tools.c \
mail-vfolder.c \
message-list.c
@@ -202,6 +173,8 @@ SMIME_LIBS = \
endif
libevolution_mail_la_LIBADD = \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/shell/libeshell.la \
$(top_builddir)/composer/libcomposer.la \
@@ -307,7 +280,7 @@ endif
dist-hook:
cd $(distdir); rm -f $(BUILT_SOURCES)
-BUILT_SOURCES = $(error_DATA) $(ENUM_GENERATED)
+BUILT_SOURCES = $(error_DATA)
CLEANFILES = $(BUILT_SOURCES)
diff --git a/mail/e-mail-account-manager.c b/mail/e-mail-account-manager.c
index 522e26e94c..86a0bf5e4b 100644
--- a/mail/e-mail-account-manager.c
+++ b/mail/e-mail-account-manager.c
@@ -22,7 +22,7 @@
#include <glib/gi18n-lib.h>
#include <gdk/gdkkeysyms.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
#include <mail/e-mail-account-tree-view.h>
#define E_MAIL_ACCOUNT_MANAGER_GET_PRIVATE(obj) \
diff --git a/mail/e-mail-account-manager.h b/mail/e-mail-account-manager.h
index 23f7890500..63e52b463c 100644
--- a/mail/e-mail-account-manager.h
+++ b/mail/e-mail-account-manager.h
@@ -20,8 +20,8 @@
#define E_MAIL_ACCOUNT_MANAGER_H
#include <gtk/gtk.h>
-#include <e-util/e-account-utils.h>
#include <mail/e-mail-account-store.h>
+#include <libemail-utils/e-account-utils.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_ACCOUNT_MANAGER \
diff --git a/mail/e-mail-account-store.c b/mail/e-mail-account-store.c
index e5a630850c..c14f75e4e5 100644
--- a/mail/e-mail-account-store.c
+++ b/mail/e-mail-account-store.c
@@ -25,9 +25,11 @@
#include <libebackend/e-extensible.h>
#include <e-util/e-marshal.h>
-#include <e-util/e-account-utils.h>
#include <e-util/e-alert-dialog.h>
-#include <mail/mail-ops.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-engine/mail-ops.h>
+
#include <mail/mail-vfolder.h>
#define E_MAIL_ACCOUNT_STORE_GET_PRIVATE(obj) \
@@ -462,9 +464,16 @@ mail_account_store_service_removed (EMailAccountStore *store,
EAccountList *account_list;
EAccount *account;
+ EMailSession *session;
+ MailFolderCache *cache;
CamelProvider *provider;
const gchar *uid;
+ session = e_mail_account_store_get_session (store);
+ cache = e_mail_session_get_folder_cache (session);
+
+ mail_folder_cache_service_removed (cache, service);
+
account_list = e_get_account_list ();
uid = camel_service_get_uid (service);
account = e_get_account_by_uid (uid);
@@ -497,9 +506,16 @@ mail_account_store_service_enabled (EMailAccountStore *store,
* The 'busy_count' is bumped until changes are written back
* to the D-Bus service. For now I guess we'll just block. */
+ EMailSession *session;
+ MailFolderCache *cache;
GSettings *settings;
const gchar *uid;
+ session = e_mail_account_store_get_session (store);
+ cache = e_mail_session_get_folder_cache (session);
+
+ mail_folder_cache_service_enabled (cache, service);
+
uid = camel_service_get_uid (service);
/* Handle built-in services that don't have an EAccount. */
@@ -541,9 +557,16 @@ mail_account_store_service_disabled (EMailAccountStore *store,
* The 'busy_count' is bumped until changes are written back
* to the D-Bus service. For now I guess we'll just block. */
+ EMailSession *session;
+ MailFolderCache *cache;
GSettings *settings;
const gchar *uid;
+ session = e_mail_account_store_get_session (store);
+ cache = e_mail_session_get_folder_cache (session);
+
+ mail_folder_cache_service_disabled (cache, service);
+
uid = camel_service_get_uid (service);
/* Handle built-in services that don't have an EAccount. */
@@ -1096,6 +1119,10 @@ e_mail_account_store_add_service (EMailAccountStore *store,
/* This populates the rest of the columns. */
mail_account_store_update_row (store, service, &iter);
+ /* No need to connect to "service-added" emissions since it's
+ * always immediately followed by either "service-enabled" or
+ * "service-disabled" in MailFolderCache */
+
g_signal_emit (store, signals[SERVICE_ADDED], 0, service);
if (enabled)
@@ -1115,7 +1142,7 @@ e_mail_account_store_remove_service (EMailAccountStore *store,
CamelService *service)
{
GtkTreeIter iter;
- gboolean proceed = TRUE;
+ gboolean proceed;
g_return_if_fail (E_IS_MAIL_ACCOUNT_STORE (store));
g_return_if_fail (CAMEL_IS_SERVICE (service));
@@ -1148,7 +1175,7 @@ e_mail_account_store_enable_service (EMailAccountStore *store,
CamelService *service)
{
GtkTreeIter iter;
- gboolean proceed = TRUE;
+ gboolean proceed;
g_return_if_fail (E_IS_MAIL_ACCOUNT_STORE (store));
g_return_if_fail (CAMEL_IS_SERVICE (service));
@@ -1166,7 +1193,6 @@ e_mail_account_store_enable_service (EMailAccountStore *store,
gtk_list_store_set (
GTK_LIST_STORE (store), &iter,
E_MAIL_ACCOUNT_STORE_COLUMN_ENABLED, TRUE, -1);
-
g_signal_emit (store, signals[SERVICE_ENABLED], 0, service);
}
}
@@ -1177,7 +1203,7 @@ e_mail_account_store_disable_service (EMailAccountStore *store,
CamelService *service)
{
GtkTreeIter iter;
- gboolean proceed = TRUE;
+ gboolean proceed;
g_return_if_fail (E_IS_MAIL_ACCOUNT_STORE (store));
g_return_if_fail (CAMEL_IS_SERVICE (service));
@@ -1195,7 +1221,6 @@ e_mail_account_store_disable_service (EMailAccountStore *store,
gtk_list_store_set (
GTK_LIST_STORE (store), &iter,
E_MAIL_ACCOUNT_STORE_COLUMN_ENABLED, FALSE, -1);
-
g_signal_emit (store, signals[SERVICE_DISABLED], 0, service);
}
}
diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c
index 2f769e9c42..921b2d0efc 100644
--- a/mail/e-mail-backend.c
+++ b/mail/e-mail-backend.c
@@ -32,26 +32,29 @@
#include <glib/gstdio.h>
#include <libedataserver/e-data-server-util.h>
-#include "e-util/e-account-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-alert-sink.h"
-
-#include "misc/e-account-combo-box.h"
-
-#include "shell/e-shell.h"
-
-#include "mail/e-mail-folder-utils.h"
-#include "mail/e-mail-migrate.h"
-#include "mail/e-mail-session.h"
-#include "mail/e-mail-store-utils.h"
-#include "mail/em-event.h"
-#include "mail/em-folder-tree-model.h"
-#include "mail/em-utils.h"
-#include "mail/mail-autofilter.h"
-#include "mail/mail-config.h"
-#include "mail/mail-folder-cache.h"
-#include "mail/mail-ops.h"
-#include "mail/mail-vfolder.h"
+#include <shell/e-shell.h>
+
+#include <e-util/e-alert-dialog.h>
+#include <e-util/e-alert-sink.h>
+
+#include <misc/e-account-combo-box.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/e-mail-store-utils.h>
+#include <libemail-engine/mail-config.h>
+#include <libemail-engine/mail-folder-cache.h>
+#include <libemail-engine/mail-ops.h>
+
+#include <mail/e-mail-migrate.h>
+#include <mail/e-mail-ui-session.h>
+#include <mail/em-event.h>
+#include <mail/em-folder-tree-model.h>
+#include <mail/em-utils.h>
+#include <mail/mail-autofilter.h>
+#include <mail/mail-send-recv.h>
+#include <mail/mail-vfolder.h>
#define E_MAIL_BACKEND_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
@@ -760,6 +763,132 @@ mail_backend_finalize (GObject *object)
}
static void
+mail_backend_add_store (EMailSession *session,
+ CamelStore *store,
+ EMailBackend *backend)
+{
+ EMFolderTreeModel *model;
+
+ model = em_folder_tree_model_get_default ();
+ em_folder_tree_model_add_store (model, store);
+}
+
+static void
+mail_backend_remove_store (EMailSession *session,
+ CamelStore *store,
+ EMailBackend *backend)
+{
+ EMFolderTreeModel *model;
+
+ model = em_folder_tree_model_get_default ();
+ em_folder_tree_model_remove_store (model, store);
+}
+
+#define SET_ACITIVITY(cancellable, activity) \
+ g_object_set_data (G_OBJECT (cancellable), "e-activity", activity)
+#define GET_ACITIVITY(cancellable) \
+ g_object_get_data (G_OBJECT (cancellable), "e-activity")
+
+static void
+mail_mt_create_activity (GCancellable *cancellable)
+{
+ EActivity *activity;
+
+ activity = e_activity_new ();
+ e_activity_set_percent (activity, 0.0);
+ e_activity_set_cancellable (activity, cancellable);
+ SET_ACITIVITY (cancellable, activity);
+}
+
+static void
+mail_mt_submit_activity (GCancellable *cancellable)
+{
+ EShell *shell;
+ EShellBackend *shell_backend;
+ EActivity *activity;
+
+ shell = e_shell_get_default ();
+ shell_backend = e_shell_get_backend_by_name (
+ shell, "mail");
+
+ activity = GET_ACITIVITY (cancellable);
+ if (activity)
+ e_shell_backend_add_activity (shell_backend, activity);
+
+}
+
+static void
+mail_mt_free_activity (GCancellable *cancellable)
+{
+ EActivity *activity = GET_ACITIVITY (cancellable);
+
+ if (activity)
+ g_object_unref (activity);
+}
+
+static void
+mail_mt_complete_acitivity (GCancellable *cancellable)
+{
+ EActivity *activity = GET_ACITIVITY (cancellable);
+
+ if (activity)
+ e_activity_set_state (activity, E_ACTIVITY_COMPLETED);
+}
+
+static void
+mail_mt_cancel_activity (GCancellable *cancellable)
+{
+ EActivity *activity = GET_ACITIVITY (cancellable);
+
+ if (activity)
+ e_activity_set_state (activity, E_ACTIVITY_CANCELLED);
+}
+
+static void
+mail_mt_alert_error (GCancellable *cancellable,
+ const char *what,
+ const char *message)
+{
+ EShell *shell;
+ EShellView *shell_view;
+ EShellWindow *shell_window = NULL;
+ EShellContent *shell_content;
+ GList *list, *iter;
+ GtkApplication *application;
+
+ shell = e_shell_get_default ();
+ application = GTK_APPLICATION (shell);
+ list = gtk_application_get_windows (application);
+
+ /* Find the most recently used EShellWindow. */
+ for (iter = list; iter != NULL; iter = g_list_next (iter)) {
+ if (E_IS_SHELL_WINDOW (iter->data)) {
+ shell_window = E_SHELL_WINDOW (iter->data);
+ break;
+ }
+ }
+
+ /* If we can't find an EShellWindow then... well, screw it. */
+ if (shell_window == NULL)
+ return;
+
+ shell_view = e_shell_window_get_shell_view (
+ shell_window, "mail");
+ shell_content = e_shell_view_get_shell_content (shell_view);
+
+ if (what) {
+ e_alert_submit (
+ E_ALERT_SINK (shell_content),
+ "mail:async-error", what,
+ message, NULL);
+ } else
+ e_alert_submit (
+ E_ALERT_SINK (shell_content),
+ "mail:async-error-nodescribe",
+ message, NULL);
+}
+
+static void
mail_backend_constructed (GObject *object)
{
EMailBackendPrivate *priv;
@@ -777,7 +906,11 @@ mail_backend_constructed (GObject *object)
camel_provider_init ();
- priv->session = e_mail_session_new ();
+ priv->session = e_mail_ui_session_new ();
+
+ g_signal_connect (
+ priv->session, "flush-outbox",
+ G_CALLBACK (mail_send), priv->session);
g_object_bind_property (
shell, "online",
@@ -806,6 +939,16 @@ mail_backend_constructed (GObject *object)
e_account_combo_box_set_session (CAMEL_SESSION (priv->session));
g_signal_connect (
+ priv->session, "store-added",
+ G_CALLBACK (mail_backend_add_store),
+ shell_backend);
+
+ g_signal_connect (
+ priv->session, "store-removed",
+ G_CALLBACK (mail_backend_remove_store),
+ shell_backend);
+
+ g_signal_connect (
shell, "prepare-for-offline",
G_CALLBACK (mail_backend_prepare_for_offline_cb),
shell_backend);
@@ -844,6 +987,14 @@ mail_backend_constructed (GObject *object)
mail_config_init (priv->session);
mail_msg_init ();
+ mail_msg_register_activities (
+ mail_mt_create_activity,
+ mail_mt_submit_activity,
+ mail_mt_free_activity,
+ mail_mt_complete_acitivity,
+ mail_mt_cancel_activity,
+ mail_mt_alert_error);
+
/* Chain up to parent's constructed() method. */
G_OBJECT_CLASS (e_mail_backend_parent_class)->constructed (object);
}
diff --git a/mail/e-mail-backend.h b/mail/e-mail-backend.h
index 6279d3fb5e..b44b330a9f 100644
--- a/mail/e-mail-backend.h
+++ b/mail/e-mail-backend.h
@@ -26,8 +26,8 @@
#ifndef E_MAIL_BACKEND_H
#define E_MAIL_BACKEND_H
-#include <mail/e-mail-session.h>
#include <shell/e-shell-backend.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_BACKEND \
diff --git a/mail/e-mail-folder-pane.c b/mail/e-mail-folder-pane.c
index 277228071e..7e0457e3bd 100644
--- a/mail/e-mail-folder-pane.c
+++ b/mail/e-mail-folder-pane.c
@@ -30,18 +30,22 @@
#include "e-util/e-util.h"
#include "e-util/e-plugin-ui.h"
+
#include "shell/e-shell.h"
#include "shell/e-shell-utils.h"
+
#include "widgets/misc/e-popup-action.h"
#include "widgets/misc/e-preview-pane.h"
+#include "libemail-engine/e-mail-utils.h"
+#include "libemail-engine/mail-tools.h"
+
#include "mail/e-mail-reader.h"
#include "mail/e-mail-reader-utils.h"
#include "mail/em-folder-tree-model.h"
#include "mail/em-format-html-display.h"
#include "mail/em-composer-utils.h"
#include "mail/em-utils.h"
-#include "mail/mail-tools.h"
#include "mail/message-list.h"
#define E_MAIL_FOLDER_PANE_GET_PRIVATE(obj) \
diff --git a/mail/e-mail-junk-options.c b/mail/e-mail-junk-options.c
index d57e1d6dc6..e2c670c688 100644
--- a/mail/e-mail-junk-options.c
+++ b/mail/e-mail-junk-options.c
@@ -21,7 +21,7 @@
#include <config.h>
#include <glib/gi18n-lib.h>
-#include <mail/e-mail-junk-filter.h>
+#include <libemail-engine/e-mail-junk-filter.h>
#define E_MAIL_JUNK_OPTIONS_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
diff --git a/mail/e-mail-junk-options.h b/mail/e-mail-junk-options.h
index 5e2c99faf7..7e9108e7b7 100644
--- a/mail/e-mail-junk-options.h
+++ b/mail/e-mail-junk-options.h
@@ -20,7 +20,7 @@
#define E_MAIL_JUNK_OPTIONS_H
#include <gtk/gtk.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_JUNK_OPTIONS \
diff --git a/mail/e-mail-migrate.c b/mail/e-mail-migrate.c
index fdf5684e0a..3b7de4c387 100644
--- a/mail/e-mail-migrate.c
+++ b/mail/e-mail-migrate.c
@@ -48,22 +48,25 @@
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
-#include <e-util/e-util.h>
#include <libedataserver/e-xml-utils.h>
#include <libedataserver/e-data-server-util.h>
+
+#include <shell/e-shell.h>
+#include <shell/e-shell-migrate.h>
+
+#include <e-util/e-util.h>
#include <e-util/e-xml-utils.h>
-#include "e-util/e-account-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-util-private.h"
-#include "e-util/e-plugin.h"
-#include "e-util/e-signature-utils.h"
+#include <e-util/e-alert-dialog.h>
+#include <e-util/e-util-private.h>
+#include <e-util/e-plugin.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/e-signature-utils.h>
-#include "shell/e-shell.h"
-#include "shell/e-shell-migrate.h"
+#include <libemail-engine/e-mail-folder-utils.h>
#include "e-mail-backend.h"
-#include "e-mail-folder-utils.h"
#include "em-utils.h"
#define d(x) x
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c
index 0232b92423..5d100cfc21 100644
--- a/mail/e-mail-notebook-view.c
+++ b/mail/e-mail-notebook-view.c
@@ -31,7 +31,7 @@
#include "mail/em-folder-tree.h"
#include "e-mail-notebook-view.h"
#include "e-mail-folder-pane.h"
-#include "e-mail-folder-utils.h"
+#include "libemail-engine/e-mail-folder-utils.h"
#include "e-mail-message-pane.h"
#include <shell/e-shell-window-actions.h>
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index 0098462de1..7a510e3ebd 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -38,11 +38,13 @@
#include <shell/e-shell-window-actions.h>
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-utils.h>
+#include <libemail-engine/mail-config.h>
+#include <libemail-engine/mail-ops.h>
+
#include "em-utils.h"
-#include "mail-config.h"
-#include "mail-ops.h"
#include "message-list.h"
-#include "e-mail-folder-utils.h"
#include "e-mail-reader-utils.h"
#define E_MAIL_PANED_VIEW_GET_PRIVATE(obj) \
diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c
index bd51c97e1f..c814435119 100644
--- a/mail/e-mail-reader-utils.c
+++ b/mail/e-mail-reader-utils.c
@@ -37,15 +37,17 @@
#include "misc/e-web-view.h"
#include "shell/e-shell-utils.h"
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-utils.h>
+#include <libemail-engine/mail-ops.h>
+#include <libemail-engine/mail-tools.h>
+
#include "mail/e-mail-backend.h"
#include "mail/e-mail-browser.h"
-#include "mail/e-mail-folder-utils.h"
#include "mail/em-composer-utils.h"
#include "mail/em-format-html-print.h"
#include "mail/em-utils.h"
#include "mail/mail-autofilter.h"
-#include "mail/mail-ops.h"
-#include "mail/mail-tools.h"
#include "mail/mail-vfolder.h"
#include "mail/message-list.h"
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 5c67c62d02..37c92fbf78 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -32,7 +32,6 @@
#include <X11/XF86keysym.h>
#endif
-#include "e-util/e-account-utils.h"
#include "e-util/e-charset.h"
#include "e-util/e-util.h"
#include "e-util/e-alert-dialog.h"
@@ -40,10 +39,16 @@
#include "widgets/misc/e-popup-action.h"
#include "widgets/misc/e-menu-tool-action.h"
+#include "libemail-utils/e-account-utils.h"
+#include "libemail-utils/mail-mt.h"
+
+#include "libemail-engine/mail-ops.h"
+#include "libemail-engine/e-mail-utils.h"
+#include "libemail-engine/e-mail-enumtypes.h"
+
#include "mail/e-mail-backend.h"
#include "mail/e-mail-browser.h"
#include "mail/e-mail-display.h"
-#include "mail/e-mail-enumtypes.h"
#include "mail/e-mail-reader-utils.h"
#include "mail/e-mail-view.h"
#include "mail/em-composer-utils.h"
@@ -52,8 +57,6 @@
#include "mail/em-folder-tree.h"
#include "mail/em-utils.h"
#include "mail/mail-autofilter.h"
-#include "mail/mail-ops.h"
-#include "mail/mail-mt.h"
#include "mail/mail-vfolder.h"
#include "mail/message-list.h"
diff --git a/mail/e-mail-sidebar.h b/mail/e-mail-sidebar.h
index a88c3ccc15..bdde4c1090 100644
--- a/mail/e-mail-sidebar.h
+++ b/mail/e-mail-sidebar.h
@@ -22,8 +22,8 @@
#ifndef E_MAIL_SIDEBAR_H
#define E_MAIL_SIDEBAR_H
-#include <mail/e-mail-session.h>
#include <mail/em-folder-tree.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define E_TYPE_MAIL_SIDEBAR \
diff --git a/mail/e-mail-ui-session.c b/mail/e-mail-ui-session.c
new file mode 100644
index 0000000000..dcb2e25573
--- /dev/null
+++ b/mail/e-mail-ui-session.c
@@ -0,0 +1,904 @@
+/*
+ * e-mail-ui-session.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Jonathon Jongsma <jonathon.jongsma@collabora.co.uk>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ * Copyright (C) 2009 Intel Corporation
+ *
+ */
+
+/* mail-session.c: handles the session information and resource manipulation */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+
+#include <gtk/gtk.h>
+
+
+#ifdef HAVE_CANBERRA
+#include <canberra-gtk.h>
+#endif
+
+#include <libedataserver/e-flag.h>
+#include <libedataserver/e-proxy.h>
+#include <libebackend/e-extensible.h>
+#include <libedataserverui/e-passwords.h>
+
+#include "e-mail-account-store.h"
+
+#include "e-util/e-util.h"
+#include "libemail-utils/e-account-utils.h"
+#include "e-util/e-alert-dialog.h"
+#include "e-util/e-util-private.h"
+
+#include "shell/e-shell.h"
+#include "shell/e-shell-view.h"
+#include "shell/e-shell-content.h"
+#include "shell/e-shell-window.h"
+
+#include "libemail-engine/e-mail-folder-utils.h"
+#include "libemail-engine/e-mail-junk-filter.h"
+#include "libemail-engine/e-mail-session.h"
+#include "e-mail-ui-session.h"
+#include "em-composer-utils.h"
+#include "em-filter-context.h"
+#include "em-filter-rule.h"
+#include "em-utils.h"
+#include "libemail-engine/mail-config.h"
+#include "libemail-utils/mail-mt.h"
+#include "libemail-engine/mail-ops.h"
+#include "mail-send-recv.h"
+#include "libemail-engine/mail-tools.h"
+
+#define E_MAIL_UI_SESSION_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_MAIL_UI_SESSION, EMailUISessionPrivate))
+
+typedef struct _SourceContext SourceContext;
+
+struct _EMailUISessionPrivate {
+ FILE *filter_logfile;
+ CamelStore *vfolder_store;
+ EMailAccountStore *account_store;
+ EMailLabelListStore *label_store;
+
+ EAccountList *account_list;
+ gulong account_changed_handler_id;
+};
+
+enum {
+ PROP_0,
+ PROP_ACCOUNT_STORE,
+ PROP_LABEL_STORE,
+ PROP_VFOLDER_STORE
+};
+
+enum {
+ ACTIVITY_ADDED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE_WITH_CODE (
+ EMailUISession,
+ e_mail_ui_session,
+ E_TYPE_MAIL_SESSION,
+ G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL))
+
+struct _SourceContext {
+ EMailUISession *session;
+ CamelService *service;
+};
+
+/* Support for CamelSession.alert_user() *************************************/
+
+static gpointer user_message_dialog;
+static GQueue user_message_queue = { NULL, NULL, 0 };
+
+struct _user_message_msg {
+ MailMsg base;
+
+ CamelSessionAlertType type;
+ gchar *prompt;
+ GSList *button_captions;
+ EFlag *done;
+
+ gint result;
+ guint ismain : 1;
+};
+
+static void user_message_exec (struct _user_message_msg *m,
+ GCancellable *cancellable,
+ GError **error);
+
+static void
+user_message_response_free (GtkDialog *dialog,
+ gint button)
+{
+ struct _user_message_msg *m = NULL;
+
+ gtk_widget_destroy ((GtkWidget *) dialog);
+
+ user_message_dialog = NULL;
+
+ /* check for pendings */
+ if (!g_queue_is_empty (&user_message_queue)) {
+ GCancellable *cancellable;
+
+ m = g_queue_pop_head (&user_message_queue);
+ cancellable = m->base.cancellable;
+ user_message_exec (m, cancellable, &m->base.error);
+ mail_msg_unref (m);
+ }
+}
+
+/* clicked, send back the reply */
+static void
+user_message_response (GtkDialog *dialog,
+ gint button,
+ struct _user_message_msg *m)
+{
+ /* if !m or !button_captions, then we've already replied */
+ if (m && m->button_captions) {
+ m->result = button;
+ e_flag_set (m->done);
+ }
+
+ user_message_response_free (dialog, button);
+}
+
+static void
+user_message_exec (struct _user_message_msg *m,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean info_only;
+ GtkWindow *parent;
+ EShell *shell;
+ const gchar *error_type;
+ gint index;
+ GSList *iter;
+
+ info_only = g_slist_length (m->button_captions) <= 1;
+
+ if (!m->ismain && user_message_dialog != NULL && !info_only) {
+ g_queue_push_tail (&user_message_queue, mail_msg_ref (m));
+ return;
+ }
+
+ switch (m->type) {
+ case CAMEL_SESSION_ALERT_INFO:
+ error_type = "mail:session-message-info";
+ break;
+ case CAMEL_SESSION_ALERT_WARNING:
+ error_type = "mail:session-message-warning";
+ break;
+ case CAMEL_SESSION_ALERT_ERROR:
+ error_type = "mail:session-message-error";
+ break;
+ default:
+ error_type = NULL;
+ g_return_if_reached ();
+ }
+
+ shell = e_shell_get_default ();
+
+ /* try to find "mail" view to place the informational alert to */
+ if (info_only) {
+ GtkWindow *active_window;
+ EShellWindow *shell_window;
+ EShellView *shell_view;
+ EShellContent *shell_content = NULL;
+
+ /* check currently active window first, ... */
+ active_window = e_shell_get_active_window (shell);
+ if (active_window && E_IS_SHELL_WINDOW (active_window)) {
+ if (E_IS_SHELL_WINDOW (active_window)) {
+ shell_window = E_SHELL_WINDOW (active_window);
+ shell_view = e_shell_window_peek_shell_view (shell_window, "mail");
+ if (shell_view)
+ shell_content = e_shell_view_get_shell_content (shell_view);
+ }
+ }
+
+ if (!shell_content) {
+ GList *list, *iter;
+
+ list = gtk_application_get_windows (GTK_APPLICATION (shell));
+
+ /* ...then iterate through all opened windows and pick one which has it */
+ for (iter = list; iter != NULL && !shell_content; iter = g_list_next (iter)) {
+ if (E_IS_SHELL_WINDOW (iter->data)) {
+ shell_window = iter->data;
+ shell_view = e_shell_window_peek_shell_view (shell_window, "mail");
+ if (shell_view)
+ shell_content = e_shell_view_get_shell_content (shell_view);
+ }
+ }
+ }
+
+ /* when no shell-content found, which might not happen, but just in case,
+ process the information alert like usual, through an EAlertDialog machinery
+ */
+ if (shell_content) {
+ e_alert_submit (E_ALERT_SINK (shell_content), error_type, m->prompt, NULL);
+ return;
+ } else if (!m->ismain && user_message_dialog != NULL) {
+ g_queue_push_tail (&user_message_queue, mail_msg_ref (m));
+ return;
+ }
+ }
+
+ /* Pull in the active window from the shell to get a parent window */
+ parent = e_shell_get_active_window (shell);
+ user_message_dialog = e_alert_dialog_new_for_args (
+ parent, error_type, m->prompt, NULL);
+ g_object_set (user_message_dialog, "resizable", TRUE, NULL);
+
+ if (m->button_captions) {
+ GtkWidget *action_area;
+ GList *children, *child;
+
+ /* remove all default buttons and keep only those requested */
+ action_area = gtk_dialog_get_action_area (GTK_DIALOG (user_message_dialog));
+
+ children = gtk_container_get_children (GTK_CONTAINER (action_area));
+ for (child = children; child != NULL; child = child->next) {
+ gtk_container_remove (GTK_CONTAINER (action_area), child->data);
+ }
+
+ g_list_free (children);
+ }
+
+ for (index = 0, iter = m->button_captions; iter; index++, iter = iter->next) {
+ gtk_dialog_add_button (GTK_DIALOG (user_message_dialog), iter->data, index);
+ }
+
+
+ /* XXX This is a case where we need to be able to construct
+ * custom EAlerts without a predefined XML definition. */
+ if (m->ismain) {
+ gint response;
+
+ response = gtk_dialog_run (user_message_dialog);
+ user_message_response (
+ user_message_dialog, response, m);
+ } else {
+ gpointer user_data = m;
+
+ if (g_slist_length (m->button_captions) <= 1)
+ user_data = NULL;
+
+ g_signal_connect (
+ user_message_dialog, "response",
+ G_CALLBACK (user_message_response), user_data);
+ gtk_widget_show (user_message_dialog);
+ }
+}
+
+static void
+user_message_free (struct _user_message_msg *m)
+{
+ g_free (m->prompt);
+ g_slist_free_full (m->button_captions, g_free);
+ e_flag_free (m->done);
+}
+
+static MailMsgInfo user_message_info = {
+ sizeof (struct _user_message_msg),
+ (MailMsgDescFunc) NULL,
+ (MailMsgExecFunc) user_message_exec,
+ (MailMsgDoneFunc) NULL,
+ (MailMsgFreeFunc) user_message_free
+};
+
+/* Support for CamelSession.get_filter_driver () *****************************/
+
+static CamelFolder *
+get_folder (CamelFilterDriver *d,
+ const gchar *uri,
+ gpointer user_data,
+ GError **error)
+{
+ EMailSession *session = E_MAIL_SESSION (user_data);
+
+ /* FIXME Not passing a GCancellable here. */
+ /* FIXME Need a camel_filter_driver_get_session(). */
+ return e_mail_session_uri_to_folder_sync (
+ session, uri, 0, NULL, error);
+}
+
+static gboolean
+session_play_sound_cb (const gchar *filename)
+{
+#ifdef HAVE_CANBERRA
+ if (filename != NULL && *filename != '\0')
+ ca_context_play (
+ ca_gtk_context_get (), 0,
+ CA_PROP_MEDIA_FILENAME, filename,
+ NULL);
+ else
+#endif
+ gdk_beep ();
+
+ return FALSE;
+}
+
+static void
+session_play_sound (CamelFilterDriver *driver,
+ const gchar *filename,
+ gpointer user_data)
+{
+ g_idle_add_full (
+ G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc) session_play_sound_cb,
+ g_strdup (filename), (GDestroyNotify) g_free);
+}
+
+static void
+session_system_beep (CamelFilterDriver *driver,
+ gpointer user_data)
+{
+ g_idle_add ((GSourceFunc) session_play_sound_cb, NULL);
+}
+
+static CamelFilterDriver *
+main_get_filter_driver (CamelSession *session,
+ const gchar *type,
+ GError **error)
+{
+ EMailSession *ms = E_MAIL_SESSION (session);
+ CamelFilterDriver *driver;
+ EFilterRule *rule = NULL;
+ const gchar *config_dir;
+ gchar *user, *system;
+ GSettings *settings;
+ ERuleContext *fc;
+ EMailUISessionPrivate *priv;
+
+ priv = E_MAIL_UI_SESSION_GET_PRIVATE (session);
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+
+ config_dir = mail_session_get_config_dir ();
+ user = g_build_filename (config_dir, "filters.xml", NULL);
+ system = g_build_filename (EVOLUTION_PRIVDATADIR, "filtertypes.xml", NULL);
+ fc = (ERuleContext *) em_filter_context_new (ms);
+ e_rule_context_load (fc, system, user);
+ g_free (system);
+ g_free (user);
+
+ driver = camel_filter_driver_new (session);
+ camel_filter_driver_set_folder_func (driver, get_folder, session);
+
+ if (g_settings_get_boolean (settings, "filters-log-actions")) {
+ if (priv->filter_logfile == NULL) {
+ gchar *filename;
+
+ filename = g_settings_get_string (settings, "filters-log-file");
+ if (filename) {
+ priv->filter_logfile = g_fopen (filename, "a+");
+ g_free (filename);
+ }
+ }
+
+ if (priv->filter_logfile)
+ camel_filter_driver_set_logfile (driver, priv->filter_logfile);
+ }
+
+ camel_filter_driver_set_shell_func (driver, mail_execute_shell_command, NULL);
+ camel_filter_driver_set_play_sound_func (driver, session_play_sound, NULL);
+ camel_filter_driver_set_system_beep_func (driver, session_system_beep, NULL);
+
+ if ((!strcmp (type, E_FILTER_SOURCE_INCOMING) ||
+ !strcmp (type, E_FILTER_SOURCE_JUNKTEST))
+ && camel_session_get_check_junk (session)) {
+
+ /* implicit junk check as 1st rule */
+ camel_filter_driver_add_rule (
+ driver, "Junk check", "(junk-test)",
+ "(begin (set-system-flag \"junk\"))");
+ }
+
+ if (strcmp (type, E_FILTER_SOURCE_JUNKTEST) != 0) {
+ GString *fsearch, *faction;
+
+ fsearch = g_string_new ("");
+ faction = g_string_new ("");
+
+ if (!strcmp (type, E_FILTER_SOURCE_DEMAND))
+ type = E_FILTER_SOURCE_INCOMING;
+
+ /* add the user-defined rules next */
+ while ((rule = e_rule_context_next_rule (fc, rule, type))) {
+ g_string_truncate (fsearch, 0);
+ g_string_truncate (faction, 0);
+
+ /* skip disabled rules */
+ if (!rule->enabled)
+ continue;
+
+ e_filter_rule_build_code (rule, fsearch);
+ em_filter_rule_build_action (
+ EM_FILTER_RULE (rule), faction);
+ camel_filter_driver_add_rule (
+ driver, rule->name,
+ fsearch->str, faction->str);
+ }
+
+ g_string_free (fsearch, TRUE);
+ g_string_free (faction, TRUE);
+ }
+
+ g_object_unref (fc);
+
+ g_object_unref (settings);
+
+ return driver;
+}
+
+static void
+source_context_free (SourceContext *context)
+{
+ if (context->session != NULL)
+ g_object_unref (context->session);
+
+ if (context->service != NULL)
+ g_object_unref (context->service);
+
+ g_slice_free (SourceContext, context);
+}
+
+static void
+mail_ui_session_dispose (GObject *object)
+{
+ EMailUISessionPrivate *priv;
+
+ priv = E_MAIL_UI_SESSION_GET_PRIVATE (object);
+
+ if (priv->account_store != NULL) {
+ e_mail_account_store_clear (priv->account_store);
+ g_object_unref (priv->account_store);
+ priv->account_store = NULL;
+ }
+
+ if (priv->label_store != NULL) {
+ g_object_unref (priv->label_store);
+ priv->label_store = NULL;
+ }
+
+
+ if (priv->vfolder_store != NULL) {
+ g_object_unref (priv->vfolder_store);
+ priv->vfolder_store = NULL;
+ }
+
+ if (priv->account_list != NULL) {
+ g_signal_handler_disconnect (
+ priv->account_list,
+ priv->account_changed_handler_id);
+ g_object_unref (priv->account_list);
+ priv->account_list = NULL;
+ }
+
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (e_mail_ui_session_parent_class)->dispose (object);
+}
+
+static void
+mail_ui_session_add_vfolder_store (EMailUISession *uisession)
+{
+ CamelSession *camel_session;
+ CamelService *service;
+ GError *error = NULL;
+
+ camel_session = CAMEL_SESSION (uisession);
+
+ service = camel_session_add_service (
+ camel_session, E_MAIL_SESSION_VFOLDER_UID,
+ "vfolder", CAMEL_PROVIDER_STORE, &error);
+
+ if (error != NULL) {
+ g_critical ("%s: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_return_if_fail (CAMEL_IS_SERVICE (service));
+
+ camel_service_set_display_name (service, _("Search Folders"));
+ em_utils_connect_service_sync (service, NULL, NULL);
+
+ /* XXX There's more configuration to do in vfolder_load_storage()
+ * but it requires an EMailBackend, which we don't have access
+ * to from here, so it has to be called from elsewhere. Kinda
+ * thinking about reworking that... */
+
+ uisession->priv->vfolder_store = g_object_ref (service);
+}
+
+static void
+mail_ui_session_account_changed_cb (EAccountList *account_list,
+ EAccount *account,
+ EMailSession *session)
+{
+ EMFolderTreeModel *folder_tree_model;
+ CamelService *service;
+
+ service = camel_session_get_service (
+ CAMEL_SESSION (session), account->uid);
+
+ if (!CAMEL_IS_STORE (service))
+ return;
+
+ /* Update the display name of the corresponding CamelStore.
+ * EMailAccountStore listens for "notify" signals from each
+ * service so it will detect this and update the model.
+ *
+ * XXX If EAccount defined GObject properties we could just
+ * bind EAccount:name to CamelService:display-name and
+ * be done with it. Oh well.
+ */
+
+ camel_service_set_display_name (service, account->name);
+
+ /* Remove the store from the folder tree model and, if the
+ * account is still enabled, re-add it. Easier than trying
+ * to update the model with the store in place.
+ *
+ * em_folder_tree_model_add_store() already knows which types
+ * of stores to disregard, so we don't have to deal with that
+ * here. */
+
+ folder_tree_model = em_folder_tree_model_get_default ();
+
+ em_folder_tree_model_remove_store (
+ folder_tree_model, CAMEL_STORE (service));
+
+ if (account->enabled)
+ em_folder_tree_model_add_store (
+ folder_tree_model, CAMEL_STORE (service));
+}
+
+static gboolean
+mail_ui_session_initialize_stores_idle (gpointer user_data)
+{
+ EMailUISession *session = user_data;
+ EMailAccountStore *account_store;
+ EAccount *account;
+
+ g_return_val_if_fail (session != NULL, FALSE);
+
+ account_store = e_mail_ui_session_get_account_store (session);
+
+ /* Initialize which account is default. */
+ account = e_get_default_account ();
+ if (account != NULL) {
+ CamelService *service;
+
+ service = camel_session_get_service (
+ CAMEL_SESSION (session), account->uid);
+ e_mail_account_store_set_default_service (
+ account_store, service);
+ }
+
+ return FALSE;
+}
+
+static void
+mail_ui_session_constructed (GObject *object)
+{
+ EMailUISessionPrivate *priv;
+ EMFolderTreeModel *folder_tree_model;
+ EMailSession *session;
+ EMailUISession *uisession;
+ EAccountList *account_list;
+ gulong handler_id;
+
+ session = E_MAIL_SESSION (object);
+ uisession = E_MAIL_UI_SESSION(object);
+ uisession->priv = priv = E_MAIL_UI_SESSION_GET_PRIVATE (object);
+
+ priv->account_store = e_mail_account_store_new (session);
+
+ account_list = e_get_account_list ();
+ uisession->priv->account_list = g_object_ref (account_list);
+
+ /* XXX Make sure the folder tree model is created before we
+ * add built-in CamelStores so it gets signals from the
+ * EMailAccountStore.
+ *
+ * XXX This is creating a circular reference. Perhaps the
+ * model should only hold a weak pointer to EMailSession?
+ *
+ * FIXME EMailSession should just own the default instance.
+ */
+ folder_tree_model = em_folder_tree_model_get_default ();
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_mail_ui_session_parent_class)->constructed (object);
+
+ em_folder_tree_model_set_session (folder_tree_model, session);
+
+ mail_ui_session_add_vfolder_store (uisession);
+
+ g_idle_add (mail_ui_session_initialize_stores_idle, object);
+
+ handler_id = g_signal_connect (
+ account_list, "account-changed",
+ G_CALLBACK (mail_ui_session_account_changed_cb), session);
+ priv->account_changed_handler_id = handler_id;
+
+}
+
+static gint
+mail_ui_session_alert_user (CamelSession *session,
+ CamelSessionAlertType type,
+ const gchar *prompt,
+ GSList *button_captions)
+{
+ struct _user_message_msg *m;
+ GCancellable *cancellable;
+ gint result = -1;
+ GSList *iter;
+
+ m = mail_msg_new (&user_message_info);
+ m->ismain = mail_in_main_thread ();
+ m->type = type;
+ m->prompt = g_strdup (prompt);
+ m->done = e_flag_new ();
+ m->button_captions = g_slist_copy (button_captions);
+
+ for (iter = m->button_captions; iter; iter = iter->next)
+ iter->data = g_strdup (iter->data);
+
+ if (g_slist_length (button_captions) > 1)
+ mail_msg_ref (m);
+
+ cancellable = m->base.cancellable;
+
+ if (m->ismain)
+ user_message_exec (m, cancellable, &m->base.error);
+ else
+ mail_msg_main_loop_push (m);
+
+ if (g_slist_length (button_captions) > 1) {
+ e_flag_wait (m->done);
+ result = m->result;
+ mail_msg_unref (m);
+ } else if (m->ismain)
+ mail_msg_unref (m);
+
+ return result;
+}
+
+static CamelFilterDriver *
+mail_ui_session_get_filter_driver (CamelSession *session,
+ const gchar *type,
+ GError **error)
+{
+ return (CamelFilterDriver *) mail_call_main (
+ MAIL_CALL_p_ppp, (MailMainFunc) main_get_filter_driver,
+ session, type, error);
+}
+
+static void
+mail_ui_session_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mail_ui_session_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_ACCOUNT_STORE:
+ g_value_set_object (
+ value,
+ e_mail_ui_session_get_account_store (
+ E_MAIL_UI_SESSION (object)));
+ return;
+
+ case PROP_LABEL_STORE:
+ g_value_set_object (
+ value,
+ e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (object)));
+ return;
+
+
+ case PROP_VFOLDER_STORE:
+ g_value_set_object (
+ value,
+ e_mail_ui_session_get_vfolder_store (
+ E_MAIL_UI_SESSION (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static gboolean
+mail_ui_session_add_service_cb (SourceContext *context)
+{
+ EMailAccountStore *store;
+
+ store = e_mail_ui_session_get_account_store (context->session);
+ e_mail_account_store_add_service (store, context->service);
+
+ return FALSE;
+}
+
+static CamelService *
+mail_ui_session_add_service (CamelSession *session,
+ const gchar *uid,
+ const gchar *protocol,
+ CamelProviderType type,
+ GError **error)
+{
+ CamelService *service;
+
+ /* Chain up to parent's constructed() method. */
+ service = CAMEL_SESSION_CLASS (e_mail_ui_session_parent_class)->
+ add_service (session, uid, protocol, type, error);
+
+ /* Inform the EMailAccountStore of the new CamelService
+ * from an idle callback so the service has a chance to
+ * fully initialize first. */
+ if (CAMEL_IS_STORE (service)) {
+ SourceContext *context;
+
+ context = g_slice_new0 (SourceContext);
+ context->session = g_object_ref (session);
+ context->service = g_object_ref (service);
+
+ g_idle_add_full (
+ G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc) mail_ui_session_add_service_cb,
+ context, (GDestroyNotify) source_context_free);
+ }
+
+ return service;
+}
+
+static void
+e_mail_ui_session_class_init (EMailUISessionClass *class)
+{
+ GObjectClass *object_class;
+ CamelSessionClass *session_class;
+
+ g_type_class_add_private (class, sizeof (EMailUISessionPrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = mail_ui_session_set_property;
+ object_class->get_property = mail_ui_session_get_property;
+ object_class->dispose = mail_ui_session_dispose;
+ object_class->constructed = mail_ui_session_constructed;
+
+ session_class = CAMEL_SESSION_CLASS (class);
+ session_class->alert_user = mail_ui_session_alert_user;
+ session_class->get_filter_driver = mail_ui_session_get_filter_driver;
+ session_class->add_service = mail_ui_session_add_service;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_VFOLDER_STORE,
+ g_param_spec_object (
+ "vfolder-store",
+ "Search Folder Store",
+ "Built-in search folder store",
+ CAMEL_TYPE_STORE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_LABEL_STORE,
+ g_param_spec_object (
+ "label-store",
+ "Label Store",
+ "Mail label store",
+ E_TYPE_MAIL_LABEL_LIST_STORE,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ signals[ACTIVITY_ADDED] = g_signal_new (
+ "activity-added",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EMailUISessionClass, activity_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ E_TYPE_ACTIVITY);
+}
+
+static void
+e_mail_ui_session_init (EMailUISession *session)
+{
+ session->priv = E_MAIL_UI_SESSION_GET_PRIVATE (session);
+ session->priv->label_store = e_mail_label_list_store_new ();
+}
+
+EMailSession *
+e_mail_ui_session_new (void)
+{
+ const gchar *user_data_dir;
+ const gchar *user_cache_dir;
+
+ user_data_dir = mail_session_get_data_dir ();
+ user_cache_dir = mail_session_get_cache_dir ();
+
+ return g_object_new (
+ E_TYPE_MAIL_UI_SESSION,
+ "user-data-dir", user_data_dir,
+ "user-cache-dir", user_cache_dir,
+ NULL);
+}
+
+
+EMailAccountStore *
+e_mail_ui_session_get_account_store (EMailUISession *session)
+{
+ g_return_val_if_fail (E_IS_MAIL_UI_SESSION (session), NULL);
+
+ return session->priv->account_store;
+}
+
+CamelStore *
+e_mail_ui_session_get_vfolder_store (EMailUISession *session)
+{
+ g_return_val_if_fail (E_IS_MAIL_UI_SESSION (session), NULL);
+
+ return session->priv->vfolder_store;
+}
+
+void
+e_mail_ui_session_add_activity (EMailUISession *session,
+ EActivity *activity)
+{
+ g_return_if_fail (E_IS_MAIL_UI_SESSION (session));
+ g_return_if_fail (E_IS_ACTIVITY (activity));
+
+ g_signal_emit (session, signals[ACTIVITY_ADDED], 0, activity);
+}
+
+EMailLabelListStore *
+e_mail_ui_session_get_label_store (EMailUISession *session)
+{
+ g_return_val_if_fail (E_IS_MAIL_UI_SESSION (session), NULL);
+
+ return session->priv->label_store;
+}
+
diff --git a/mail/e-mail-ui-session.h b/mail/e-mail-ui-session.h
new file mode 100644
index 0000000000..1a36487757
--- /dev/null
+++ b/mail/e-mail-ui-session.h
@@ -0,0 +1,93 @@
+/*
+ * e-mail-session.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Jeffrey Stedfast <fejj@ximian.com>
+ * Srinivasa Ragavan <sragavan@gnome.org>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifndef E_MAIL_UI_SESSION_H
+#define E_MAIL_UI_SESSION_H
+
+#include <camel/camel.h>
+#include <libemail-engine/e-mail-enums.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/mail-folder-cache.h>
+#include <mail/e-mail-account-store.h>
+#include <e-util/e-activity.h>
+
+#include <mail/e-mail-account-store.h>
+#include <mail/e-mail-label-list-store.h>
+
+/* Standard GObject macros */
+#define E_TYPE_MAIL_UI_SESSION \
+ (e_mail_ui_session_get_type ())
+#define E_MAIL_UI_SESSION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), E_TYPE_MAIL_UI_SESSION, EMailUISession))
+#define E_MAIL_UI_SESSION_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_CAST \
+ ((cls), E_TYPE_MAIL_UI_SESSION, EMailUISessionClass))
+#define E_IS_MAIL_UI_SESSION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE \
+ ((obj), E_TYPE_MAIL_UI_SESSION))
+#define E_IS_MAIL_UI_SESSION_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_TYPE \
+ ((cls), E_TYPE_MAIL_UI_SESSION))
+#define E_MAIL_UI_SESSION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS \
+ ((obj), E_TYPE_MAIL_UI_SESSION, EMailUISessionClass))
+
+G_BEGIN_DECLS
+
+typedef struct _EMailUISession EMailUISession;
+typedef struct _EMailUISessionClass EMailUISessionClass;
+typedef struct _EMailUISessionPrivate EMailUISessionPrivate;
+
+struct _EMailUISession {
+ EMailSession parent;
+ EMailUISessionPrivate *priv;
+};
+
+struct _EMailUISessionClass {
+ EMailSessionClass parent_class;
+
+ void (*activity_added) (EMailUISession *session,
+ EActivity *activity);
+
+};
+
+GType e_mail_ui_session_get_type (void);
+EMailSession * e_mail_ui_session_new (void);
+CamelStore * e_mail_ui_session_get_vfolder_store
+ (EMailUISession *session);
+EMailAccountStore *
+ e_mail_ui_session_get_account_store
+ (EMailUISession *session);
+void e_mail_ui_session_add_activity (EMailUISession *session,
+ EActivity *activity);
+EMailLabelListStore *
+ e_mail_ui_session_get_label_store
+ (EMailUISession *session);
+
+G_END_DECLS
+
+#endif /* E_MAIL_UI_SESSION_H */
diff --git a/mail/e-mail.h b/mail/e-mail.h
index 02c169cd10..3b34765784 100644
--- a/mail/e-mail.h
+++ b/mail/e-mail.h
@@ -26,7 +26,6 @@
#include <mail/e-mail-enums.h>
#include <mail/e-mail-enumtypes.h>
#include <mail/e-mail-folder-pane.h>
-#include <mail/e-mail-folder-utils.h>
#include <mail/e-mail-label-action.h>
#include <mail/e-mail-label-dialog.h>
#include <mail/e-mail-label-list-store.h>
@@ -38,10 +37,7 @@
#include <mail/e-mail-paned-view.h>
#include <mail/e-mail-reader.h>
#include <mail/e-mail-reader-utils.h>
-#include <mail/e-mail-session.h>
-#include <mail/e-mail-session-utils.h>
#include <mail/e-mail-sidebar.h>
-#include <mail/e-mail-store-utils.h>
#include <mail/e-mail-tag-editor.h>
#include <mail/e-mail-view.h>
diff --git a/mail/em-account-editor.c b/mail/em-account-editor.c
index 1fc17abc5e..8b7f1600d6 100644
--- a/mail/em-account-editor.c
+++ b/mail/em-account-editor.c
@@ -45,32 +45,38 @@
#include <libedataserverui/e-passwords.h>
-#include "shell/e-shell.h"
-#include "e-util/e-util.h"
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-signature-list.h"
-#include "e-util/e-signature-utils.h"
-#include "e-util/e-util-private.h"
-#include "widgets/misc/e-auth-combo-box.h"
-#include "widgets/misc/e-signature-editor.h"
-#include "widgets/misc/e-port-entry.h"
+#include <shell/e-shell.h>
+#include <e-util/e-util.h>
+#include <e-util/e-alert-dialog.h>
+#include <e-util/e-dialog-utils.h>
+#include <e-util/e-util-private.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/e-signature-list.h>
+#include <libemail-utils/e-signature-utils.h>
+#include <libemail-utils/mail-mt.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/mail-ops.h>
+
+#include <widgets/misc/e-auth-combo-box.h>
+#include <widgets/misc/e-signature-editor.h>
+#include <widgets/misc/e-port-entry.h>
+
+#include "e-mail-account-store.h"
#include "e-mail-backend.h"
-#include "e-mail-folder-utils.h"
#include "e-mail-junk-options.h"
+#include "e-mail-ui-session.h"
+#include "em-account-editor.h"
#include "em-config.h"
#include "em-folder-selection-button.h"
-#include "em-account-editor.h"
-#include "mail-send-recv.h"
#include "em-utils.h"
-#include "mail-ops.h"
-#include "mail-mt.h"
#include "mail-guess-servers.h"
+#include "mail-send-recv.h"
#if defined (HAVE_NSS) && defined (ENABLE_SMIME)
-#include "smime/gui/e-cert-selector.h"
+#include <smime/gui/e-cert-selector.h>
#endif
#define EM_ACCOUNT_EDITOR_GET_PRIVATE(obj) \
@@ -5501,7 +5507,7 @@ emae_commit (EConfig *ec,
service = camel_session_get_service (
CAMEL_SESSION (session), account->uid);
- store = e_mail_session_get_account_store (session);
+ store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION(session));
e_mail_account_store_set_default_service (store, service);
}
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index dc8d89725a..4d8e37d9a4 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -32,32 +32,35 @@
#include <libedataserver/e-data-server-util.h>
-#include "mail-mt.h"
-#include "mail-ops.h"
-#include "mail-tools.h"
-#include "mail-send-recv.h"
+#include <e-util/e-alert-dialog.h>
+#include <e-util/e-alert-sink.h>
+#include <e-util/e-util.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/e-mail-session-utils.h>
+#include <libemail-engine/mail-ops.h>
+#include <libemail-engine/mail-tools.h>
-#include "e-util/e-account-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-alert-sink.h"
-#include "e-util/e-util.h"
+#include <shell/e-shell.h>
-#include "shell/e-shell.h"
+#include <composer/e-msg-composer.h>
+#include <composer/e-composer-actions.h>
+#include <composer/e-composer-post-header.h>
-#include "e-mail-folder-utils.h"
-#include "e-mail-session.h"
-#include "e-mail-session-utils.h"
#include "em-utils.h"
#include "em-composer-utils.h"
-#include "composer/e-msg-composer.h"
-#include "composer/e-composer-actions.h"
-#include "composer/e-composer-post-header.h"
#include "em-folder-selector.h"
#include "em-folder-tree.h"
#include "em-format-html.h"
#include "em-format-html-print.h"
#include "em-format-quote.h"
#include "em-event.h"
+#include "mail-send-recv.h"
+
#ifdef G_OS_WIN32
#ifdef gmtime_r
diff --git a/mail/em-composer-utils.h b/mail/em-composer-utils.h
index 093001dfd0..5b3d3a469a 100644
--- a/mail/em-composer-utils.h
+++ b/mail/em-composer-utils.h
@@ -26,9 +26,9 @@
#include <em-format/em-format.h>
#include <mail/e-mail-backend.h>
-#include <mail/e-mail-enums.h>
#include <mail/e-mail-reader.h>
#include <composer/e-msg-composer.h>
+#include <libemail-engine/e-mail-enums.h>
G_BEGIN_DECLS
diff --git a/mail/em-filter-context.h b/mail/em-filter-context.h
index 3545bf16eb..1f8889d94c 100644
--- a/mail/em-filter-context.h
+++ b/mail/em-filter-context.h
@@ -25,8 +25,8 @@
#ifndef EM_FILTER_CONTEXT_H
#define EM_FILTER_CONTEXT_H
-#include <mail/e-mail-session.h>
#include <filter/e-rule-context.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_FILTER_CONTEXT \
diff --git a/mail/em-filter-folder-element.h b/mail/em-filter-folder-element.h
index f71b4c128b..f5a1741795 100644
--- a/mail/em-filter-folder-element.h
+++ b/mail/em-filter-folder-element.h
@@ -25,8 +25,8 @@
#ifndef EM_FILTER_FOLDER_ELEMENT_H
#define EM_FILTER_FOLDER_ELEMENT_H
-#include <mail/e-mail-session.h>
#include <filter/e-filter-element.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_FILTER_FOLDER_ELEMENT \
diff --git a/mail/em-filter-source-element.c b/mail/em-filter-source-element.c
index a8e51e2827..5848f938db 100644
--- a/mail/em-filter-source-element.c
+++ b/mail/em-filter-source-element.c
@@ -32,8 +32,8 @@
#include <gtk/gtk.h>
#include <camel/camel.h>
-#include <e-util/e-account-utils.h>
#include <filter/e-filter-part.h>
+#include <libemail-utils/e-account-utils.h>
#define EM_FILTER_SOURCE_ELEMENT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
diff --git a/mail/em-filter-source-element.h b/mail/em-filter-source-element.h
index 41c3f3f8fc..061a487fc8 100644
--- a/mail/em-filter-source-element.h
+++ b/mail/em-filter-source-element.h
@@ -24,8 +24,8 @@
#ifndef EM_FILTER_SOURCE_ELEMENT_H
#define EM_FILTER_SOURCE_ELEMENT_H
-#include <mail/e-mail-session.h>
#include <filter/e-filter-element.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_FILTER_SOURCE_ELEMENT \
diff --git a/mail/em-folder-properties.c b/mail/em-folder-properties.c
index 75ccf5304b..2abb1f366d 100644
--- a/mail/em-folder-properties.c
+++ b/mail/em-folder-properties.c
@@ -24,18 +24,20 @@
#include <config.h>
#endif
+#include "em-folder-properties.h"
+
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
-#include "em-folder-properties.h"
-#include "em-config.h"
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/mail-ops.h>
#include "e-mail-backend.h"
-#include "e-mail-folder-utils.h"
-#include "mail-ops.h"
-#include "mail-mt.h"
+#include "e-mail-ui-session.h"
+#include "em-config.h"
#include "mail-vfolder.h"
typedef struct _AsyncContext AsyncContext;
@@ -498,8 +500,8 @@ em_folder_properties_show (CamelStore *store,
cancellable = camel_operation_new ();
e_activity_set_cancellable (context->activity, cancellable);
- e_mail_session_add_activity (
- E_MAIL_SESSION (session), context->activity);
+ e_mail_ui_session_add_activity (
+ E_MAIL_UI_SESSION (session), context->activity);
camel_store_get_folder (
store, folder_name, 0, G_PRIORITY_DEFAULT, cancellable,
diff --git a/mail/em-folder-properties.h b/mail/em-folder-properties.h
index 704e43b6d3..2d829af17f 100644
--- a/mail/em-folder-properties.h
+++ b/mail/em-folder-properties.h
@@ -25,7 +25,8 @@
#define __EM_FOLDER_PROPERTIES_H__
#include <camel/camel.h>
-#include <mail/e-mail-session.h>
+#include <e-util/e-alert-sink.h>
+#include <libemail-engine/e-mail-session.h>
G_BEGIN_DECLS
diff --git a/mail/em-folder-selection-button.c b/mail/em-folder-selection-button.c
index 6e40234444..fb4e27d83b 100644
--- a/mail/em-folder-selection-button.c
+++ b/mail/em-folder-selection-button.c
@@ -28,7 +28,8 @@
#include <glib/gi18n.h>
#include <e-util/e-util.h>
-#include "e-mail-folder-utils.h"
+#include <libemail-engine/e-mail-folder-utils.h>
+
#include "em-folder-tree.h"
#include "em-folder-selector.h"
#include "em-utils.h"
diff --git a/mail/em-folder-selection-button.h b/mail/em-folder-selection-button.h
index 6e646e3af0..945f1dab0b 100644
--- a/mail/em-folder-selection-button.h
+++ b/mail/em-folder-selection-button.h
@@ -25,7 +25,7 @@
#define EM_FOLDER_SELECTION_BUTTON_H
#include <gtk/gtk.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_FOLDER_SELECTION_BUTTON \
diff --git a/mail/em-folder-selector.c b/mail/em-folder-selector.c
index 2f5b58274f..18172cb7a5 100644
--- a/mail/em-folder-selector.c
+++ b/mail/em-folder-selector.c
@@ -29,7 +29,8 @@
#include <glib/gi18n.h>
#include <e-util/e-util.h>
-#include "e-mail-session.h"
+#include <libemail-engine/e-mail-session.h>
+
#include "em-folder-tree.h"
#include "em-folder-selector.h"
#include "em-folder-utils.h"
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index c346435f80..7ee385c892 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -36,22 +36,22 @@
#include <glib/gi18n.h>
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
+#include <e-util/e-util.h>
+#include <shell/e-shell.h>
-#include "mail-tools.h"
-#include "mail-mt.h"
-#include "mail-ops.h"
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
-/* sigh, these 2 only needed for outbox total count checking - a mess */
-#include "mail-folder-cache.h"
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/mail-folder-cache.h>
+#include <libemail-engine/mail-tools.h>
+#include <libemail-engine/mail-ops.h>
-#include "em-utils.h"
-#include "em-folder-utils.h"
-#include "em-event.h"
-
-#include "e-mail-folder-utils.h"
-#include "shell/e-shell.h"
+#include <e-mail-account-store.h>
+#include <e-mail-ui-session.h>
+#include <em-utils.h>
+#include <em-folder-utils.h>
+#include <em-event.h>
#define EM_FOLDER_TREE_MODEL_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
@@ -573,7 +573,7 @@ em_folder_tree_model_set_session (EMFolderTreeModel *model,
MailFolderCache *folder_cache;
folder_cache = e_mail_session_get_folder_cache (session);
- account_store = e_mail_session_get_account_store (session);
+ account_store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION (session));
/* Keep our own reference since we connect to its signals. */
g_warn_if_fail (model->priv->account_store == NULL);
diff --git a/mail/em-folder-tree-model.h b/mail/em-folder-tree-model.h
index 1bf5483367..b4acb3dce6 100644
--- a/mail/em-folder-tree-model.h
+++ b/mail/em-folder-tree-model.h
@@ -26,7 +26,7 @@
#include <gtk/gtk.h>
#include <camel/camel.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_FOLDER_TREE_MODEL \
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index a1e4142cf6..46a8c108e8 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -48,11 +48,11 @@
#include "em-vfolder-rule.h"
-#include "mail-mt.h"
-#include "mail-ops.h"
-#include "mail-tools.h"
-#include "mail-send-recv.h"
-#include "mail-vfolder.h"
+#include "libemail-utils/mail-mt.h"
+#include "libemail-engine/e-mail-folder-utils.h"
+#include "libemail-engine/e-mail-session.h"
+#include "libemail-engine/mail-ops.h"
+#include "libemail-engine/mail-tools.h"
#include "em-utils.h"
#include "em-folder-tree.h"
@@ -60,9 +60,10 @@
#include "em-folder-selector.h"
#include "em-folder-properties.h"
#include "em-event.h"
+#include "mail-send-recv.h"
+#include "mail-vfolder.h"
-#include "e-mail-folder-utils.h"
-#include "e-mail-session.h"
+#include "e-mail-ui-session.h"
#define d(x)
@@ -1822,7 +1823,8 @@ em_folder_tree_new_activity (EMFolderTree *folder_tree)
g_object_unref (cancellable);
session = em_folder_tree_get_session (folder_tree);
- e_mail_session_add_activity (session, activity);
+ e_mail_ui_session_add_activity (
+ E_MAIL_UI_SESSION (session), activity);
return activity;
}
@@ -2036,7 +2038,7 @@ folder_tree_drop_folder (struct _DragDataReceivedAsync *m)
d(printf(" * Drop folder '%s' onto '%s'\n", data, m->full_name));
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
folder = e_mail_session_uri_to_folder_sync (
m->session, (gchar *) data, 0,
diff --git a/mail/em-folder-tree.h b/mail/em-folder-tree.h
index 6a60f2bc31..1e39ebab18 100644
--- a/mail/em-folder-tree.h
+++ b/mail/em-folder-tree.h
@@ -25,9 +25,10 @@
#define EM_FOLDER_TREE_H
#include <gtk/gtk.h>
+#include <e-util/e-activity.h>
#include <e-util/e-alert-sink.h>
-#include <mail/e-mail-session.h>
#include <mail/em-folder-tree-model.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_FOLDER_TREE \
diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c
index 825e6af7ca..1350df7c7b 100644
--- a/mail/em-folder-utils.c
+++ b/mail/em-folder-utils.c
@@ -45,22 +45,23 @@
#include "em-vfolder-rule.h"
-#include "mail-mt.h"
-#include "mail-ops.h"
-#include "mail-tools.h"
-#include "mail-vfolder.h"
-#include "mail-folder-cache.h"
-
+#include "libemail-utils/mail-mt.h"
+#include "libemail-engine/e-mail-folder-utils.h"
+#include "libemail-engine/e-mail-session.h"
+#include "libemail-engine/e-mail-store-utils.h"
+#include "libemail-engine/e-mail-utils.h"
+#include "libemail-engine/mail-ops.h"
+#include "libemail-engine/mail-tools.h"
+#include "libemail-engine/mail-folder-cache.h"
+
+#include "e-mail-ui-session.h"
#include "em-utils.h"
#include "em-folder-tree.h"
#include "em-folder-tree-model.h"
#include "em-folder-utils.h"
#include "em-folder-selector.h"
#include "em-folder-properties.h"
-
-#include "e-mail-folder-utils.h"
-#include "e-mail-session.h"
-#include "e-mail-store-utils.h"
+#include "mail-vfolder.h"
#define d(x)
@@ -567,7 +568,7 @@ em_folder_utils_create_folder (GtkWindow *parent,
model = em_folder_tree_model_new ();
em_folder_tree_model_set_session (model, session);
- account_store = e_mail_session_get_account_store (session);
+ account_store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION (session));
e_mail_account_store_queue_enabled_services (account_store, &queue);
while (!g_queue_is_empty (&queue)) {
diff --git a/mail/em-folder-utils.h b/mail/em-folder-utils.h
index 9211cacd90..db3853042c 100644
--- a/mail/em-folder-utils.h
+++ b/mail/em-folder-utils.h
@@ -26,7 +26,7 @@
#include <gtk/gtk.h>
#include <camel/camel.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
#include <mail/em-folder-tree.h>
G_BEGIN_DECLS
diff --git a/mail/em-format-html-print.c b/mail/em-format-html-print.c
index a600c5a48a..04216900bc 100644
--- a/mail/em-format-html-print.c
+++ b/mail/em-format-html-print.c
@@ -30,11 +30,13 @@
#include <gtk/gtk.h>
#include <gtkhtml/gtkhtml.h>
-#include "mail-ops.h"
-#include "mail-mt.h"
-#include "em-format-html-print.h"
#include <e-util/e-print.h>
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/mail-ops.h>
+
+#include "em-format-html-print.h"
+
G_DEFINE_TYPE (
EMFormatHTMLPrint,
em_format_html_print,
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index 706de09248..a720d2cc9f 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -57,12 +57,15 @@
#include <glib/gi18n.h>
-#include "e-mail-enumtypes.h"
+#include <libemail-utils/mail-mt.h>
+
+#include <libemail-engine/e-mail-enumtypes.h>
+#include <libemail-engine/e-mail-utils.h>
+#include <libemail-engine/mail-config.h>
+
#include "em-format-html.h"
#include "em-html-stream.h"
#include "em-utils.h"
-#include "mail-config.h"
-#include "mail-mt.h"
#define EM_FORMAT_HTML_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
diff --git a/mail/em-format-html.h b/mail/em-format-html.h
index 7ded2e82f9..954a54ea0c 100644
--- a/mail/em-format-html.h
+++ b/mail/em-format-html.h
@@ -29,9 +29,9 @@
#define EM_FORMAT_HTML_H
#include <em-format/em-format.h>
-#include <mail/e-mail-enums.h>
#include <misc/e-web-view.h>
#include <gtkhtml/gtkhtml-embedded.h>
+#include <libemail-engine/e-mail-enums.h>
/* Standard GObject macros */
#define EM_TYPE_FORMAT_HTML \
diff --git a/mail/em-subscription-editor.c b/mail/em-subscription-editor.c
index 15f7a3be32..ceefe7ca49 100644
--- a/mail/em-subscription-editor.c
+++ b/mail/em-subscription-editor.c
@@ -25,12 +25,12 @@
#include <string.h>
#include <glib/gi18n-lib.h>
-#include "mail-tools.h"
-#include "mail-ops.h"
-#include "mail-mt.h"
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/mail-tools.h>
+#include <libemail-engine/mail-ops.h>
#include <e-util/e-util.h>
-#include <e-util/e-account-utils.h>
#include <e-util/e-util-private.h>
#include "em-folder-utils.h"
diff --git a/mail/em-subscription-editor.h b/mail/em-subscription-editor.h
index c6f6c258f0..b9abedb166 100644
--- a/mail/em-subscription-editor.h
+++ b/mail/em-subscription-editor.h
@@ -21,7 +21,7 @@
#include <gtk/gtk.h>
#include <camel/camel.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_SUBSCRIPTION_EDITOR \
diff --git a/mail/em-sync-stream.c b/mail/em-sync-stream.c
index 06f96ecd83..841d890e41 100644
--- a/mail/em-sync-stream.c
+++ b/mail/em-sync-stream.c
@@ -32,7 +32,7 @@
#include <glib/gi18n-lib.h>
#include <libedataserver/e-flag.h>
-#include "mail-mt.h"
+#include <libemail-utils/mail-mt.h>
enum _write_msg_t {
EMSS_WRITE,
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 416588cfbb..247b47d967 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -41,38 +41,40 @@
#undef interface
#endif
-#include <libebook/e-book-client.h>
-#include <libebook/e-book-query.h>
-
#include "em-filter-editor.h"
#include <glib/gi18n.h>
#include <gio/gio.h>
-#include "mail-mt.h"
-#include "mail-ops.h"
-#include "mail-tools.h"
-#include "e-mail-tag-editor.h"
-
+#include <libebook/e-book-client.h>
+#include <libebook/e-book-query.h>
#include <libedataserver/e-data-server-util.h>
#include <libedataserver/e-flag.h>
#include <libedataserver/e-proxy.h>
-#include "e-util/e-util.h"
-#include "e-util/e-util-private.h"
-#include "e-util/e-mktemp.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "shell/e-shell.h"
-#include "widgets/misc/e-attachment.h"
-#include "em-utils.h"
+#include <e-util/e-util.h>
+#include <e-util/e-util-private.h>
+#include <e-util/e-mktemp.h>
+#include <e-util/e-dialog-utils.h>
+#include <e-util/e-alert-dialog.h>
+
+#include <shell/e-shell.h>
+#include <widgets/misc/e-attachment.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/mail-ops.h>
+#include <libemail-engine/mail-tools.h>
+
+#include "e-mail-tag-editor.h"
#include "em-composer-utils.h"
#include "em-format-quote.h"
#include "em-format-html-print.h"
-#include "e-mail-folder-utils.h"
-#include "e-mail-session.h"
+#include "em-utils.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. */
@@ -1107,202 +1109,6 @@ em_utils_selection_get_urilist (GtkSelectionData *selection_data,
g_strfreev (uris);
}
-/**
- * em_utils_folder_is_templates:
- * @folder: a #CamelFolder
- *
- * Decides if @folder is a Templates folder.
- *
- * Returns %TRUE if this is a Templates folder or %FALSE otherwise.
- **/
-
-gboolean
-em_utils_folder_is_templates (CamelFolder *folder)
-{
- CamelFolder *local_templates_folder;
- CamelSession *session;
- CamelStore *store;
- EAccountList *account_list;
- EIterator *iterator;
- gchar *folder_uri;
- gboolean is_templates = FALSE;
-
- g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
- store = camel_folder_get_parent_store (folder);
- session = camel_service_get_session (CAMEL_SERVICE (store));
-
- local_templates_folder =
- e_mail_session_get_local_folder (
- E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_TEMPLATES);
-
- if (folder == local_templates_folder)
- return TRUE;
-
- folder_uri = e_mail_folder_uri_from_folder (folder);
-
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
-
- while (!is_templates && e_iterator_is_valid (iterator)) {
- EAccount *account;
-
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
-
- if (account->templates_folder_uri != NULL)
- is_templates = e_mail_folder_uri_equal (
- session, folder_uri,
- account->templates_folder_uri);
-
- e_iterator_next (iterator);
- }
-
- g_object_unref (iterator);
- g_free (folder_uri);
-
- return is_templates;
-}
-
-/**
- * em_utils_folder_is_drafts:
- * @folder: a #CamelFolder
- *
- * Decides if @folder is a Drafts folder.
- *
- * Returns %TRUE if this is a Drafts folder or %FALSE otherwise.
- **/
-gboolean
-em_utils_folder_is_drafts (CamelFolder *folder)
-{
- CamelFolder *local_drafts_folder;
- CamelSession *session;
- CamelStore *store;
- EAccountList *account_list;
- EIterator *iterator;
- gchar *folder_uri;
- gboolean is_drafts = FALSE;
-
- g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
- store = camel_folder_get_parent_store (folder);
- session = camel_service_get_session (CAMEL_SERVICE (store));
-
- local_drafts_folder =
- e_mail_session_get_local_folder (
- E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_DRAFTS);
-
- if (folder == local_drafts_folder)
- return TRUE;
-
- folder_uri = e_mail_folder_uri_from_folder (folder);
-
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
-
- while (!is_drafts && e_iterator_is_valid (iterator)) {
- EAccount *account;
-
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
-
- if (account->drafts_folder_uri != NULL)
- is_drafts = e_mail_folder_uri_equal (
- session, folder_uri,
- account->drafts_folder_uri);
-
- e_iterator_next (iterator);
- }
-
- g_object_unref (iterator);
- g_free (folder_uri);
-
- return is_drafts;
-}
-
-/**
- * em_utils_folder_is_sent:
- * @folder: a #CamelFolder
- *
- * Decides if @folder is a Sent folder.
- *
- * Returns %TRUE if this is a Sent folder or %FALSE otherwise.
- **/
-gboolean
-em_utils_folder_is_sent (CamelFolder *folder)
-{
- CamelFolder *local_sent_folder;
- CamelSession *session;
- CamelStore *store;
- EAccountList *account_list;
- EIterator *iterator;
- gchar *folder_uri;
- gboolean is_sent = FALSE;
-
- g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
- store = camel_folder_get_parent_store (folder);
- session = camel_service_get_session (CAMEL_SERVICE (store));
-
- local_sent_folder =
- e_mail_session_get_local_folder (
- E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_SENT);
-
- if (folder == local_sent_folder)
- return TRUE;
-
- folder_uri = e_mail_folder_uri_from_folder (folder);
-
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
-
- while (!is_sent && e_iterator_is_valid (iterator)) {
- EAccount *account;
-
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
-
- if (account->sent_folder_uri != NULL)
- is_sent = e_mail_folder_uri_equal (
- session, folder_uri,
- account->sent_folder_uri);
-
- e_iterator_next (iterator);
- }
-
- g_object_unref (iterator);
- g_free (folder_uri);
-
- return is_sent;
-}
-
-/**
- * em_utils_folder_is_outbox:
- * @folder: a #CamelFolder
- *
- * Decides if @folder is an Outbox folder.
- *
- * Returns %TRUE if this is an Outbox folder or %FALSE otherwise.
- **/
-gboolean
-em_utils_folder_is_outbox (CamelFolder *folder)
-{
- CamelStore *store;
- CamelSession *session;
- CamelFolder *local_outbox_folder;
-
- g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
- store = camel_folder_get_parent_store (folder);
- session = camel_service_get_session (CAMEL_SERVICE (store));
-
- local_outbox_folder =
- e_mail_session_get_local_folder (
- E_MAIL_SESSION (session), E_MAIL_LOCAL_FOLDER_OUTBOX);
-
- return (folder == local_outbox_folder);
-}
-
/* ********************************************************************** */
static EProxy *emu_proxy = NULL;
static GStaticMutex emu_proxy_lock = G_STATIC_MUTEX_INIT;
@@ -1454,578 +1260,6 @@ em_utils_empty_trash (GtkWidget *parent,
/* ********************************************************************** */
-/* runs sync, in main thread */
-static gpointer
-emu_addr_setup (gpointer user_data)
-{
- GError *err = NULL;
- ESourceList **psource_list = user_data;
-
- if (!e_book_client_get_sources (psource_list, &err))
- g_error_free (err);
-
- return NULL;
-}
-
-static void
-emu_addr_cancel_stop (gpointer data)
-{
- gboolean *stop = data;
-
- g_return_if_fail (stop != NULL);
-
- *stop = TRUE;
-}
-
-static void
-emu_addr_cancel_cancellable (gpointer data)
-{
- GCancellable *cancellable = data;
-
- g_return_if_fail (cancellable != NULL);
-
- g_cancellable_cancel (cancellable);
-}
-
-struct TryOpenEBookStruct {
- GError **error;
- EFlag *flag;
- gboolean result;
-};
-
-static void
-try_open_book_client_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer closure)
-{
- EBookClient *book_client = E_BOOK_CLIENT (source_object);
- struct TryOpenEBookStruct *data = (struct TryOpenEBookStruct *) closure;
- GError *error = NULL;
-
- if (!data)
- return;
-
- e_client_open_finish (E_CLIENT (book_client), result, &error);
-
- data->result = error == NULL;
-
- if (!data->result) {
- g_clear_error (data->error);
- g_propagate_error (data->error, error);
- }
-
- e_flag_set (data->flag);
-}
-
-/*
- * try_open_book_client:
- * Tries to open address book asynchronously, but acts as synchronous.
- * The advantage is it checks periodically whether the camel_operation
- * has been canceled or not, and if so, then stops immediately, with
- * result FALSE. Otherwise returns same as e_client_open()
- */
-static gboolean
-try_open_book_client (EBookClient *book_client,
- gboolean only_if_exists,
- GCancellable *cancellable,
- GError **error)
-{
- struct TryOpenEBookStruct data;
- gboolean canceled = FALSE;
- EFlag *flag = e_flag_new ();
-
- data.error = error;
- data.flag = flag;
- data.result = FALSE;
-
- e_client_open (
- E_CLIENT (book_client), only_if_exists,
- cancellable, try_open_book_client_cb, &data);
-
- while (canceled = g_cancellable_is_cancelled (cancellable),
- !canceled && !e_flag_is_set (flag)) {
- GTimeVal wait;
-
- g_get_current_time (&wait);
- g_time_val_add (&wait, 250000); /* waits 250ms */
-
- e_flag_timed_wait (flag, &wait);
- }
-
- if (canceled) {
- g_cancellable_cancel (cancellable);
-
- g_clear_error (error);
- g_propagate_error (
- error, e_client_error_create (
- E_CLIENT_ERROR_CANCELLED, NULL));
- }
-
- e_flag_wait (flag);
- e_flag_free (flag);
-
- return data.result && (!error || !*error);
-}
-
-#define NOT_FOUND_BOOK (GINT_TO_POINTER (1))
-
-G_LOCK_DEFINE_STATIC (contact_cache);
-
-/* key is lowercased contact email; value is EBook pointer
- * (just for comparison) where it comes from */
-static GHashTable *contact_cache = NULL;
-
-/* key is source ID; value is pointer to EBook */
-static GHashTable *emu_books_hash = NULL;
-
-/* key is source ID; value is same pointer as key; this is hash of
- * broken books, which failed to open for some reason */
-static GHashTable *emu_broken_books_hash = NULL;
-
-static ESourceList *emu_books_source_list = NULL;
-
-static gboolean
-search_address_in_addressbooks (const gchar *address,
- gboolean local_only,
- gboolean (*check_contact) (EContact *contact,
- gpointer user_data),
- gpointer user_data)
-{
- gboolean found = FALSE, stop = FALSE, found_any = FALSE;
- gchar *lowercase_addr;
- gpointer ptr;
- EBookQuery *book_query;
- gchar *query;
- GSList *s, *g, *addr_sources = NULL;
- GHook *hook_cancellable;
- GCancellable *cancellable;
-
- if (!address || !*address)
- return FALSE;
-
- G_LOCK (contact_cache);
-
- if (!emu_books_source_list) {
- mail_call_main (
- MAIL_CALL_p_p, (MailMainFunc)
- emu_addr_setup, &emu_books_source_list);
- emu_books_hash = g_hash_table_new_full (
- g_str_hash, g_str_equal, g_free, g_object_unref);
- emu_broken_books_hash = g_hash_table_new_full (
- g_str_hash, g_str_equal, g_free, NULL);
- contact_cache = g_hash_table_new_full (
- g_str_hash, g_str_equal, g_free, NULL);
- }
-
- if (!emu_books_source_list) {
- G_UNLOCK (contact_cache);
- return FALSE;
- }
-
- lowercase_addr = g_utf8_strdown (address, -1);
- ptr = g_hash_table_lookup (contact_cache, lowercase_addr);
- if (ptr != NULL && (check_contact == NULL || ptr == NOT_FOUND_BOOK)) {
- g_free (lowercase_addr);
- G_UNLOCK (contact_cache);
- return ptr != NOT_FOUND_BOOK;
- }
-
- book_query = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_IS, address);
- query = e_book_query_to_string (book_query);
- e_book_query_unref (book_query);
-
- for (g = e_source_list_peek_groups (emu_books_source_list);
- g; g = g_slist_next (g)) {
- ESourceGroup *group = g->data;
-
- if (!group)
- continue;
-
- if (local_only && !(e_source_group_peek_base_uri (group) &&
- g_str_has_prefix (
- e_source_group_peek_base_uri (group), "local:")))
- continue;
-
- for (s = e_source_group_peek_sources (group); s; s = g_slist_next (s)) {
- ESource *source = s->data;
- const gchar *completion = e_source_get_property (source, "completion");
-
- if (completion && g_ascii_strcasecmp (completion, "true") == 0) {
- addr_sources = g_slist_prepend (addr_sources, g_object_ref (source));
- }
- }
- }
-
- cancellable = g_cancellable_new ();
- hook_cancellable = mail_cancel_hook_add (emu_addr_cancel_cancellable, cancellable);
-
- for (s = addr_sources; !stop && !found && s; s = g_slist_next (s)) {
- ESource *source = s->data;
- GSList *contacts;
- EBookClient *book_client = NULL;
- GHook *hook_stop;
- gboolean cached_book = FALSE;
- const gchar *display_name;
- const gchar *uid;
- GError *err = NULL;
-
- uid = e_source_peek_uid (source);
- display_name = e_source_peek_name (source);
-
- /* failed to load this book last time, skip it now */
- if (g_hash_table_lookup (emu_broken_books_hash, uid) != NULL) {
- d(printf ("%s: skipping broken book '%s'\n",
- G_STRFUNC, display_name));
- continue;
- }
-
- d(printf(" checking '%s'\n", e_source_get_uri(source)));
-
- hook_stop = mail_cancel_hook_add (emu_addr_cancel_stop, &stop);
-
- book_client = g_hash_table_lookup (emu_books_hash, uid);
- if (!book_client) {
- book_client = e_book_client_new (source, &err);
-
- if (book_client == NULL) {
- if (err && (g_error_matches (err, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
- g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))) {
- stop = TRUE;
- } else if (err) {
- gchar *source_uid;
-
- source_uid = g_strdup (uid);
-
- g_hash_table_insert (
- emu_broken_books_hash,
- source_uid, source_uid);
-
- g_warning (
- "%s: Unable to create addressbook '%s': %s",
- G_STRFUNC,
- display_name,
- err->message);
- }
- g_clear_error (&err);
- } else if (!stop && !try_open_book_client (book_client, TRUE, cancellable, &err)) {
- g_object_unref (book_client);
- book_client = NULL;
-
- if (err && (g_error_matches (err, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
- g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))) {
- stop = TRUE;
- } else if (err) {
- gchar *source_uid;
-
- source_uid = g_strdup (uid);
-
- g_hash_table_insert (
- emu_broken_books_hash,
- source_uid, source_uid);
-
- g_warning (
- "%s: Unable to open addressbook '%s': %s",
- G_STRFUNC,
- display_name,
- err->message);
- }
- g_clear_error (&err);
- }
- } else {
- cached_book = TRUE;
- }
-
- if (book_client && !stop && e_book_client_get_contacts_sync (book_client, query, &contacts, cancellable, &err)) {
- if (contacts != NULL) {
- if (!found_any) {
- g_hash_table_insert (contact_cache, g_strdup (lowercase_addr), book_client);
- }
- found_any = TRUE;
-
- if (check_contact) {
- GSList *l;
-
- for (l = contacts; l && !found; l = l->next) {
- EContact *contact = l->data;
-
- found = check_contact (contact, user_data);
- }
- } else {
- found = TRUE;
- }
-
- g_slist_foreach (contacts, (GFunc) g_object_unref, NULL);
- g_slist_free (contacts);
- }
- } else if (book_client) {
- stop = stop || (err &&
- (g_error_matches (err, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
- g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)));
- if (err && !stop) {
- gchar *source_uid = g_strdup (uid);
-
- g_hash_table_insert (emu_broken_books_hash, source_uid, source_uid);
-
- g_warning (
- "%s: Can't get contacts from '%s': %s",
- G_STRFUNC,
- display_name,
- err->message);
- }
- g_clear_error (&err);
- }
-
- mail_cancel_hook_remove (hook_stop);
-
- if (stop && !cached_book && book_client) {
- g_object_unref (book_client);
- } else if (!stop && book_client && !cached_book) {
- g_hash_table_insert (
- emu_books_hash, g_strdup (uid), book_client);
- }
- }
-
- mail_cancel_hook_remove (hook_cancellable);
- g_object_unref (cancellable);
-
- g_slist_free_full (addr_sources, (GDestroyNotify) g_object_unref);
-
- g_free (query);
-
- if (!found_any) {
- g_hash_table_insert (contact_cache, lowercase_addr, NOT_FOUND_BOOK);
- lowercase_addr = NULL;
- }
-
- G_UNLOCK (contact_cache);
-
- g_free (lowercase_addr);
-
- return found_any;
-}
-
-gboolean
-em_utils_in_addressbook (CamelInternetAddress *iaddr,
- gboolean local_only)
-{
- const gchar *addr;
-
- /* TODO: check all addresses? */
- if (iaddr == NULL || !camel_internet_address_get (iaddr, 0, NULL, &addr))
- return FALSE;
-
- return search_address_in_addressbooks (addr, local_only, NULL, NULL);
-}
-
-static gboolean
-extract_photo_data (EContact *contact,
- gpointer user_data)
-{
- EContactPhoto **photo = user_data;
-
- g_return_val_if_fail (contact != NULL, FALSE);
- g_return_val_if_fail (user_data != NULL, FALSE);
-
- *photo = e_contact_get (contact, E_CONTACT_PHOTO);
- if (!*photo)
- *photo = e_contact_get (contact, E_CONTACT_LOGO);
-
- return *photo != NULL;
-}
-
-typedef struct _PhotoInfo {
- gchar *address;
- EContactPhoto *photo;
-} PhotoInfo;
-
-static void
-emu_free_photo_info (PhotoInfo *pi)
-{
- if (!pi)
- return;
-
- if (pi->address)
- g_free (pi->address);
- if (pi->photo)
- e_contact_photo_free (pi->photo);
- g_free (pi);
-}
-
-G_LOCK_DEFINE_STATIC (photos_cache);
-static GSList *photos_cache = NULL; /* list of PhotoInfo-s */
-
-CamelMimePart *
-em_utils_contact_photo (CamelInternetAddress *cia,
- gboolean local_only)
-{
- const gchar *addr = NULL;
- CamelMimePart *part = NULL;
- EContactPhoto *photo = NULL;
- GSList *p, *first_not_null = NULL;
- gint count_not_null = 0;
-
- if (cia == NULL || !camel_internet_address_get (cia, 0, NULL, &addr) || !addr) {
- return NULL;
- }
-
- G_LOCK (photos_cache);
-
- /* search a cache first */
- for (p = photos_cache; p; p = p->next) {
- PhotoInfo *pi = p->data;
-
- if (!pi)
- continue;
-
- if (pi->photo) {
- if (!first_not_null)
- first_not_null = p;
- count_not_null++;
- }
-
- if (g_ascii_strcasecmp (addr, pi->address) == 0) {
- photo = pi->photo;
- break;
- }
- }
-
- /* !p means the address had not been found in the cache */
- if (!p && search_address_in_addressbooks (
- addr, local_only, extract_photo_data, &photo)) {
- PhotoInfo *pi;
-
- if (photo && photo->type != E_CONTACT_PHOTO_TYPE_INLINED) {
- e_contact_photo_free (photo);
- photo = NULL;
- }
-
- /* keep only up to 10 photos in memory */
- if (photo && count_not_null >= 10 && first_not_null) {
- pi = first_not_null->data;
-
- photos_cache = g_slist_remove (photos_cache, pi);
-
- emu_free_photo_info (pi);
- }
-
- pi = g_new0 (PhotoInfo, 1);
- pi->address = g_strdup (addr);
- pi->photo = photo;
-
- photos_cache = g_slist_append (photos_cache, pi);
- }
-
- /* some photo found, use it */
- if (photo) {
- /* Form a mime part out of the photo */
- part = camel_mime_part_new ();
- camel_mime_part_set_content (part,
- (const gchar *) photo->data.inlined.data,
- photo->data.inlined.length, "image/jpeg");
- }
-
- G_UNLOCK (photos_cache);
-
- return part;
-}
-
-/* list of email addresses (strings) to remove from local cache of photos and
- * contacts, but only if the photo doesn't exist or is an not-found contact */
-void
-emu_remove_from_mail_cache (const GSList *addresses)
-{
- const GSList *a;
- GSList *p;
- CamelInternetAddress *cia;
-
- cia = camel_internet_address_new ();
-
- for (a = addresses; a; a = a->next) {
- const gchar *addr = NULL;
-
- if (!a->data)
- continue;
-
- if (camel_address_decode ((CamelAddress *) cia, a->data) != -1 &&
- camel_internet_address_get (cia, 0, NULL, &addr) && addr) {
- gchar *lowercase_addr = g_utf8_strdown (addr, -1);
-
- G_LOCK (contact_cache);
- if (g_hash_table_lookup (contact_cache, lowercase_addr) == NOT_FOUND_BOOK)
- g_hash_table_remove (contact_cache, lowercase_addr);
- G_UNLOCK (contact_cache);
-
- g_free (lowercase_addr);
-
- G_LOCK (photos_cache);
- for (p = photos_cache; p; p = p->next) {
- PhotoInfo *pi = p->data;
-
- if (pi && !pi->photo && g_ascii_strcasecmp (pi->address, addr) == 0) {
- photos_cache = g_slist_remove (photos_cache, pi);
- emu_free_photo_info (pi);
- break;
- }
- }
- G_UNLOCK (photos_cache);
- }
- }
-
- g_object_unref (cia);
-}
-
-void
-emu_remove_from_mail_cache_1 (const gchar *address)
-{
- GSList *l;
-
- g_return_if_fail (address != NULL);
-
- l = g_slist_append (NULL, (gpointer) address);
-
- emu_remove_from_mail_cache (l);
-
- g_slist_free (l);
-}
-
-/* frees all data created by call of em_utils_in_addressbook() or
- * em_utils_contact_photo() */
-void
-emu_free_mail_cache (void)
-{
- G_LOCK (contact_cache);
-
- if (emu_books_hash) {
- g_hash_table_destroy (emu_books_hash);
- emu_books_hash = NULL;
- }
-
- if (emu_broken_books_hash) {
- g_hash_table_destroy (emu_broken_books_hash);
- emu_broken_books_hash = NULL;
- }
-
- if (emu_books_source_list) {
- g_object_unref (emu_books_source_list);
- emu_books_source_list = NULL;
- }
-
- if (contact_cache) {
- g_hash_table_destroy (contact_cache);
- contact_cache = NULL;
- }
-
- G_UNLOCK (contact_cache);
-
- G_LOCK (photos_cache);
-
- g_slist_foreach (photos_cache, (GFunc) emu_free_photo_info, NULL);
- g_slist_free (photos_cache);
- photos_cache = NULL;
-
- G_UNLOCK (photos_cache);
-}
-
void
em_utils_clear_get_password_canceled_accounts_flag (void)
{
@@ -2080,148 +1314,6 @@ em_utils_url_unescape_amp (const gchar *url)
return buff;
}
-static EAccount *
-guess_account_from_folder (CamelFolder *folder)
-{
- CamelStore *store;
- const gchar *uid;
-
- store = camel_folder_get_parent_store (folder);
- uid = camel_service_get_uid (CAMEL_SERVICE (store));
-
- return e_get_account_by_uid (uid);
-}
-
-static EAccount *
-guess_account_from_message (CamelMimeMessage *message)
-{
- const gchar *uid;
-
- uid = camel_mime_message_get_source (message);
-
- return (uid != NULL) ? e_get_account_by_uid (uid) : NULL;
-}
-
-EAccount *
-em_utils_guess_account (CamelMimeMessage *message,
- CamelFolder *folder)
-{
- EAccount *account = NULL;
-
- g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
-
- if (folder != NULL)
- g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-
- /* check for newsgroup header */
- if (folder != NULL
- && camel_medium_get_header (CAMEL_MEDIUM (message), "Newsgroups"))
- account = guess_account_from_folder (folder);
-
- /* check for source folder */
- if (account == NULL && folder != NULL)
- account = guess_account_from_folder (folder);
-
- /* then message source */
- if (account == NULL)
- account = guess_account_from_message (message);
-
- return account;
-}
-
-EAccount *
-em_utils_guess_account_with_recipients (CamelMimeMessage *message,
- CamelFolder *folder)
-{
- EAccount *account = NULL;
- EAccountList *account_list;
- GHashTable *recipients;
- EIterator *iterator;
- CamelInternetAddress *addr;
- const gchar *type;
- const gchar *key;
-
- /* This policy is subject to debate and tweaking,
- * but please also document the rational here. */
-
- g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
-
- /* Build a set of email addresses in which to test for membership.
- * Only the keys matter here; the values just need to be non-NULL. */
- recipients = g_hash_table_new (g_str_hash, g_str_equal);
-
- type = CAMEL_RECIPIENT_TYPE_TO;
- addr = camel_mime_message_get_recipients (message, type);
- if (addr != NULL) {
- gint index = 0;
-
- while (camel_internet_address_get (addr, index++, NULL, &key))
- g_hash_table_insert (
- recipients, (gpointer) key,
- GINT_TO_POINTER (1));
- }
-
- type = CAMEL_RECIPIENT_TYPE_CC;
- addr = camel_mime_message_get_recipients (message, type);
- if (addr != NULL) {
- gint index = 0;
-
- while (camel_internet_address_get (addr, index++, NULL, &key))
- g_hash_table_insert (
- recipients, (gpointer) key,
- GINT_TO_POINTER (1));
- }
-
- /* First Preference: We were given a folder that maps to an
- * enabled account, and that account's email address appears
- * in the list of To: or Cc: recipients. */
-
- if (folder != NULL)
- account = guess_account_from_folder (folder);
-
- if (account == NULL || !account->enabled)
- goto second_preference;
-
- if ((key = account->id->address) == NULL)
- goto second_preference;
-
- if (g_hash_table_lookup (recipients, key) != NULL)
- goto exit;
-
-second_preference:
-
- /* Second Preference: Choose any enabled account whose email
- * address appears in the list to To: or Cc: recipients. */
-
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
-
- while (e_iterator_is_valid (iterator)) {
- account = (EAccount *) e_iterator_get (iterator);
- e_iterator_next (iterator);
-
- if (account == NULL || !account->enabled)
- continue;
-
- if ((key = account->id->address) == NULL)
- continue;
-
- if (g_hash_table_lookup (recipients, key) != NULL) {
- g_object_unref (iterator);
- goto exit;
- }
- }
- g_object_unref (iterator);
-
- /* Last Preference: Defer to em_utils_guess_account(). */
- account = em_utils_guess_account (message, folder);
-
-exit:
- g_hash_table_destroy (recipients);
-
- return account;
-}
-
void
emu_restore_folder_tree_state (EMFolderTree *folder_tree)
{
@@ -2252,76 +1344,6 @@ emu_restore_folder_tree_state (EMFolderTree *folder_tree)
g_key_file_free (key_file);
}
-/* Returns TRUE if CamelURL points to a local mbox file. */
-gboolean
-em_utils_is_local_delivery_mbox_file (CamelURL *url)
-{
- g_return_val_if_fail (url != NULL, FALSE);
-
- return g_str_equal (url->protocol, "mbox") &&
- (url->path != NULL) &&
- g_file_test (url->path, G_FILE_TEST_EXISTS) &&
- !g_file_test (url->path, G_FILE_TEST_IS_DIR);
-}
-
-static void
-cancel_service_connect_cb (GCancellable *cancellable,
- CamelService *service)
-{
- g_return_if_fail (CAMEL_IS_SERVICE (service));
-
- camel_service_cancel_connect (service);
-}
-
-gboolean
-em_utils_connect_service_sync (CamelService *service,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean res;
- gulong handler_id = 0;
-
- g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
-
- if (cancellable != NULL)
- handler_id = g_cancellable_connect (
- cancellable,
- G_CALLBACK (cancel_service_connect_cb),
- service, NULL);
-
- res = camel_service_connect_sync (service, error);
-
- if (handler_id)
- g_cancellable_disconnect (cancellable, handler_id);
-
- return res;
-}
-
-gboolean
-em_utils_disconnect_service_sync (CamelService *service,
- gboolean clean,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean res;
- gulong handler_id = 0;
-
- g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
-
- if (cancellable != NULL)
- handler_id = g_cancellable_connect (
- cancellable,
- G_CALLBACK (cancel_service_connect_cb),
- service, NULL);
-
- res = camel_service_disconnect_sync (service, clean, error);
-
- if (handler_id)
- g_cancellable_disconnect (cancellable, handler_id);
-
- return res;
-}
-
static gboolean
check_prefix (const gchar *subject,
const gchar *prefix,
diff --git a/mail/em-utils.h b/mail/em-utils.h
index bf02419526..09ae4a56eb 100644
--- a/mail/em-utils.h
+++ b/mail/em-utils.h
@@ -29,8 +29,10 @@
#include <libedataserver/e-proxy.h>
#include <libedataserver/e-account.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/e-mail-utils.h>
+
#include <mail/e-mail-reader.h>
-#include <mail/e-mail-session.h>
#include <mail/em-folder-tree.h>
G_BEGIN_DECLS
@@ -42,7 +44,6 @@ gboolean em_utils_ask_open_many (GtkWindow *parent, gint how_many);
gboolean em_utils_prompt_user (GtkWindow *parent, const gchar *promptkey, const gchar *tag, ...);
GPtrArray *em_utils_uids_copy (GPtrArray *uids);
-void em_utils_uids_free (GPtrArray *uids);
void em_utils_edit_filters (EMailSession *session,
EAlertSink *alert_sink,
@@ -64,11 +65,6 @@ void em_utils_selection_get_uidlist (GtkSelectionData *data, EMailSession *sessi
void em_utils_selection_set_urilist (GtkSelectionData *data, CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_urilist (GtkSelectionData *data, CamelFolder *folder);
-gboolean em_utils_folder_is_drafts (CamelFolder *folder);
-gboolean em_utils_folder_is_templates (CamelFolder *folder);
-gboolean em_utils_folder_is_sent (CamelFolder *folder);
-gboolean em_utils_folder_is_outbox (CamelFolder *folder);
-
EProxy * em_utils_get_proxy (void);
/* FIXME: should this have an override charset? */
@@ -77,33 +73,16 @@ gchar *em_utils_message_to_html (CamelMimeMessage *msg, const gchar *credits, gu
void em_utils_empty_trash (GtkWidget *parent,
EMailSession *session);
-/* is this address in the addressbook? caches results */
-gboolean em_utils_in_addressbook (CamelInternetAddress *addr, gboolean local_only);
-CamelMimePart *em_utils_contact_photo (CamelInternetAddress *addr, gboolean local);
-
/* clears flag 'get_password_canceled' at every known accounts, so if needed, get_password will show dialog */
void em_utils_clear_get_password_canceled_accounts_flag (void);
/* Unescapes &amp; back to a real & in URIs */
gchar *em_utils_url_unescape_amp (const gchar *url);
-EAccount * em_utils_guess_account (CamelMimeMessage *message,
- CamelFolder *folder);
-EAccount * em_utils_guess_account_with_recipients
- (CamelMimeMessage *message,
- CamelFolder *folder);
-
-void emu_remove_from_mail_cache (const GSList *addresses);
-void emu_remove_from_mail_cache_1 (const gchar *address);
-void emu_free_mail_cache (void);
+void emu_free_mail_account_sort_order_cache (void);
void emu_restore_folder_tree_state (EMFolderTree *folder_tree);
-gboolean em_utils_is_local_delivery_mbox_file (CamelURL *url);
-
-gboolean em_utils_connect_service_sync (CamelService *service, GCancellable *cancellable, GError **error);
-gboolean em_utils_disconnect_service_sync (CamelService *service, gboolean clean, GCancellable *cancellable, GError **error);
-
gboolean em_utils_is_re_in_subject (struct _EShell *shell,
const gchar *subject,
gint *skip_len);
diff --git a/mail/em-vfolder-context.h b/mail/em-vfolder-context.h
index c0fd041abc..2d1c6ef0fc 100644
--- a/mail/em-vfolder-context.h
+++ b/mail/em-vfolder-context.h
@@ -25,8 +25,8 @@
#ifndef EM_VFOLDER_CONTEXT_H
#define EM_VFOLDER_CONTEXT_H
-#include <mail/e-mail-session.h>
#include <filter/e-rule-context.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_VFOLDER_CONTEXT \
diff --git a/mail/em-vfolder-rule.c b/mail/em-vfolder-rule.c
index a22816070a..91bf46128e 100644
--- a/mail/em-vfolder-rule.c
+++ b/mail/em-vfolder-rule.c
@@ -30,17 +30,19 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+#include <shell/e-shell.h>
+
+#include <e-util/e-util.h>
+#include <e-util/e-alert.h>
+#include <e-util/e-util-private.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+
+#include "em-folder-selector.h"
+#include "em-folder-tree.h"
+#include "em-utils.h"
#include "em-vfolder-context.h"
#include "em-vfolder-rule.h"
-#include "mail/e-mail-folder-utils.h"
-#include "mail/em-utils.h"
-#include "mail/em-folder-tree.h"
-#include "mail/em-folder-selector.h"
-#include "shell/e-shell.h"
-
-#include "e-util/e-util.h"
-#include "e-util/e-alert.h"
-#include "e-util/e-util-private.h"
#define EM_VFOLDER_RULE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
diff --git a/mail/em-vfolder-rule.h b/mail/em-vfolder-rule.h
index 7fc8daaee9..1b3a4432ca 100644
--- a/mail/em-vfolder-rule.h
+++ b/mail/em-vfolder-rule.h
@@ -24,8 +24,8 @@
#ifndef EM_VFOLDER_RULE_H
#define EM_VFOLDER_RULE_H
-#include <mail/e-mail-session.h>
#include <filter/e-filter-rule.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define EM_TYPE_VFOLDER_RULE \
diff --git a/mail/importers/Makefile.am b/mail/importers/Makefile.am
index fa1a400f03..6a7e9a8b6e 100644
--- a/mail/importers/Makefile.am
+++ b/mail/importers/Makefile.am
@@ -28,6 +28,8 @@ libevolution_mail_importers_la_LIBADD = \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/shell/libeshell.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/mail/importers/elm-importer.c b/mail/importers/elm-importer.c
index 832bf749ea..288d9fb736 100644
--- a/mail/importers/elm-importer.c
+++ b/mail/importers/elm-importer.c
@@ -40,7 +40,7 @@
#include "mail-importer.h"
-#include "mail/mail-mt.h"
+#include "libemail-utils/mail-mt.h"
#include "mail/e-mail-backend.h"
#include "e-util/e-import.h"
#include "shell/e-shell.h"
diff --git a/mail/importers/evolution-mbox-importer.c b/mail/importers/evolution-mbox-importer.c
index c3d5f2f1b7..f6e5c63613 100644
--- a/mail/importers/evolution-mbox-importer.c
+++ b/mail/importers/evolution-mbox-importer.c
@@ -48,7 +48,7 @@
#include "mail/em-folder-selection-button.h"
#include "mail/em-folder-tree-model.h"
#include "mail/em-folder-tree.h"
-#include "mail/mail-mt.h"
+#include "libemail-utils/mail-mt.h"
#include "mail-importer.h"
diff --git a/mail/importers/mail-importer.c b/mail/importers/mail-importer.c
index 558359c636..716d99c991 100644
--- a/mail/importers/mail-importer.c
+++ b/mail/importers/mail-importer.c
@@ -39,9 +39,9 @@
#include "e-util/e-util-private.h"
#include "shell/e-shell-backend.h"
-#include "mail-mt.h"
-#include "mail-tools.h"
-#include "e-mail-session.h"
+#include "libemail-utils/mail-mt.h"
+#include "libemail-engine/mail-tools.h"
+#include "libemail-engine/e-mail-session.h"
#include "mail-importer.h"
@@ -277,9 +277,9 @@ mail_importer_import_mbox_sync (EMailSession *session,
m->path = g_strdup (path);
m->uri = g_strdup (folderuri);
if (cancellable)
- e_activity_set_cancellable (m->base.activity, cancellable);
+ m->base.cancellable = cancellable;
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
import_mbox_exec (m, cancellable, &m->base.error);
import_mbox_done (m);
diff --git a/mail/importers/mail-importer.h b/mail/importers/mail-importer.h
index d66ed464ec..bd0335c299 100644
--- a/mail/importers/mail-importer.h
+++ b/mail/importers/mail-importer.h
@@ -26,7 +26,7 @@
#include <e-util/e-import.h>
#include <camel/camel.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
EImportImporter *mbox_importer_peek (void);
diff --git a/mail/importers/pine-importer.c b/mail/importers/pine-importer.c
index 1ba44583ab..3ecfbbc5df 100644
--- a/mail/importers/pine-importer.c
+++ b/mail/importers/pine-importer.c
@@ -43,7 +43,7 @@
#include "mail-importer.h"
-#include "mail/mail-mt.h"
+#include "libemail-utils/mail-mt.h"
#include "mail/e-mail-backend.h"
#include "e-util/e-import.h"
#include "shell/e-shell.h"
diff --git a/mail/mail-autofilter.c b/mail/mail-autofilter.c
index 6d08c78a40..08e3a3d937 100644
--- a/mail/mail-autofilter.c
+++ b/mail/mail-autofilter.c
@@ -29,8 +29,9 @@
#include <glib/gi18n.h>
-#include "e-mail-folder-utils.h"
-#include "e-mail-session.h"
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+
#include "mail-vfolder.h"
#include "mail-autofilter.h"
#include "em-utils.h"
diff --git a/mail/mail-autofilter.h b/mail/mail-autofilter.h
index 47f68c3be5..34593b0f95 100644
--- a/mail/mail-autofilter.h
+++ b/mail/mail-autofilter.h
@@ -27,9 +27,9 @@
#include <camel/camel.h>
#include <filter/e-filter-rule.h>
-#include <mail/e-mail-session.h>
#include <mail/em-filter-context.h>
#include <mail/em-vfolder-context.h>
+#include <libemail-engine/e-mail-session.h>
enum {
AUTO_SUBJECT = 1,
diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c
index 4e206ea221..05a48c47ce 100644
--- a/mail/mail-send-recv.c
+++ b/mail/mail-send-recv.c
@@ -29,22 +29,26 @@
#include <glib/gi18n.h>
-#include "libedataserver/e-account-list.h"
+#include <libedataserver/e-account-list.h>
-#include "shell/e-shell.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-util.h"
+#include <shell/e-shell.h>
+#include <e-util/e-util.h>
-#include "e-mail-folder-utils.h"
-#include "e-mail-session.h"
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/mail-folder-cache.h>
+#include <libemail-engine/mail-ops.h>
+#include <libemail-engine/mail-tools.h>
+
+#include "e-mail-account-store.h"
+#include "e-mail-ui-session.h"
#include "em-event.h"
#include "em-filter-rule.h"
#include "em-utils.h"
-#include "mail-folder-cache.h"
-#include "mail-mt.h"
-#include "mail-ops.h"
#include "mail-send-recv.h"
-#include "mail-tools.h"
#define d(x)
@@ -501,7 +505,7 @@ build_dialog (GtkWindow *parent,
EMEventTargetSendReceive *target;
GQueue queue = G_QUEUE_INIT;
- account_store = e_mail_session_get_account_store (session);
+ account_store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION (session));
/* Convert the outgoing account to a CamelTransport. */
if (outgoing_account != NULL) {
diff --git a/mail/mail-send-recv.h b/mail/mail-send-recv.h
index cd11a4a9bb..fb49493060 100644
--- a/mail/mail-send-recv.h
+++ b/mail/mail-send-recv.h
@@ -24,7 +24,7 @@
#define MAIL_SEND_RECV_H
#include <gtk/gtk.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
G_BEGIN_DECLS
diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c
index f5039d98ff..4b10e829de 100644
--- a/mail/mail-vfolder.c
+++ b/mail/mail-vfolder.c
@@ -31,20 +31,23 @@
#include "e-util/e-alert-dialog.h"
#include "e-util/e-util-private.h"
+#include "libemail-utils/mail-mt.h"
+#include "libemail-engine/mail-folder-cache.h"
+#include "libemail-engine/e-mail-folder-utils.h"
+#include "libemail-engine/e-mail-session.h"
+#include "libemail-engine/e-mail-utils.h"
+#include "libemail-engine/mail-ops.h"
+#include "libemail-engine/mail-tools.h"
+
#include "e-mail-backend.h"
-#include "e-mail-session.h"
-#include "e-mail-folder-utils.h"
#include "em-folder-tree-model.h"
#include "em-utils.h"
#include "em-vfolder-context.h"
#include "em-vfolder-editor.h"
#include "em-vfolder-rule.h"
#include "mail-autofilter.h"
-#include "mail-folder-cache.h"
-#include "mail-mt.h"
-#include "mail-ops.h"
-#include "mail-tools.h"
#include "mail-vfolder.h"
+#include "e-mail-ui-session.h"
#define d(x) /* (printf("%s:%s: ", G_STRLOC, G_STRFUNC), (x))*/
@@ -1020,7 +1023,7 @@ vfolder_load_storage (EMailBackend *backend)
config_dir = mail_session_get_config_dir ();
session = e_mail_backend_get_session (backend);
- vfolder_store = e_mail_session_get_vfolder_store (session);
+ vfolder_store = e_mail_ui_session_get_vfolder_store (E_MAIL_UI_SESSION(session));
g_signal_connect (
vfolder_store, "folder-deleted",
diff --git a/mail/message-list.c b/mail/message-list.c
index 98fd90babb..405e9d08cd 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -58,13 +58,16 @@
#include "table/e-tree-memory-callbacks.h"
#include "table/e-tree-memory.h"
-#include "e-mail-label-list-store.h"
-#include "em-utils.h"
-#include "mail-config.h"
-#include "mail-mt.h"
-#include "mail-ops.h"
-#include "mail-tools.h"
-#include "message-list.h"
+#include "libemail-utils/mail-mt.h"
+#include "libemail-engine/e-mail-utils.h"
+#include "libemail-engine/mail-config.h"
+#include "libemail-engine/mail-ops.h"
+#include "libemail-engine/mail-tools.h"
+
+#include "mail/e-mail-label-list-store.h"
+#include "mail/e-mail-ui-session.h"
+#include "mail/em-utils.h"
+#include "mail/message-list.h"
#if HAVE_CLUTTER
#include <clutter/clutter.h>
@@ -1709,7 +1712,8 @@ ml_tree_value_at_ex (ETreeModel *etm,
/* Get all applicable labels. */
struct LabelsData ld;
- ld.store = e_mail_session_get_label_store (session);
+ ld.store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
ld.labels_tag2iter = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) gtk_tree_iter_free);
for_node_and_subtree_if_collapsed (message_list, path, msg_info, add_all_labels_foreach, &ld);
@@ -1791,7 +1795,8 @@ ml_tree_value_at_ex (ETreeModel *etm,
struct LabelsData ld;
GString *result = g_string_new ("");
- ld.store = e_mail_session_get_label_store (session);
+ ld.store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
ld.labels_tag2iter = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) gtk_tree_iter_free);
for_node_and_subtree_if_collapsed (message_list, path, msg_info, add_all_labels_foreach, &ld);
@@ -4764,7 +4769,7 @@ regen_list_done (struct _regen_list_msg *m)
GCancellable *cancellable;
gboolean searching;
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
if (m->ml->priv->destroyed)
return;
@@ -4956,7 +4961,7 @@ mail_regen_cancel (MessageList *ml)
MailMsg *mm = link->data;
GCancellable *cancellable;
- cancellable = e_activity_get_cancellable (mm->activity);
+ cancellable = mm->cancellable;
g_cancellable_cancel (cancellable);
}
diff --git a/mail/message-list.h b/mail/message-list.h
index bd2e97b6f8..44a312e667 100644
--- a/mail/message-list.h
+++ b/mail/message-list.h
@@ -27,7 +27,7 @@
#include <camel/camel.h>
#include <table/e-tree.h>
-#include <mail/e-mail-session.h>
+#include <libemail-engine/e-mail-session.h>
/* Standard GObject macros */
#define MESSAGE_LIST_TYPE \
diff --git a/modules/bogofilter/Makefile.am b/modules/bogofilter/Makefile.am
index 5fbf45e5b4..2d8f5c9fd2 100644
--- a/modules/bogofilter/Makefile.am
+++ b/modules/bogofilter/Makefile.am
@@ -14,6 +14,8 @@ libevolution_module_bogofilter_la_SOURCES = \
libevolution_module_bogofilter_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/mail/libevolution-mail.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/modules/bogofilter/evolution-bogofilter.c b/modules/bogofilter/evolution-bogofilter.c
index 74c1d362ca..0467c0f654 100644
--- a/modules/bogofilter/evolution-bogofilter.c
+++ b/modules/bogofilter/evolution-bogofilter.c
@@ -23,7 +23,7 @@
#include <camel/camel.h>
-#include <mail/e-mail-junk-filter.h>
+#include <libemail-engine/e-mail-junk-filter.h>
/* Standard GObject macros */
#define E_TYPE_BOGOFILTER \
diff --git a/modules/calendar/Makefile.am b/modules/calendar/Makefile.am
index 4f09f92692..57b697b0df 100644
--- a/modules/calendar/Makefile.am
+++ b/modules/calendar/Makefile.am
@@ -89,6 +89,7 @@ libevolution_module_calendar_la_LIBADD = \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/addressbook/gui/contact-editor/libecontacteditor.la \
$(top_builddir)/addressbook/gui/contact-list-editor/libecontactlisteditor.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/filter/libfilter.la \
$(top_builddir)/widgets/menus/libmenus.la \
diff --git a/modules/calendar/e-cal-shell-view-private.h b/modules/calendar/e-cal-shell-view-private.h
index 27aaca6e9e..ad4984a4ef 100644
--- a/modules/calendar/e-cal-shell-view-private.h
+++ b/modules/calendar/e-cal-shell-view-private.h
@@ -26,6 +26,7 @@
#include <string.h>
#include <glib/gi18n.h>
+
#include <libecal/e-cal-time-util.h>
#include <libecal/e-cal-system-timezone.h>
#include <libedataserver/e-categories.h>
@@ -33,31 +34,34 @@
#include <libedataserver/e-sexp.h>
#include <libedataserverui/e-client-utils.h>
-#include "e-util/e-account-utils.h"
-#include "e-util/e-selection.h"
-#include "e-util/e-dialog-utils.h"
-#include "e-util/e-file-utils.h"
-#include "e-util/e-util.h"
-#include "shell/e-shell-utils.h"
-#include "misc/e-popup-action.h"
-#include "misc/e-selectable.h"
-
-#include "calendar/gui/calendar-config.h"
-#include "calendar/gui/comp-util.h"
-#include "calendar/gui/e-cal-list-view.h"
-#include "calendar/gui/e-cal-model-tasks.h"
-#include "calendar/gui/e-calendar-view.h"
-#include "calendar/gui/e-day-view.h"
-#include "calendar/gui/e-week-view.h"
-#include "calendar/gui/gnome-cal.h"
-#include "calendar/gui/print.h"
-#include "calendar/gui/dialogs/calendar-setup.h"
-#include "calendar/gui/dialogs/copy-source-dialog.h"
-#include "calendar/gui/dialogs/event-editor.h"
-#include "calendar/gui/dialogs/goto-dialog.h"
-#include "calendar/gui/dialogs/memo-editor.h"
-#include "calendar/gui/dialogs/select-source-dialog.h"
-#include "calendar/gui/dialogs/task-editor.h"
+#include <e-util/e-selection.h>
+#include <e-util/e-dialog-utils.h>
+#include <e-util/e-file-utils.h>
+#include <e-util/e-util.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include <shell/e-shell-utils.h>
+
+#include <misc/e-popup-action.h>
+#include <misc/e-selectable.h>
+
+#include <calendar/gui/calendar-config.h>
+#include <calendar/gui/comp-util.h>
+#include <calendar/gui/e-cal-list-view.h>
+#include <calendar/gui/e-cal-model-tasks.h>
+#include <calendar/gui/e-calendar-view.h>
+#include <calendar/gui/e-day-view.h>
+#include <calendar/gui/e-week-view.h>
+#include <calendar/gui/gnome-cal.h>
+#include <calendar/gui/print.h>
+#include <calendar/gui/dialogs/calendar-setup.h>
+#include <calendar/gui/dialogs/copy-source-dialog.h>
+#include <calendar/gui/dialogs/event-editor.h>
+#include <calendar/gui/dialogs/goto-dialog.h>
+#include <calendar/gui/dialogs/memo-editor.h>
+#include <calendar/gui/dialogs/select-source-dialog.h>
+#include <calendar/gui/dialogs/task-editor.h>
#include "e-cal-shell-backend.h"
#include "e-cal-shell-content.h"
diff --git a/modules/calendar/e-memo-shell-migrate.c b/modules/calendar/e-memo-shell-migrate.c
index 6402cf1e0a..171428f408 100644
--- a/modules/calendar/e-memo-shell-migrate.c
+++ b/modules/calendar/e-memo-shell-migrate.c
@@ -28,13 +28,14 @@
#include <string.h>
#include <glib/gi18n.h>
#include <camel/camel.h>
+
#include <libedataserver/e-source.h>
#include <libedataserver/e-source-group.h>
#include <libedataserver/e-source-list.h>
-#include "e-util/e-account-utils.h"
-#include "calendar/gui/calendar-config-keys.h"
-#include "shell/e-shell.h"
+#include <shell/e-shell.h>
+#include <calendar/gui/calendar-config-keys.h>
+#include <libemail-utils/e-account-utils.h>
#include "e-memo-shell-backend.h"
diff --git a/modules/mail/Makefile.am b/modules/mail/Makefile.am
index 90cf1aa54f..7fbb354b26 100644
--- a/modules/mail/Makefile.am
+++ b/modules/mail/Makefile.am
@@ -3,7 +3,6 @@ module_LTLIBRARIES = libevolution-module-mail.la
libevolution_module_mail_la_CPPFLAGS = \
$(AM_CPPFLAGS) \
-I$(top_srcdir) \
- -I$(top_srcdir)/mail \
-I$(top_srcdir)/widgets \
-DEVOLUTION_ETSPECDIR=\""$(etspecdir)"\" \
-DEVOLUTION_UIDIR=\""$(uidir)"\" \
@@ -51,6 +50,8 @@ libevolution_module_mail_la_SOURCES = \
em-network-prefs.h
libevolution_module_mail_la_LIBADD = \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/em-format/libemformat.la \
$(top_builddir)/filter/libfilter.la \
diff --git a/modules/mail/e-mail-shell-backend.c b/modules/mail/e-mail-shell-backend.c
index d15ca1ebe8..4e28d8c629 100644
--- a/modules/mail/e-mail-shell-backend.c
+++ b/modules/mail/e-mail-shell-backend.c
@@ -27,37 +27,42 @@
#include <glib/gi18n.h>
-#include "e-util/e-import.h"
-#include "e-util/e-util.h"
-#include "shell/e-shell.h"
-#include "shell/e-shell-window.h"
-#include "composer/e-msg-composer.h"
-#include "widgets/misc/e-preferences-window.h"
-#include "widgets/misc/e-web-view.h"
+#include <e-util/e-import.h>
+#include <e-util/e-util.h>
+
+#include <shell/e-shell.h>
+#include <shell/e-shell-window.h>
+
+#include <composer/e-msg-composer.h>
+
+#include <widgets/misc/e-preferences-window.h>
+#include <widgets/misc/e-web-view.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/mail-config.h>
+#include <libemail-engine/mail-ops.h>
+
+#include <mail/e-mail-browser.h>
+#include <mail/e-mail-reader.h>
+#include <mail/em-account-editor.h>
+#include <mail/em-composer-utils.h>
+#include <mail/em-folder-utils.h>
+#include <mail/em-format-hook.h>
+#include <mail/em-format-html-display.h>
+#include <mail/em-utils.h>
+#include <mail/mail-send-recv.h>
+#include <mail/mail-vfolder.h>
+#include <mail/importers/mail-importer.h>
+#include <mail/e-mail-ui-session.h>
#include "e-mail-shell-settings.h"
#include "e-mail-shell-sidebar.h"
#include "e-mail-shell-view.h"
-
-#include "e-mail-browser.h"
-#include "e-mail-folder-utils.h"
-#include "e-mail-reader.h"
-#include "e-mail-session.h"
-#include "em-account-editor.h"
#include "em-account-prefs.h"
#include "em-composer-prefs.h"
-#include "em-composer-utils.h"
-#include "em-folder-utils.h"
-#include "em-format-hook.h"
-#include "em-format-html-display.h"
#include "em-mailer-prefs.h"
#include "em-network-prefs.h"
-#include "em-utils.h"
-#include "mail-config.h"
-#include "mail-ops.h"
-#include "mail-send-recv.h"
-#include "mail-vfolder.h"
-#include "importers/mail-importer.h"
#define E_MAIL_SHELL_BACKEND_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
@@ -471,7 +476,7 @@ mail_shell_backend_start (EShellBackend *shell_backend)
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- account_store = e_mail_session_get_account_store (session);
+ account_store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION (session));
enable_search_folders = e_shell_settings_get_boolean (
shell_settings, "mail-enable-search-folders");
@@ -646,7 +651,8 @@ e_mail_labels_get_filter_options (void)
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
model = GTK_TREE_MODEL (label_store);
valid = gtk_tree_model_get_iter_first (model, &iter);
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index 56a0c52de6..5bb60e3784 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -28,21 +28,23 @@
#include <glib/gi18n.h>
#include <libedataserver/e-data-server-util.h>
-#include "e-util/e-util-private.h"
-#include "widgets/menus/gal-view-etable.h"
-#include "widgets/menus/gal-view-instance.h"
-#include "widgets/misc/e-paned.h"
-#include "widgets/misc/e-preview-pane.h"
-#include "widgets/misc/e-search-bar.h"
-
-#include "em-utils.h"
-#include "mail-ops.h"
-#include "message-list.h"
-
-#include "e-mail-paned-view.h"
-#include "e-mail-notebook-view.h"
-#include "e-mail-reader.h"
-#include "e-mail-reader-utils.h"
+#include <e-util/e-util-private.h>
+
+#include <widgets/menus/gal-view-etable.h>
+#include <widgets/menus/gal-view-instance.h>
+#include <widgets/misc/e-paned.h>
+#include <widgets/misc/e-preview-pane.h>
+#include <widgets/misc/e-search-bar.h>
+
+#include <libemail-engine/mail-ops.h>
+
+#include <mail/e-mail-paned-view.h>
+#include <mail/e-mail-notebook-view.h>
+#include <mail/e-mail-reader.h>
+#include <mail/e-mail-reader-utils.h>
+#include <mail/em-utils.h>
+#include <mail/message-list.h>
+
#include "e-mail-shell-backend.h"
#include "e-mail-shell-view-actions.h"
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 26bcfc4bb8..407f17ef78 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -99,7 +99,7 @@ action_mail_account_disable_cb (GtkAction *action,
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- account_store = e_mail_session_get_account_store (session);
+ account_store = e_mail_ui_session_get_account_store (E_MAIL_UI_SESSION (session));
folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar);
store = em_folder_tree_get_selected_store (folder_tree);
@@ -709,7 +709,8 @@ action_mail_label_new_cb (GtkAction *action,
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
label_dialog = E_MAIL_LABEL_DIALOG (dialog);
label_name = e_mail_label_dialog_get_label_name (label_dialog);
@@ -770,7 +771,8 @@ action_mail_label_none_cb (GtkAction *action,
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
mail_shell_content = mail_shell_view->priv->mail_shell_content;
mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
@@ -1919,7 +1921,8 @@ e_mail_shell_view_update_popup_labels (EMailShellView *mail_shell_view)
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
action_group = ACTION_GROUP (MAIL_LABEL);
merge_id = mail_shell_view->priv->label_merge_id;
@@ -2021,7 +2024,8 @@ e_mail_shell_view_update_search_filter (EMailShellView *mail_shell_view)
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
action_group = ACTION_GROUP (MAIL_FILTER);
e_action_group_remove_all_actions (action_group);
diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c
index b7e7f9575b..f43734f175 100644
--- a/modules/mail/e-mail-shell-view-private.c
+++ b/modules/mail/e-mail-shell-view-private.c
@@ -665,7 +665,8 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (
+ E_MAIL_UI_SESSION (session));
e_shell_window_add_action_group (shell_window, "mail");
e_shell_window_add_action_group (shell_window, "mail-filter");
diff --git a/modules/mail/e-mail-shell-view-private.h b/modules/mail/e-mail-shell-view-private.h
index 24b5e531bf..c60d5c699e 100644
--- a/modules/mail/e-mail-shell-view-private.h
+++ b/modules/mail/e-mail-shell-view-private.h
@@ -28,38 +28,43 @@
#include <gtkhtml/gtkhtml.h>
#include <camel/camel-search-private.h> /* for camel_search_word */
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-ui-manager.h"
-#include "filter/e-filter-part.h"
-#include "widgets/misc/e-web-view.h"
-#include "widgets/misc/e-popup-action.h"
-#include "widgets/menus/gal-view-instance.h"
-
-#include "e-mail-folder-utils.h"
-#include "e-mail-label-action.h"
-#include "e-mail-label-dialog.h"
-#include "e-mail-label-list-store.h"
-#include "e-mail-reader.h"
-#include "e-mail-reader-utils.h"
-#include "e-mail-session.h"
-#include "e-mail-session-utils.h"
-#include "e-mail-sidebar.h"
-#include "e-mail-store-utils.h"
-#include "em-composer-utils.h"
-#include "em-folder-properties.h"
-#include "em-folder-selector.h"
-#include "em-folder-utils.h"
-#include "em-search-context.h"
-#include "em-subscription-editor.h"
-#include "em-utils.h"
-#include "mail-autofilter.h"
-#include "mail-folder-cache.h"
-#include "mail-ops.h"
-#include "mail-send-recv.h"
-#include "mail-tools.h"
-#include "mail-vfolder.h"
-#include "message-list.h"
+#include <e-util/e-util.h>
+#include <e-util/e-ui-manager.h>
+
+#include <filter/e-filter-part.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/e-mail-session-utils.h>
+#include <libemail-engine/e-mail-store-utils.h>
+#include <libemail-engine/mail-folder-cache.h>
+#include <libemail-engine/mail-ops.h>
+#include <libemail-engine/mail-tools.h>
+
+#include <misc/e-web-view.h>
+#include <misc/e-popup-action.h>
+#include <menus/gal-view-instance.h>
+
+#include <mail/e-mail-label-action.h>
+#include <mail/e-mail-label-dialog.h>
+#include <mail/e-mail-label-list-store.h>
+#include <mail/e-mail-reader.h>
+#include <mail/e-mail-reader-utils.h>
+#include <mail/e-mail-sidebar.h>
+#include <mail/e-mail-ui-session.h>
+#include <mail/em-composer-utils.h>
+#include <mail/em-folder-properties.h>
+#include <mail/em-folder-selector.h>
+#include <mail/em-folder-utils.h>
+#include <mail/em-search-context.h>
+#include <mail/em-subscription-editor.h>
+#include <mail/em-utils.h>
+#include <mail/mail-autofilter.h>
+#include <mail/mail-send-recv.h>
+#include <mail/mail-vfolder.h>
+#include <mail/message-list.h>
#include "e-mail-shell-backend.h"
#include "e-mail-shell-content.h"
diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c
index 07fec7e45f..afd7501d92 100644
--- a/modules/mail/e-mail-shell-view.c
+++ b/modules/mail/e-mail-shell-view.c
@@ -269,7 +269,7 @@ mail_shell_view_execute_search (EShellView *shell_view)
folder = e_mail_reader_get_folder (reader);
message_list = e_mail_reader_get_message_list (reader);
- label_store = e_mail_session_get_label_store (session);
+ label_store = e_mail_ui_session_get_label_store (E_MAIL_UI_SESSION (session));
action = ACTION (MAIL_SEARCH_SUBJECT_OR_ADDRESSES_CONTAIN);
value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
diff --git a/modules/mail/em-account-prefs.c b/modules/mail/em-account-prefs.c
index 24651d1131..c6b132ebbb 100644
--- a/modules/mail/em-account-prefs.c
+++ b/modules/mail/em-account-prefs.c
@@ -33,16 +33,20 @@
#include <glib/gi18n.h>
-#include "e-util/e-alert-dialog.h"
-#include "e-util/e-account-utils.h"
+#include <e-util/e-alert-dialog.h>
-#include "e-mail-backend.h"
-#include "em-config.h"
-#include "em-account-editor.h"
-#include "em-utils.h"
-#include "mail-vfolder.h"
-#include "shell/e-shell.h"
-#include "capplet/settings/mail-capplet-shell.h"
+#include <shell/e-shell.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include <capplet/settings/mail-capplet-shell.h>
+
+#include <mail/e-mail-backend.h>
+#include <mail/e-mail-ui-session.h>
+#include <mail/em-config.h>
+#include <mail/em-account-editor.h>
+#include <mail/em-utils.h>
+#include <mail/mail-vfolder.h>
#define EM_ACCOUNT_PREFS_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
@@ -321,7 +325,8 @@ em_account_prefs_new (EPreferencesWindow *window)
backend = E_MAIL_BACKEND (shell_backend);
session = e_mail_backend_get_session (backend);
- account_store = e_mail_session_get_account_store (session);
+ account_store = e_mail_ui_session_get_account_store (
+ E_MAIL_UI_SESSION (session));
return g_object_new (
EM_TYPE_ACCOUNT_PREFS,
diff --git a/modules/mail/em-composer-prefs.c b/modules/mail/em-composer-prefs.c
index 0dcd1116bb..e678152097 100644
--- a/modules/mail/em-composer-prefs.c
+++ b/modules/mail/em-composer-prefs.c
@@ -24,18 +24,14 @@
#include <config.h>
#endif
+#include "em-composer-prefs.h"
+
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
-#include "e-util/e-signature-utils.h"
-
-#include "em-composer-prefs.h"
-#include "composer/e-msg-composer.h"
-#include "shell/e-shell-utils.h"
-
#include <glib/gi18n.h>
#include <glib/gstdio.h>
@@ -44,14 +40,21 @@
#include <e-util/e-util.h>
#include <e-util/e-util-private.h>
+
+#include <libemail-utils/e-signature-utils.h>
+
+#include <composer/e-msg-composer.h>
+
+#include <shell/e-shell-utils.h>
+
#include <misc/e-charset-combo-box.h>
#include <misc/e-signature-editor.h>
#include <misc/e-signature-manager.h>
#include <misc/e-signature-preview.h>
-#include "em-config.h"
-#include "em-folder-selection-button.h"
-#include "e-mail-junk-options.h"
+#include <mail/em-config.h>
+#include <mail/em-folder-selection-button.h>
+#include <mail/e-mail-junk-options.h>
G_DEFINE_TYPE (
EMComposerPrefs,
diff --git a/modules/mail/em-network-prefs.c b/modules/mail/em-network-prefs.c
index 793925055a..93a12d202a 100644
--- a/modules/mail/em-network-prefs.c
+++ b/modules/mail/em-network-prefs.c
@@ -24,25 +24,24 @@
#include <config.h>
#endif
+#include "em-network-prefs.h"
+
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
-#include "em-network-prefs.h"
-
+#include <glib/gstdio.h>
#include <gdk/gdkkeysyms.h>
#include <gconf/gconf-client.h>
-#include <glib/gstdio.h>
-
-#include "e-util/e-util.h"
-#include "e-util/e-util-private.h"
-#include "mail/e-mail-junk-options.h"
+#include <e-util/e-util.h>
+#include <e-util/e-util-private.h>
-#include "em-config.h"
-#include "em-folder-selection-button.h"
+#include <mail/em-config.h>
+#include <mail/em-folder-selection-button.h>
+#include <mail/e-mail-junk-options.h>
#define d(x)
diff --git a/modules/mdn/evolution-mdn.c b/modules/mdn/evolution-mdn.c
index fa3fd8171c..d0a1e6d6ee 100644
--- a/modules/mdn/evolution-mdn.c
+++ b/modules/mdn/evolution-mdn.c
@@ -23,13 +23,15 @@
#include <libebackend/e-extension.h>
#include <e-util/e-alert-dialog.h>
-#include <e-util/e-account-utils.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
#include <mail/em-utils.h>
#include <mail/e-mail-reader.h>
#include <mail/mail-send-recv.h>
#include <mail/em-composer-utils.h>
-#include <mail/e-mail-folder-utils.h>
#define MDN_USER_FLAG "receipt-handled"
diff --git a/modules/online-accounts/Makefile.am b/modules/online-accounts/Makefile.am
index ccb7ada29a..f449247ec9 100644
--- a/modules/online-accounts/Makefile.am
+++ b/modules/online-accounts/Makefile.am
@@ -18,6 +18,7 @@ libevolution_module_online_accounts_la_SOURCES = \
libevolution_module_online_accounts_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/shell/libeshell.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GOA_LIBS)
diff --git a/modules/online-accounts/camel-sasl-xoauth.c b/modules/online-accounts/camel-sasl-xoauth.c
index edf5c6eec3..7b1a59aa24 100644
--- a/modules/online-accounts/camel-sasl-xoauth.c
+++ b/modules/online-accounts/camel-sasl-xoauth.c
@@ -20,11 +20,11 @@
#include <config.h>
#endif
-#include <e-util/e-account-utils.h>
+#include <glib/gi18n-lib.h>
-#include "camel-sasl-xoauth.h"
+#include <libemail-utils/e-account-utils.h>
-#include <glib/gi18n-lib.h>
+#include "camel-sasl-xoauth.h"
#define GOA_API_IS_SUBJECT_TO_CHANGE
#include <goa/goa.h>
diff --git a/modules/online-accounts/e-online-accounts-google.c b/modules/online-accounts/e-online-accounts-google.c
index e71b8d16cb..709eb3bb8e 100644
--- a/modules/online-accounts/e-online-accounts-google.c
+++ b/modules/online-accounts/e-online-accounts-google.c
@@ -29,7 +29,7 @@
#include <libecal/e-cal.h>
#include <libebook/e-book.h>
-#include <e-util/e-account-utils.h>
+#include <libemail-utils/e-account-utils.h>
/* This is the property name or URL parameter under which we
* embed the GoaAccount ID into an EAccount or ESource object. */
diff --git a/modules/online-accounts/evolution-online-accounts.c b/modules/online-accounts/evolution-online-accounts.c
index d127f4d096..6efeaba33e 100644
--- a/modules/online-accounts/evolution-online-accounts.c
+++ b/modules/online-accounts/evolution-online-accounts.c
@@ -30,7 +30,8 @@
#include <libedataserver/e-account-list.h>
#include <shell/e-shell.h>
-#include <e-util/e-account-utils.h>
+
+#include <libemail-utils/e-account-utils.h>
#include "camel-sasl-xoauth.h"
#include "e-online-accounts-google.h"
diff --git a/modules/spamassassin/Makefile.am b/modules/spamassassin/Makefile.am
index 8ea91303b4..fce8989566 100644
--- a/modules/spamassassin/Makefile.am
+++ b/modules/spamassassin/Makefile.am
@@ -14,6 +14,8 @@ libevolution_module_spamassassin_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/shell/libeshell.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/modules/spamassassin/evolution-spamassassin.c b/modules/spamassassin/evolution-spamassassin.c
index 1b88d0f558..7f595caf32 100644
--- a/modules/spamassassin/evolution-spamassassin.c
+++ b/modules/spamassassin/evolution-spamassassin.c
@@ -25,7 +25,7 @@
#include <shell/e-shell.h>
#include <e-util/e-mktemp.h>
-#include <mail/e-mail-junk-filter.h>
+#include <libemail-engine/e-mail-junk-filter.h>
/* Standard GObject macros */
#define E_TYPE_SPAM_ASSASSIN \
diff --git a/modules/startup-wizard/Makefile.am b/modules/startup-wizard/Makefile.am
index 2643387010..ebaec22531 100644
--- a/modules/startup-wizard/Makefile.am
+++ b/modules/startup-wizard/Makefile.am
@@ -19,6 +19,8 @@ libevolution_module_startup_wizard_la_LIBADD = \
$(top_builddir)/calendar/gui/libevolution-calendar.la \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/capplet/settings/libevolution-mail-settings.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/modules/startup-wizard/evolution-startup-wizard.c b/modules/startup-wizard/evolution-startup-wizard.c
index de15b72609..2edeb1cc78 100644
--- a/modules/startup-wizard/evolution-startup-wizard.c
+++ b/modules/startup-wizard/evolution-startup-wizard.c
@@ -24,13 +24,17 @@
#include <libebackend/e-extension.h>
#include <shell/e-shell.h>
-#include <e-util/e-account-utils.h>
+
#include <e-util/e-alert-dialog.h>
#include <e-util/e-import.h>
+#include <libemail-utils/e-account-utils.h>
+
#include <mail/e-mail-backend.h>
#include <mail/em-account-editor.h>
+
#include <capplet/settings/mail-capplet-shell.h>
+
#include <calendar/gui/calendar-config.h>
/* Standard GObject macros */
diff --git a/plugins/caldav/Makefile.am b/plugins/caldav/Makefile.am
index 6d89204eff..432cafd08e 100644
--- a/plugins/caldav/Makefile.am
+++ b/plugins/caldav/Makefile.am
@@ -19,6 +19,7 @@ liborg_gnome_evolution_caldav_la_SOURCES = \
liborg_gnome_evolution_caldav_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/plugins/caldav/caldav-browse-server.c b/plugins/caldav/caldav-browse-server.c
index e1384ce062..c9d09cea20 100644
--- a/plugins/caldav/caldav-browse-server.c
+++ b/plugins/caldav/caldav-browse-server.c
@@ -38,7 +38,8 @@
#include <libedataserverui/e-passwords.h>
#include <e-util/e-dialog-utils.h>
-#include <e-util/e-account-utils.h>
+
+#include <libemail-utils/e-account-utils.h>
#include "caldav-browse-server.h"
diff --git a/plugins/dbx-import/Makefile.am b/plugins/dbx-import/Makefile.am
index 67d5e0d5d3..eeaf69ff3f 100644
--- a/plugins/dbx-import/Makefile.am
+++ b/plugins/dbx-import/Makefile.am
@@ -27,6 +27,8 @@ liborg_gnome_dbx_import_la_LIBADD = \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/shell/libeshell.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/plugins/dbx-import/dbx-importer.c b/plugins/dbx-import/dbx-importer.c
index 5415f4867c..f6b666516a 100644
--- a/plugins/dbx-import/dbx-importer.c
+++ b/plugins/dbx-import/dbx-importer.c
@@ -64,10 +64,11 @@
#include <libedataserver/e-data-server-util.h>
#include <libedataserverui/e-source-selector-dialog.h>
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/mail-tools.h>
+
#include <mail/e-mail-backend.h>
#include <mail/em-folder-selection-button.h>
-#include <mail/mail-mt.h>
-#include <mail/mail-tools.h>
#include <mail/em-utils.h>
#define d(x)
@@ -603,7 +604,7 @@ dbx_import_file (DbxImporter *m)
/* Destination folder, was set in our widget */
m->parent_uri = g_strdup (((EImportTargetURI *) m->target)->uri_dest);
- cancellable = e_activity_get_cancellable (m->base.activity);
+ cancellable = m->base.cancellable;
/* XXX Dig up the EMailSession from the default EShell.
* Since the EImport framework doesn't allow for user
diff --git a/plugins/imap-features/imap-headers.c b/plugins/imap-features/imap-headers.c
index f09f880b36..60f50d7dd6 100644
--- a/plugins/imap-features/imap-headers.c
+++ b/plugins/imap-features/imap-headers.c
@@ -25,15 +25,14 @@
#endif
#include <string.h>
-
-#include <mail/em-config.h>
-
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
#include <e-util/e-util.h>
-#include <e-util/e-account-utils.h>
-#include <glib/gi18n.h>
+#include <libemail-utils/e-account-utils.h>
+
+#include <mail/em-config.h>
typedef struct _epif_data EPImapFeaturesData;
struct _epif_data {
diff --git a/plugins/itip-formatter/Makefile.am b/plugins/itip-formatter/Makefile.am
index 793908ecad..71fced63f0 100644
--- a/plugins/itip-formatter/Makefile.am
+++ b/plugins/itip-formatter/Makefile.am
@@ -22,6 +22,8 @@ liborg_gnome_itip_formatter_la_LIBADD = \
$(top_builddir)/shell/libeshell.la \
$(top_builddir)/em-format/libemformat.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/plugins/itip-formatter/itip-formatter.c b/plugins/itip-formatter/itip-formatter.c
index 687dc26a53..d450dcfb80 100644
--- a/plugins/itip-formatter/itip-formatter.c
+++ b/plugins/itip-formatter/itip-formatter.c
@@ -27,27 +27,36 @@
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+
#include <libecal/e-cal-client.h>
#include <libecal/e-cal-time-util.h>
+#include <libedataserver/e-account-list.h>
#include <libedataserverui/e-source-selector.h>
#include <libedataserverui/e-client-utils.h>
#include <gtkhtml/gtkhtml-embedded.h>
+
+#include <e-util/e-alert-dialog.h>
+#include <e-util/e-mktemp.h>
+
+#include <shell/e-shell.h>
+#include <shell/e-shell-utils.h>
+
+#include <libemail-utils/e-account-utils.h>
+#include <libemail-utils/mail-mt.h>
+
+#include <libemail-engine/mail-folder-cache.h>
+#include <libemail-engine/mail-tools.h>
+
#include <mail/em-format-hook.h>
#include <mail/em-config.h>
#include <mail/em-format-html.h>
#include <mail/em-utils.h>
-#include <mail/mail-folder-cache.h>
-#include <mail/mail-tools.h>
-#include <mail/mail-mt.h>
-#include <libedataserver/e-account-list.h>
-#include <e-util/e-account-utils.h>
-#include <e-util/e-alert-dialog.h>
-#include <e-util/e-mktemp.h>
+
+#include <misc/e-attachment.h>
+
#include <calendar/gui/itip-utils.h>
-#include <shell/e-shell.h>
-#include <shell/e-shell-utils.h>
+
#include "itip-view.h"
-#include <misc/e-attachment.h>
#define CLASSID "itip://"
#define CONF_KEY_DELETE "delete-processed"
diff --git a/plugins/mail-notification/Makefile.am b/plugins/mail-notification/Makefile.am
index bcac34a81c..07cb42ed32 100644
--- a/plugins/mail-notification/Makefile.am
+++ b/plugins/mail-notification/Makefile.am
@@ -29,6 +29,7 @@ liborg_gnome_mail_notification_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/shell/libeshell.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(LIBNOTIFY_LIBS) \
diff --git a/plugins/mail-notification/mail-notification.c b/plugins/mail-notification/mail-notification.c
index 481cf24c97..0c6714d856 100644
--- a/plugins/mail-notification/mail-notification.c
+++ b/plugins/mail-notification/mail-notification.c
@@ -36,7 +36,7 @@
#include <time.h>
#include <e-util/e-config.h>
-#include <mail/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-folder-utils.h>
#include <mail/em-utils.h>
#include <mail/em-event.h>
#include <mail/em-folder-tree.h>
diff --git a/plugins/mail-to-task/Makefile.am b/plugins/mail-to-task/Makefile.am
index 845a82c7a3..48f0724b6f 100644
--- a/plugins/mail-to-task/Makefile.am
+++ b/plugins/mail-to-task/Makefile.am
@@ -23,6 +23,7 @@ liborg_gnome_mail_to_task_la_LIBADD = \
$(top_builddir)/calendar/gui/libevolution-calendar.la \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/plugins/mail-to-task/mail-to-task.c b/plugins/mail-to-task/mail-to-task.c
index a4713c5447..e338393a76 100644
--- a/plugins/mail-to-task/mail-to-task.c
+++ b/plugins/mail-to-task/mail-to-task.c
@@ -28,9 +28,9 @@
#include <config.h>
#endif
-#include <glib/gi18n-lib.h>
-#include <string.h>
#include <stdio.h>
+#include <string.h>
+#include <glib/gi18n-lib.h>
#include <gtkhtml/gtkhtml.h>
#include <libecal/e-cal-client.h>
@@ -41,20 +41,25 @@
#include <libedataserverui/e-source-selector-dialog.h>
#include <libedataserverui/e-client-utils.h>
-#include <mail/e-mail-browser.h>
-#include <mail/em-utils.h>
-#include <mail/em-format-html.h>
-#include <mail/message-list.h>
-#include <e-util/e-account-utils.h>
#include <e-util/e-dialog-utils.h>
+
+#include <libemail-utils/e-account-utils.h>
+
#include <misc/e-popup-action.h>
+#include <misc/e-attachment-store.h>
+
#include <shell/e-shell-view.h>
#include <shell/e-shell-window-actions.h>
+
+#include <mail/e-mail-browser.h>
+#include <mail/em-utils.h>
+#include <mail/em-format-html.h>
+#include <mail/message-list.h>
+
#include <calendar/gui/dialogs/comp-editor.h>
#include <calendar/gui/dialogs/event-editor.h>
-#include <calendar/gui/dialogs/task-editor.h>
#include <calendar/gui/dialogs/memo-editor.h>
-#include <misc/e-attachment-store.h>
+#include <calendar/gui/dialogs/task-editor.h>
#define E_SHELL_WINDOW_ACTION_CONVERT_TO_EVENT(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-convert-to-event")
diff --git a/plugins/mailing-list-actions/Makefile.am b/plugins/mailing-list-actions/Makefile.am
index 77f6fdce6e..a3c46efab2 100644
--- a/plugins/mailing-list-actions/Makefile.am
+++ b/plugins/mailing-list-actions/Makefile.am
@@ -21,6 +21,8 @@ liborg_gnome_mailing_list_actions_la_LIBADD = \
$(top_builddir)/composer/libcomposer.la \
$(top_builddir)/mail/libevolution-mail.la \
$(top_builddir)/shell/libeshell.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/plugins/mailing-list-actions/mailing-list-actions.c b/plugins/mailing-list-actions/mailing-list-actions.c
index 8e849be972..a9bc811c1d 100644
--- a/plugins/mailing-list-actions/mailing-list-actions.c
+++ b/plugins/mailing-list-actions/mailing-list-actions.c
@@ -24,27 +24,32 @@
#include <config.h>
#endif
-#include <glib/gi18n-lib.h>
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
+#include <glib/gi18n-lib.h>
+
+#include <e-util/e-util.h>
+#include <e-util/e-alert-dialog.h>
+
+#include <libemail-utils/e-account-utils.h>
+
+#include <shell/e-shell-view.h>
+#include <shell/e-shell-window.h>
+#include <shell/e-shell-window-actions.h>
+
+#include <composer/e-msg-composer.h>
+
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/mail-ops.h>
-#include "composer/e-msg-composer.h"
-#include "mail/e-mail-browser.h"
-#include "mail/e-mail-reader.h"
-#include "mail/em-composer-utils.h"
-#include "mail/em-format-hook.h"
-#include "mail/em-config.h"
-#include "mail/em-utils.h"
-#include "mail/mail-ops.h"
-#include "mail/mail-mt.h"
-#include "mail/message-list.h"
-#include "e-util/e-util.h"
-#include "e-util/e-account-utils.h"
-#include "e-util/e-alert-dialog.h"
-#include "shell/e-shell-view.h"
-#include "shell/e-shell-window.h"
-#include "shell/e-shell-window-actions.h"
+#include <mail/e-mail-browser.h>
+#include <mail/e-mail-reader.h>
+#include <mail/em-composer-utils.h>
+#include <mail/em-config.h>
+#include <mail/em-format-hook.h>
+#include <mail/em-utils.h>
+#include <mail/message-list.h>
/* EAlert Message IDs */
#define MESSAGE_PREFIX "org.gnome.mailing-list-actions:"
diff --git a/plugins/mark-all-read/mark-all-read.c b/plugins/mark-all-read/mark-all-read.c
index 476172d43e..beac49ae47 100644
--- a/plugins/mark-all-read/mark-all-read.c
+++ b/plugins/mark-all-read/mark-all-read.c
@@ -30,7 +30,8 @@
#include <glib/gi18n.h>
#include <e-util/e-plugin-ui.h>
-#include <mail/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-folder-utils.h>
+
#include <mail/em-folder-tree.h>
#include <mail/em-utils.h>
diff --git a/plugins/pst-import/pst-importer.c b/plugins/pst-import/pst-importer.c
index 4305827ed1..f1e61dd07c 100644
--- a/plugins/pst-import/pst-importer.c
+++ b/plugins/pst-import/pst-importer.c
@@ -53,10 +53,11 @@
#include <libedataserverui/e-source-combo-box.h>
#include <libedataserverui/e-client-utils.h>
+#include <libemail-utils/mail-mt.h>
+#include <libemail-engine/mail-tools.h>
+
#include <mail/e-mail-backend.h>
#include <mail/em-folder-selection-button.h>
-#include <mail/mail-mt.h>
-#include <mail/mail-tools.h>
#include <mail/em-utils.h>
#include <shell/e-shell.h>
#include <shell/e-shell-window.h>
diff --git a/plugins/templates/Makefile.am b/plugins/templates/Makefile.am
index a64a10e1dd..948dfea677 100644
--- a/plugins/templates/Makefile.am
+++ b/plugins/templates/Makefile.am
@@ -23,6 +23,7 @@ liborg_gnome_templates_la_LIBADD = \
$(top_builddir)/composer/libcomposer.la \
$(top_builddir)/shell/libeshell.la \
$(top_builddir)/mail/libevolution-mail.la \
+ $(top_builddir)/libemail-engine/libemail-engine.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(GTKHTML_LIBS)
diff --git a/plugins/templates/templates.c b/plugins/templates/templates.c
index 714a6f0e0b..2b62dc922d 100644
--- a/plugins/templates/templates.c
+++ b/plugins/templates/templates.c
@@ -30,19 +30,21 @@
#include <glib/gi18n.h>
#include <string.h>
+#include <e-util/e-alert-dialog.h>
#include <e-util/e-config.h>
+#include <e-util/e-plugin.h>
+#include <e-util/e-util.h>
+
+#include <shell/e-shell-view.h>
+
+#include <libemail-engine/e-mail-folder-utils.h>
+#include <libemail-engine/e-mail-session.h>
+#include <libemail-engine/mail-ops.h>
-#include <mail/e-mail-folder-utils.h>
#include <mail/e-mail-reader.h>
-#include <mail/e-mail-session.h>
#include <mail/em-composer-utils.h>
#include <mail/em-utils.h>
-#include <mail/mail-ops.h>
#include <mail/message-list.h>
-#include <e-util/e-alert-dialog.h>
-#include <e-util/e-plugin.h>
-#include <e-util/e-util.h>
-#include <shell/e-shell-view.h>
#include <composer/e-msg-composer.h>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 4ffe4684c9..5814851518 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -166,7 +166,6 @@ e-util/e-file-utils.c
e-util/e-plugin.c
e-util/e-plugin-util.c
e-util/e-print.c
-e-util/e-signature.c
e-util/e-system.error.xml
e-util/e-util.c
filter/e-filter-datespec.c
@@ -179,12 +178,21 @@ filter/e-rule-context.c
filter/e-rule-editor.c
filter/filter.error.xml
[type: gettext/glade]filter/filter.ui
+libemail-engine/e-mail-folder-utils.c
+libemail-engine/e-mail-session.c
+libemail-engine/e-mail-session-utils.c
+libemail-engine/e-mail-store-utils.c
+libemail-engine/mail-config.c
+libemail-engine/mail-folder-cache.c
+libemail-engine/mail-ops.c
+libemail-engine/mail-tools.c
+libemail-utils/e-signature.c
+libemail-utils/mail-mt.c
mail/e-mail-account-manager.c
mail/e-mail-account-tree-view.c
mail/e-mail-attachment-bar.c
mail/e-mail-browser.c
mail/e-mail-display.c
-mail/e-mail-folder-utils.c
mail/e-mail-junk-options.c
mail/e-mail-label-dialog.c
mail/e-mail-label-list-store.c
@@ -194,10 +202,8 @@ mail/e-mail-migrate.c
mail/e-mail-notebook-view.c
mail/e-mail-reader.c
mail/e-mail-reader-utils.c
-mail/e-mail-session.c
-mail/e-mail-session-utils.c
-mail/e-mail-store-utils.c
mail/e-mail-tag-editor.c
+mail/e-mail-ui-session.c
mail/em-account-editor.c
mail/em-composer-utils.c
mail/em-filter-editor.c
@@ -225,15 +231,10 @@ mail/importers/evolution-mbox-importer.c
mail/importers/mail-importer.c
mail/importers/pine-importer.c
mail/mail-autofilter.c
-mail/mail-config.c
[type: gettext/glade]mail/mail-config.ui
[type: gettext/glade]mail/mail-dialogs.ui
mail/mail.error.xml
-mail/mail-folder-cache.c
-mail/mail-mt.c
-mail/mail-ops.c
mail/mail-send-recv.c
-mail/mail-tools.c
mail/mail-vfolder.c
mail/message-list.c
mail/message-list.etspec
diff --git a/shell/Makefile.am b/shell/Makefile.am
index ad9a0bb308..57b9b0c75d 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -90,6 +90,7 @@ libeshell_la_SOURCES = \
libeshell_la_LDFLAGS = $(NO_UNDEFINED)
libeshell_la_LIBADD = \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/filter/libfilter.la \
$(top_builddir)/smclient/libeggsmclient.la \
@@ -142,6 +143,7 @@ evolution_LDADD = \
$(top_builddir)/widgets/e-timezone-dialog/libetimezonedialog.la \
$(top_builddir)/widgets/menus/libmenus.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/filter/libfilter.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
diff --git a/smime/lib/Makefile.am b/smime/lib/Makefile.am
index df2fb96208..9ed6067c0e 100644
--- a/smime/lib/Makefile.am
+++ b/smime/lib/Makefile.am
@@ -29,6 +29,7 @@ libessmime_la_SOURCES = \
e-pkcs12.h
libessmime_la_LIBADD = \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(top_builddir)/e-util/libeutil.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am
index 24495ed2cb..d0bef3fa28 100644
--- a/widgets/misc/Makefile.am
+++ b/widgets/misc/Makefile.am
@@ -157,6 +157,7 @@ libemiscwidgets_la_LIBADD = \
$(top_builddir)/filter/libfilter.la \
$(top_builddir)/a11y/libevolution-a11y.la \
$(top_builddir)/libgnomecanvas/libgnomecanvas.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(MATH_LIB) \
diff --git a/widgets/misc/e-signature-combo-box.h b/widgets/misc/e-signature-combo-box.h
index dd81eb55c3..5a571499df 100644
--- a/widgets/misc/e-signature-combo-box.h
+++ b/widgets/misc/e-signature-combo-box.h
@@ -23,8 +23,8 @@
#define E_SIGNATURE_COMBO_BOX_H
#include <gtk/gtk.h>
-#include <e-util/e-signature.h>
-#include <e-util/e-signature-list.h>
+#include <libemail-utils/e-signature.h>
+#include <libemail-utils/e-signature-list.h>
/* Standard GObject macros */
#define E_TYPE_SIGNATURE_COMBO_BOX \
diff --git a/widgets/misc/e-signature-editor.c b/widgets/misc/e-signature-editor.c
index 16efaa6d34..d968debe8f 100644
--- a/widgets/misc/e-signature-editor.c
+++ b/widgets/misc/e-signature-editor.c
@@ -30,7 +30,7 @@
#include <e-util/e-alert-dialog.h>
#include <e-util/e-alert-sink.h>
-#include <e-util/e-signature-utils.h>
+#include <libemail-utils/e-signature-utils.h>
#include <misc/e-web-view.h>
enum {
diff --git a/widgets/misc/e-signature-editor.h b/widgets/misc/e-signature-editor.h
index 6d9f4a9b61..0d07cb840e 100644
--- a/widgets/misc/e-signature-editor.h
+++ b/widgets/misc/e-signature-editor.h
@@ -23,8 +23,8 @@
#define E_SIGNATURE_EDITOR_H
#include <gtkhtml-editor.h>
-#include <e-util/e-signature.h>
#include <misc/e-focus-tracker.h>
+#include <libemail-utils/e-signature.h>
/* Standard GObject macros */
#define E_TYPE_SIGNATURE_EDITOR \
diff --git a/widgets/misc/e-signature-manager.h b/widgets/misc/e-signature-manager.h
index 88ee391564..a5516214a2 100644
--- a/widgets/misc/e-signature-manager.h
+++ b/widgets/misc/e-signature-manager.h
@@ -23,9 +23,9 @@
#define E_SIGNATURE_MANAGER_H
#include <gtk/gtk.h>
-#include <e-util/e-signature-list.h>
#include <misc/e-signature-editor.h>
#include <misc/e-signature-tree-view.h>
+#include <libemail-utils/e-signature-list.h>
/* Standard GObject macros */
#define E_TYPE_SIGNATURE_MANAGER \
diff --git a/widgets/misc/e-signature-preview.c b/widgets/misc/e-signature-preview.c
index a2c2352efb..6de03c0881 100644
--- a/widgets/misc/e-signature-preview.c
+++ b/widgets/misc/e-signature-preview.c
@@ -29,7 +29,8 @@
#include <string.h>
#include <unistd.h>
#include <glib/gstdio.h>
-#include "e-util/e-signature-utils.h"
+
+#include <libemail-utils/e-signature-utils.h>
enum {
PROP_0,
diff --git a/widgets/misc/e-signature-preview.h b/widgets/misc/e-signature-preview.h
index 1a884b8563..f13ecf8ec4 100644
--- a/widgets/misc/e-signature-preview.h
+++ b/widgets/misc/e-signature-preview.h
@@ -22,8 +22,8 @@
#ifndef E_SIGNATURE_PREVIEW_H
#define E_SIGNATURE_PREVIEW_H
-#include <e-util/e-signature.h>
#include <misc/e-web-view.h>
+#include <libemail-utils/e-signature.h>
/* Standard GObject macros */
#define E_TYPE_SIGNATURE_PREVIEW \
diff --git a/widgets/misc/e-signature-tree-view.h b/widgets/misc/e-signature-tree-view.h
index 50d1e11905..6842340d8a 100644
--- a/widgets/misc/e-signature-tree-view.h
+++ b/widgets/misc/e-signature-tree-view.h
@@ -23,8 +23,8 @@
#define E_SIGNATURE_TREE_VIEW_H
#include <gtk/gtk.h>
-#include <e-util/e-signature.h>
-#include <e-util/e-signature-list.h>
+#include <libemail-utils/e-signature.h>
+#include <libemail-utils/e-signature-list.h>
/* Standard GObject macros */
#define E_TYPE_SIGNATURE_TREE_VIEW \
diff --git a/widgets/table/Makefile.am b/widgets/table/Makefile.am
index 36af5ec2bf..001a2fd1e7 100644
--- a/widgets/table/Makefile.am
+++ b/widgets/table/Makefile.am
@@ -172,6 +172,7 @@ libetable_la_LIBADD = \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
$(top_builddir)/widgets/text/libetext.la \
$(top_builddir)/libgnomecanvas/libgnomecanvas.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(MATH_LIB)
diff --git a/widgets/text/Makefile.am b/widgets/text/Makefile.am
index d7c62af74e..0928da099f 100644
--- a/widgets/text/Makefile.am
+++ b/widgets/text/Makefile.am
@@ -35,6 +35,7 @@ libetext_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
$(top_builddir)/libgnomecanvas/libgnomecanvas.la \
+ $(top_builddir)/libemail-utils/libemail-utils.la \
$(EVOLUTION_DATA_SERVER_LIBS) \
$(GNOME_PLATFORM_LIBS) \
$(REGEX_LIBS) \