diff options
author | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-10-28 17:38:03 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-10-28 17:38:03 +0800 |
commit | b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89 (patch) | |
tree | 7190b4353c533028b4a0c27d241d96e883a280ad | |
parent | 9744056c5e69227abdcdd55c4bffb674b29bd765 (diff) | |
parent | 8f5493140c4da6e81e2c14e77833bfbb56c619f8 (diff) | |
download | gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.tar gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.tar.gz gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.tar.bz2 gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.tar.lz gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.tar.xz gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.tar.zst gsoc2013-evolution-b3b35231e2ce675202ef9f1a7ccefdc3ab0e0e89.zip |
Merge branch 'master' into wip/gsettings
-rw-r--r-- | capplet/anjal-settings-main.c | 5 | ||||
-rw-r--r-- | capplet/settings/mail-capplet-shell.c | 2 | ||||
-rw-r--r-- | capplet/settings/mail-guess-servers.c | 4 | ||||
-rw-r--r-- | mail/e-mail-backend.c | 11 | ||||
-rw-r--r-- | mail/e-mail-migrate.c | 12 | ||||
-rw-r--r-- | mail/e-mail-store.c | 57 | ||||
-rw-r--r-- | mail/e-mail-store.h | 14 | ||||
-rw-r--r-- | mail/em-account-editor.c | 4 | ||||
-rw-r--r-- | mail/em-folder-tree-model.c | 4 | ||||
-rw-r--r-- | mail/em-folder-tree.c | 4 | ||||
-rw-r--r-- | mail/mail-vfolder.c | 2 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-backend.c | 7 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-view-actions.c | 8 | ||||
-rw-r--r-- | modules/mail/em-account-prefs.c | 14 | ||||
-rw-r--r-- | plugins/pst-import/pst-importer.c | 67 | ||||
-rw-r--r-- | shell/main.c | 4 |
16 files changed, 136 insertions, 83 deletions
diff --git a/capplet/anjal-settings-main.c b/capplet/anjal-settings-main.c index 91e36904c7..7efddcffbf 100644 --- a/capplet/anjal-settings-main.c +++ b/capplet/anjal-settings-main.c @@ -167,11 +167,6 @@ main (gint argc, if (!gtk_init_with_args (&argc, &argv, NULL, entries, NULL, &error)) g_error ("%s", error->message); - #if !GLIB_CHECK_VERSION(2,31,0) - if (!g_thread_get_initialized ()) - g_thread_init (NULL); - #endif - e_passwords_init (); categories_icon_theme_hack (); diff --git a/capplet/settings/mail-capplet-shell.c b/capplet/settings/mail-capplet-shell.c index 6567da02ac..2bf464c7c0 100644 --- a/capplet/settings/mail-capplet-shell.c +++ b/capplet/settings/mail-capplet-shell.c @@ -278,7 +278,7 @@ mail_capplet_shell_construct (MailCappletShell *shell, mail_config_init (session); mail_msg_init (); custom_dir = g_build_filename (e_get_user_data_dir (), "mail", NULL); - e_mail_store_init (shell->priv->backend, custom_dir); + e_mail_store_init (session, custom_dir); g_free (custom_dir); if (just_druid) { diff --git a/capplet/settings/mail-guess-servers.c b/capplet/settings/mail-guess-servers.c index 0b15271a88..8ab9670e8c 100644 --- a/capplet/settings/mail-guess-servers.c +++ b/capplet/settings/mail-guess-servers.c @@ -343,9 +343,7 @@ main (gint argc, gchar **argv) { EmailProvider *provider; - #if !GLIB_CHECK_VERSION(2,31,0) - g_thread_init (NULL); - #endif + g_type_init (); provider = g_new0 (EmailProvider, 1); diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c index be2f94eeb9..aedbdd2626 100644 --- a/mail/e-mail-backend.c +++ b/mail/e-mail-backend.c @@ -171,7 +171,7 @@ mail_backend_prepare_for_offline_cb (EShell *shell, } e_mail_store_foreach ( - backend, (GFunc) mail_store_prepare_for_offline_cb, activity); + session, (GFunc) mail_store_prepare_for_offline_cb, activity); } /* Helper for mail_backend_prepare_for_online_cb() */ @@ -197,7 +197,7 @@ mail_backend_prepare_for_online_cb (EShell *shell, camel_session_set_online (CAMEL_SESSION (session), TRUE); e_mail_store_foreach ( - backend, (GFunc) mail_store_prepare_for_online_cb, activity); + session, (GFunc) mail_store_prepare_for_online_cb, activity); } /* Helper for mail_backend_prepare_for_quit_cb() */ @@ -272,6 +272,7 @@ mail_backend_prepare_for_quit_cb (EShell *shell, EMailBackend *backend) { EAccountList *account_list; + EMailSession *session; gboolean delete_junk; gboolean empty_trash; @@ -280,6 +281,8 @@ mail_backend_prepare_for_quit_cb (EShell *shell, gboolean empty_trash; } sync_data; + session = e_mail_backend_get_session (backend); + delete_junk = e_mail_backend_delete_junk_policy_decision (backend); empty_trash = e_mail_backend_empty_trash_policy_decision (backend); @@ -295,13 +298,13 @@ mail_backend_prepare_for_quit_cb (EShell *shell, if (delete_junk) e_mail_store_foreach ( - backend, (GFunc) mail_backend_delete_junk, backend); + session, (GFunc) mail_backend_delete_junk, backend); sync_data.activity = activity; sync_data.empty_trash = empty_trash; e_mail_store_foreach ( - backend, (GFunc) mail_backend_final_sync, &sync_data); + session, (GFunc) mail_backend_final_sync, &sync_data); /* Now we poll until all activities are actually cancelled or finished. * Reffing the activity delays quitting; the reference count diff --git a/mail/e-mail-migrate.c b/mail/e-mail-migrate.c index b11e3c4ae1..59605e24a4 100644 --- a/mail/e-mail-migrate.c +++ b/mail/e-mail-migrate.c @@ -701,6 +701,7 @@ migrate_to_db (EShellBackend *shell_backend) EMMigrateSession *session; EAccountList *accounts; EMailBackend *mail_backend; + EMailSession *mail_session; EIterator *iter; gint i = 0, len; CamelStore *store = NULL; @@ -713,10 +714,11 @@ migrate_to_db (EShellBackend *shell_backend) return; mail_backend = E_MAIL_BACKEND (shell_backend); + mail_session = e_mail_backend_get_session (mail_backend); data_dir = e_shell_backend_get_data_dir (shell_backend); /* Initialize the mail stores early so we can add a new one. */ - e_mail_store_init (mail_backend, data_dir); + e_mail_store_init (mail_session, data_dir); iter = e_list_get_iterator ((EList *) accounts); len = e_list_length ((EList *) accounts); @@ -773,7 +775,7 @@ migrate_to_db (EShellBackend *shell_backend) && strncmp (service->url, "mbox:", 5) != 0) { store = e_mail_store_add_by_account ( - mail_backend, account); + mail_session, account); info = camel_store_get_folder_info_sync ( store, NULL, @@ -1016,6 +1018,7 @@ create_mbox_account (EShellBackend *shell_backend, EMMigrateSession *session) { EMailBackend *mail_backend; + EMailSession *mail_session; CamelStore *store; CamelURL *url; EAccountList *accounts; @@ -1024,10 +1027,11 @@ create_mbox_account (EShellBackend *shell_backend, gchar *name, *id, *temp, *uri, *folder_uri; mail_backend = E_MAIL_BACKEND (shell_backend); + mail_session = e_mail_backend_get_session (mail_backend); data_dir = e_shell_backend_get_data_dir (shell_backend); /* Initialize the mail stores early so we can add a new one. */ - e_mail_store_init (mail_backend, data_dir); + e_mail_store_init (mail_session, data_dir); account = e_account_new (); account->enabled = TRUE; @@ -1061,7 +1065,7 @@ create_mbox_account (EShellBackend *shell_backend, } e_account_list_add (accounts, account); - store = e_mail_store_add_by_account (mail_backend, account); + store = e_mail_store_add_by_account (mail_session, account); folder_uri = e_mail_folder_uri_build (store, "Sent"); e_account_set_string ( diff --git a/mail/e-mail-store.c b/mail/e-mail-store.c index 07dcab8c5e..c995f42498 100644 --- a/mail/e-mail-store.c +++ b/mail/e-mail-store.c @@ -182,20 +182,17 @@ special_mail_store_is_enabled (CamelStore *store) } static void -mail_store_add (EMailBackend *backend, +mail_store_add (EMailSession *session, CamelStore *store, AddStoreCallback callback) { - EMailSession *session; EMFolderTreeModel *default_model; MailFolderCache *folder_cache; StoreInfo *store_info; g_return_if_fail (store_table != NULL); - g_return_if_fail (store != NULL); g_return_if_fail (CAMEL_IS_STORE (store)); - session = e_mail_backend_get_session (backend); default_model = em_folder_tree_model_get_default (); folder_cache = e_mail_session_get_folder_cache (session); @@ -230,23 +227,20 @@ mail_store_add_local_done_cb (MailFolderCache *folder_cache, } static void -mail_store_load_accounts (EMailBackend *backend, +mail_store_load_accounts (EMailSession *session, const gchar *data_dir) { CamelStore *local_store; - EMailSession *session; EAccountList *account_list; EIterator *iter; - session = e_mail_backend_get_session (backend); - /* Add the local store. */ e_mail_local_init (session, data_dir); local_store = e_mail_local_get_store (); mail_store_add ( - backend, local_store, (AddStoreCallback) + session, local_store, (AddStoreCallback) mail_store_add_local_done_cb); /* Add mail accounts.. */ @@ -262,19 +256,19 @@ mail_store_load_accounts (EMailBackend *backend, if (!account->enabled) continue; - e_mail_store_add_by_account (backend, account); + e_mail_store_add_by_account (session, account); } g_object_unref (iter); } void -e_mail_store_init (EMailBackend *backend, +e_mail_store_init (EMailSession *session, const gchar *data_dir) { static gboolean initialized = FALSE; - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (E_IS_MAIL_SESSION (session)); /* This function is idempotent because mail * migration code may need to call it early. */ @@ -288,26 +282,25 @@ e_mail_store_init (EMailBackend *backend, (GDestroyNotify) NULL, (GDestroyNotify) store_table_free); - mail_store_load_accounts (backend, data_dir); + mail_store_load_accounts (session, data_dir); initialized = TRUE; } void -e_mail_store_add (EMailBackend *backend, +e_mail_store_add (EMailSession *session, CamelStore *store) { - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (CAMEL_IS_STORE (store)); - mail_store_add (backend, store, NULL); + mail_store_add (session, store, NULL); } CamelStore * -e_mail_store_add_by_account (EMailBackend *backend, +e_mail_store_add_by_account (EMailSession *session, EAccount *account) { - EMailSession *session; CamelService *service = NULL; CamelProvider *provider; CamelURL *url; @@ -316,11 +309,9 @@ e_mail_store_add_by_account (EMailBackend *backend, gboolean service_belongs_in_tree_model; GError *error = NULL; - g_return_val_if_fail (E_IS_MAIL_BACKEND (backend), NULL); + g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL); g_return_val_if_fail (E_IS_ACCOUNT (account), NULL); - session = e_mail_backend_get_session (backend); - /* check whether it's transport-only accounts */ transport_only = (account->source == NULL) || @@ -365,7 +356,7 @@ e_mail_store_add_by_account (EMailBackend *backend, !service_is_local_delivery; if (service_belongs_in_tree_model && store_table != NULL) - e_mail_store_add (backend, CAMEL_STORE (service)); + e_mail_store_add (session, CAMEL_STORE (service)); handle_transport: @@ -426,19 +417,16 @@ fail: } void -e_mail_store_remove (EMailBackend *backend, +e_mail_store_remove (EMailSession *session, CamelStore *store) { - EMailSession *session; MailFolderCache *folder_cache; EMFolderTreeModel *default_model; - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (CAMEL_IS_STORE (store)); g_return_if_fail (store_table != NULL); - session = e_mail_backend_get_session (backend); - /* Because the store table holds a reference to each store used * as a key in it, none of them will ever be gc'ed, meaning any * call to camel_session_get_{service,store} with the same URL @@ -463,19 +451,17 @@ e_mail_store_remove (EMailBackend *backend, } void -e_mail_store_remove_by_account (EMailBackend *backend, +e_mail_store_remove_by_account (EMailSession *session, EAccount *account) { - EMailSession *session; CamelService *service; CamelProvider *provider; const gchar *uid; - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (E_IS_ACCOUNT (account)); uid = account->uid; - session = e_mail_backend_get_session (backend); service = camel_session_get_service (CAMEL_SESSION (session), uid); g_return_if_fail (CAMEL_IS_STORE (service)); @@ -486,25 +472,22 @@ e_mail_store_remove_by_account (EMailBackend *backend, if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE) || store_table == NULL) return; - e_mail_store_remove (backend, CAMEL_STORE (service)); + e_mail_store_remove (session, CAMEL_STORE (service)); } void -e_mail_store_foreach (EMailBackend *backend, +e_mail_store_foreach (EMailSession *session, GFunc func, gpointer user_data) { - EMailSession *session; GList *list, *link; /* XXX This is a silly convenience function. * Could probably just get rid of it. */ - g_return_if_fail (E_IS_MAIL_BACKEND (backend)); + g_return_if_fail (E_IS_MAIL_SESSION (session)); g_return_if_fail (func != NULL); - session = e_mail_backend_get_session (backend); - list = camel_session_list_services (CAMEL_SESSION (session)); for (link = list; link != NULL; link = g_list_next (link)) { diff --git a/mail/e-mail-store.h b/mail/e-mail-store.h index 2c676d4fc4..5dca416e09 100644 --- a/mail/e-mail-store.h +++ b/mail/e-mail-store.h @@ -23,22 +23,22 @@ #define E_MAIL_STORE_H #include <camel/camel.h> -#include <mail/e-mail-backend.h> +#include <mail/e-mail-session.h> #include <libedataserver/e-account.h> G_BEGIN_DECLS -void e_mail_store_init (EMailBackend *backend, +void e_mail_store_init (EMailSession *session, const gchar *data_dir); -void e_mail_store_add (EMailBackend *backend, +void e_mail_store_add (EMailSession *session, CamelStore *store); -CamelStore * e_mail_store_add_by_account (EMailBackend *backend, +CamelStore * e_mail_store_add_by_account (EMailSession *session, EAccount *account); -void e_mail_store_remove (EMailBackend *backend, +void e_mail_store_remove (EMailSession *session, CamelStore *store); -void e_mail_store_remove_by_account (EMailBackend *backend, +void e_mail_store_remove_by_account (EMailSession *session, EAccount *account); -void e_mail_store_foreach (EMailBackend *backend, +void e_mail_store_foreach (EMailSession *session, GFunc func, gpointer user_data); diff --git a/mail/em-account-editor.c b/mail/em-account-editor.c index 49a6798415..70a392a327 100644 --- a/mail/em-account-editor.c +++ b/mail/em-account-editor.c @@ -4108,9 +4108,11 @@ emae_commit (EConfig *ec, && emae->priv->source.provider && (emae->priv->source.provider->flags & CAMEL_PROVIDER_IS_STORAGE)) { EMailBackend *backend; + EMailSession *session; backend = em_account_editor_get_backend (emae); - e_mail_store_add_by_account (backend, account); + session = e_mail_backend_get_session (backend); + e_mail_store_add_by_account (session, account); } } diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c index 0d305799fb..e63d36261f 100644 --- a/mail/em-folder-tree-model.c +++ b/mail/em-folder-tree-model.c @@ -288,10 +288,12 @@ account_added_cb (EAccountList *accounts, EMFolderTreeModel *model) { EMailBackend *backend; + EMailSession *session; backend = em_folder_tree_model_get_backend (model); + session = e_mail_backend_get_session (backend); - e_mail_store_add_by_account (backend, account); + e_mail_store_add_by_account (session, account); } static void diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index 973051324f..79e9a04288 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -1785,15 +1785,17 @@ em_folder_tree_new_with_model (EMailBackend *backend, EAlertSink *alert_sink, EMFolderTreeModel *model) { + EMailSession *session; const gchar *data_dir; g_return_val_if_fail (E_IS_MAIL_BACKEND (backend), NULL); g_return_val_if_fail (E_IS_ALERT_SINK (alert_sink), NULL); g_return_val_if_fail (EM_IS_FOLDER_TREE_MODEL (model), NULL); + session = e_mail_backend_get_session (backend); data_dir = e_shell_backend_get_data_dir (E_SHELL_BACKEND (backend)); - e_mail_store_init (backend, data_dir); + e_mail_store_init (session, data_dir); return g_object_new ( EM_TYPE_FOLDER_TREE, diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 2d491e1bae..5fe6c09d04 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -1158,7 +1158,7 @@ vfolder_load_storage (EMailBackend *backend) G_CALLBACK (context_rule_removed), context); /* load store to mail component */ - e_mail_store_add (backend, vfolder_store); + e_mail_store_add (session, vfolder_store); /* and setup the rules we have */ rule = NULL; diff --git a/modules/mail/e-mail-shell-backend.c b/modules/mail/e-mail-shell-backend.c index 9067437a71..ce563124c6 100644 --- a/modules/mail/e-mail-shell-backend.c +++ b/modules/mail/e-mail-shell-backend.c @@ -252,8 +252,8 @@ mail_shell_backend_mail_sync (EMailShellBackend *mail_shell_backend) session = e_mail_backend_get_session (backend); e_mail_store_foreach ( - E_MAIL_BACKEND (mail_shell_backend), - (GFunc) mail_shell_backend_sync_store_cb, + session, (GFunc) + mail_shell_backend_sync_store_cb, mail_shell_backend); exit: @@ -457,9 +457,10 @@ mail_shell_backend_start (EShellBackend *shell_backend) shell_settings = e_shell_get_shell_settings (shell); backend = E_MAIL_BACKEND (shell_backend); + session = e_mail_backend_get_session (backend); data_dir = e_shell_backend_get_data_dir (shell_backend); - e_mail_store_init (backend, data_dir); + e_mail_store_init (session, data_dir); enable_search_folders = e_shell_settings_get_boolean ( shell_settings, "mail-enable-search-folders"); diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c index 2595b12d45..08cdfd81e4 100644 --- a/modules/mail/e-mail-shell-view-actions.c +++ b/modules/mail/e-mail-shell-view-actions.c @@ -85,6 +85,7 @@ action_mail_account_disable_cb (GtkAction *action, EShellBackend *shell_backend; EShellView *shell_view; EMailBackend *backend; + EMailSession *session; EMFolderTree *folder_tree; CamelService *service; CamelStore *store; @@ -98,6 +99,7 @@ action_mail_account_disable_cb (GtkAction *action, shell_backend = e_shell_view_get_shell_backend (shell_view); backend = E_MAIL_BACKEND (shell_backend); + session = e_mail_backend_get_session (backend); folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar); store = em_folder_tree_get_selected_store (folder_tree); @@ -115,7 +117,7 @@ action_mail_account_disable_cb (GtkAction *action, account->enabled = !account->enabled; e_account_list_change (account_list, account); - e_mail_store_remove_by_account (backend, account); + e_mail_store_remove_by_account (session, account); if (account->parent_uid != NULL) e_account_list_remove (account_list, account); @@ -225,15 +227,17 @@ action_mail_download_cb (GtkAction *action, EMailView *mail_view; EMailReader *reader; EMailBackend *backend; + EMailSession *session; mail_shell_content = mail_shell_view->priv->mail_shell_content; mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); reader = E_MAIL_READER (mail_view); backend = e_mail_reader_get_backend (reader); + session = e_mail_backend_get_session (backend); e_mail_store_foreach ( - backend, (GFunc) action_mail_download_foreach_cb, reader); + session, (GFunc) action_mail_download_foreach_cb, reader); } static void diff --git a/modules/mail/em-account-prefs.c b/modules/mail/em-account-prefs.c index f4a0a740d5..4bd6c1c968 100644 --- a/modules/mail/em-account-prefs.c +++ b/modules/mail/em-account-prefs.c @@ -108,7 +108,8 @@ account_prefs_enable_account_cb (EAccountTreeView *tree_view, g_return_if_fail (account != NULL); - e_mail_store_add_by_account (prefs->priv->backend, account); + session = e_mail_backend_get_session (prefs->priv->backend); + e_mail_store_add_by_account (session, account); } static void @@ -118,6 +119,7 @@ account_prefs_disable_account_cb (EAccountTreeView *tree_view, EAccountList *account_list; EMailSession *session; EAccount *account; + EMailSession *session; gpointer parent; gint response; @@ -129,11 +131,13 @@ account_prefs_disable_account_cb (EAccountTreeView *tree_view, g_return_if_fail (account != NULL); + session = e_mail_backend_get_session (prefs->priv->backend); + account_list = e_account_tree_view_get_account_list (tree_view); g_return_if_fail (account_list != NULL); if (!e_account_list_account_has_proxies (account_list, account)) { - e_mail_store_remove_by_account (prefs->priv->backend, account); + e_mail_store_remove_by_account (session, account); return; } @@ -150,7 +154,7 @@ account_prefs_disable_account_cb (EAccountTreeView *tree_view, e_account_list_remove_account_proxies (account_list, account); - e_mail_store_remove_by_account (prefs->priv->backend, account); + e_mail_store_remove_by_account (session, account); } static void @@ -324,11 +328,13 @@ account_prefs_delete_account (EAccountManager *manager) EAccountList *account_list; EMailSession *session; EAccount *account; + EMailSession *session; gboolean has_proxies; gpointer parent; gint response; priv = EM_ACCOUNT_PREFS (manager)->priv; + session = e_mail_backend_get_session (priv->backend); account_list = e_account_manager_get_account_list (manager); tree_view = e_account_manager_get_tree_view (manager); @@ -357,7 +363,7 @@ account_prefs_delete_account (EAccountManager *manager) /* Remove the account from the folder tree. */ if (account->enabled) - e_mail_store_remove_by_account (priv->backend, account); + e_mail_store_remove_by_account (session, account); /* Remove all the proxies the account has created. */ if (has_proxies) diff --git a/plugins/pst-import/pst-importer.c b/plugins/pst-import/pst-importer.c index 89e45e6785..7ef82d450e 100644 --- a/plugins/pst-import/pst-importer.c +++ b/plugins/pst-import/pst-importer.c @@ -551,10 +551,12 @@ org_credativ_evolution_readpst_getwidget (EImport *ei, g_signal_connect (w, "selected", G_CALLBACK (folder_selected), target); gtk_box_pack_end ((GtkBox *) hbox, w, FALSE, FALSE, 0); g_signal_connect (check, "toggled", G_CALLBACK (widget_sanitizer_cb), w); + widget_sanitizer_cb (GTK_TOGGLE_BUTTON (check), w); w = gtk_label_new (_("Destination folder:")); gtk_box_pack_end ((GtkBox *) hbox, w, FALSE, TRUE, 6); g_signal_connect (check, "toggled", G_CALLBACK (widget_sanitizer_cb), w); + widget_sanitizer_cb (GTK_TOGGLE_BUTTON (check), w); gtk_box_pack_start ((GtkBox *) framebox, hbox, FALSE, FALSE, 0); @@ -1113,6 +1115,61 @@ attachment_to_part (PstImporter *m, } static void +dequote_string (gchar *str) +{ + if (str[0] == '\'' || str[0] == '\"') { + gint len = strlen (str); + + if (len > 1 && (str[len - 1] == '\'' || str[len - 1] == '\"')) { + str[0] = ' '; + str[len - 1] = ' '; + g_strstrip (str); + } + } +} + +static gboolean +lookup_address (pst_item *item, const gchar *str, gboolean is_unique, CamelAddress *addr) +{ + gboolean res = FALSE; + gchar *address; + + if (!item || !str || !*str || !addr) + return FALSE; + + address = g_strdup (str); + dequote_string (address); + + if (item->contact && item->file_as.str && + (is_unique || g_str_equal (item->file_as.str, str)) && + item->contact->address1.str && + item->contact->address1_transport.str && + g_ascii_strcasecmp (item->contact->address1_transport.str, "SMTP") == 0 && + !g_str_equal (address, item->contact->address1.str)) { + gchar *tmp = address; + + address = g_strconcat ("\"", address, "\" <", item->contact->address1.str, ">", NULL); + + g_free (tmp); + } + + res = camel_address_decode (addr, address) > 0; + + g_free (address); + + return res; +} + +static const gchar * +strip_smtp (const gchar *str) +{ + if (str && g_ascii_strncasecmp (str, "SMTP:", 5) == 0) + return str + 5; + + return str; +} + +static void pst_process_email (PstImporter *m, pst_item *item) { @@ -1201,11 +1258,11 @@ pst_process_email (PstImporter *m, addr = camel_internet_address_new (); if (item->email->outlook_sender_name.str != NULL && item->email->outlook_sender.str != NULL) { - camel_internet_address_add (addr, item->email->outlook_sender_name.str, item->email->outlook_sender.str); + camel_internet_address_add (addr, item->email->outlook_sender_name.str, strip_smtp (item->email->outlook_sender.str)); } else if (item->email->outlook_sender_name.str != NULL) { - camel_address_decode (CAMEL_ADDRESS (addr), item->email->outlook_sender_name.str); + camel_address_decode (CAMEL_ADDRESS (addr), strip_smtp (item->email->outlook_sender_name.str)); } else if (item->email->outlook_sender.str != NULL) { - camel_address_decode (CAMEL_ADDRESS (addr), item->email->outlook_sender.str); + camel_address_decode (CAMEL_ADDRESS (addr), strip_smtp (item->email->outlook_sender.str)); } else { /* Evo prints a warning if no from is set, so supply an empty address */ camel_internet_address_add (addr, "", ""); @@ -1237,7 +1294,7 @@ pst_process_email (PstImporter *m, if (item->email->sentto_address.str != NULL) { addr = camel_internet_address_new (); - if (camel_address_decode (CAMEL_ADDRESS (addr), item->email->sentto_address.str) > 0) + if (lookup_address (item, item->email->sentto_address.str, item->email->cc_address.str == NULL, CAMEL_ADDRESS (addr))) camel_mime_message_set_recipients (msg, "To", addr); g_object_unref (addr); @@ -1246,7 +1303,7 @@ pst_process_email (PstImporter *m, if (item->email->cc_address.str != NULL) { addr = camel_internet_address_new (); - if (camel_address_decode (CAMEL_ADDRESS (addr), item->email->cc_address.str) > 0) + if (lookup_address (item, item->email->cc_address.str, item->email->sentto_address.str == NULL, CAMEL_ADDRESS (addr))) camel_mime_message_set_recipients (msg, "CC", addr); g_object_unref (addr); diff --git a/shell/main.c b/shell/main.c index fe12559748..0b042d4d40 100644 --- a/shell/main.c +++ b/shell/main.c @@ -482,10 +482,6 @@ main (gint argc, textdomain (GETTEXT_PACKAGE); g_type_init (); - #if !GLIB_CHECK_VERSION(2,31,0) - if (!g_thread_get_initialized ()) - g_thread_init (NULL); - #endif /* do not require Gtk+ for --force-shutdown */ if (argc == 2 && argv[1] && g_str_equal (argv[1], "--force-shutdown")) { |