diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2012-01-18 00:07:19 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2012-01-19 12:48:47 +0800 |
commit | 61ae36351b24cc676f60483d576706bf827f2987 (patch) | |
tree | c55d9e000efd47fa14865fad2defa79b5ed61ffd /mail/e-mail-store-utils.c | |
parent | 37644b9d257369c5c158121ca4807cafbe844595 (diff) | |
download | gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.gz gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.bz2 gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.lz gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.xz gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.tar.zst gsoc2013-evolution-61ae36351b24cc676f60483d576706bf827f2987.zip |
Introduce libemail-engine and libemail-utils.
These libraries are bound for E-D-S so they live at the lowest layer of
Evolution for now -- even libeutil can link to them (but please don't).
This is the first step toward moving mail handing to a D-Bus service.
Diffstat (limited to 'mail/e-mail-store-utils.c')
-rw-r--r-- | mail/e-mail-store-utils.c | 385 |
1 files changed, 0 insertions, 385 deletions
diff --git a/mail/e-mail-store-utils.c b/mail/e-mail-store-utils.c deleted file mode 100644 index 7f978c8b7f..0000000000 --- a/mail/e-mail-store-utils.c +++ /dev/null @@ -1,385 +0,0 @@ -/* - * e-mail-store-utils.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/> - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "em-utils.h" - -#include "e-mail-store-utils.h" - -#include <glib/gi18n-lib.h> - -typedef struct _AsyncContext AsyncContext; - -struct _AsyncContext { - gchar *full_name; -}; - -static void -async_context_free (AsyncContext *context) -{ - g_free (context->full_name); - - g_slice_free (AsyncContext, context); -} - -static void -mail_store_create_folder_thread (GSimpleAsyncResult *simple, - GObject *object, - GCancellable *cancellable) -{ - AsyncContext *context; - GError *error = NULL; - - context = g_simple_async_result_get_op_res_gpointer (simple); - - e_mail_store_create_folder_sync ( - CAMEL_STORE (object), context->full_name, - cancellable, &error); - - if (error != NULL) - g_simple_async_result_take_error (simple, error); -} - -gboolean -e_mail_store_create_folder_sync (CamelStore *store, - const gchar *full_name, - GCancellable *cancellable, - GError **error) -{ - CamelFolderInfo *folder_info; - gchar *copied_full_name; - gchar *display_name; - const gchar *parent; - gboolean success = TRUE; - - g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE); - g_return_val_if_fail (full_name != NULL, FALSE); - - copied_full_name = g_strdup (full_name); - display_name = strrchr (copied_full_name, '/'); - if (display_name == NULL) { - display_name = copied_full_name; - parent = ""; - } else { - *display_name++ = '\0'; - parent = copied_full_name; - } - - folder_info = camel_store_create_folder_sync ( - store, parent, display_name, cancellable, error); - - g_free (copied_full_name); - - if (folder_info == NULL) - return FALSE; - - if (CAMEL_IS_SUBSCRIBABLE (store)) - success = camel_subscribable_subscribe_folder_sync ( - CAMEL_SUBSCRIBABLE (store), - full_name, cancellable, error); - - camel_store_free_folder_info (store, folder_info); - - return success; -} - -void -e_mail_store_create_folder (CamelStore *store, - const gchar *full_name, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - AsyncContext *context; - - g_return_if_fail (CAMEL_IS_STORE (store)); - g_return_if_fail (full_name != NULL); - - context = g_slice_new0 (AsyncContext); - context->full_name = g_strdup (full_name); - - simple = g_simple_async_result_new ( - G_OBJECT (store), callback, user_data, - e_mail_store_create_folder); - - g_simple_async_result_set_op_res_gpointer ( - simple, context, (GDestroyNotify) async_context_free); - - g_simple_async_result_run_in_thread ( - simple, mail_store_create_folder_thread, - io_priority, cancellable); - - g_object_unref (simple); -} - -gboolean -e_mail_store_create_folder_finish (CamelStore *store, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail ( - g_simple_async_result_is_valid ( - result, G_OBJECT (store), - e_mail_store_create_folder), FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - - /* Assume success unless a GError is set. */ - return !g_simple_async_result_propagate_error (simple, error); -} - -static void -mail_store_go_offline_thread (GSimpleAsyncResult *simple, - CamelStore *store, - GCancellable *cancellable) -{ - CamelService *service; - gchar *service_name; - GError *error = NULL; - - service = CAMEL_SERVICE (store); - - service_name = camel_service_get_name (service, TRUE); - camel_operation_push_message ( - cancellable, _("Disconnecting from '%s'"), service_name); - g_free (service_name); - - if (CAMEL_IS_DISCO_STORE (store)) { - CamelDiscoStore *disco_store; - - disco_store = CAMEL_DISCO_STORE (store); - - if (camel_disco_store_can_work_offline (disco_store)) - camel_disco_store_set_status ( - disco_store, CAMEL_DISCO_STORE_OFFLINE, - cancellable, &error); - else - em_utils_disconnect_service_sync (service, TRUE, cancellable, &error); - - } else if (CAMEL_IS_OFFLINE_STORE (store)) { - CamelOfflineStore *offline_store; - - offline_store = CAMEL_OFFLINE_STORE (store); - - camel_offline_store_set_online_sync ( - offline_store, FALSE, cancellable, &error); - - } else - em_utils_disconnect_service_sync (service, TRUE, cancellable, &error); - - if (error != NULL) - g_simple_async_result_take_error (simple, error); - - camel_operation_pop_message (cancellable); -} - -void -e_mail_store_go_offline (CamelStore *store, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - g_return_if_fail (CAMEL_IS_STORE (store)); - - /* Cancel any pending connect first so the set_offline_op - * thread won't get queued behind a hung connect op. */ - camel_service_cancel_connect (CAMEL_SERVICE (store)); - - simple = g_simple_async_result_new ( - G_OBJECT (store), callback, - user_data, e_mail_store_go_offline); - - g_simple_async_result_run_in_thread ( - simple, (GSimpleAsyncThreadFunc) - mail_store_go_offline_thread, - io_priority, cancellable); - - g_object_unref (simple); -} - -gboolean -e_mail_store_go_offline_finish (CamelStore *store, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail ( - g_simple_async_result_is_valid ( - result, G_OBJECT (store), e_mail_store_go_offline), FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - - /* Assume success unless a GError is set. */ - return !g_simple_async_result_propagate_error (simple, error); -} - -static void -mail_store_go_online_thread (GSimpleAsyncResult *simple, - CamelStore *store, - GCancellable *cancellable) -{ - CamelService *service; - gchar *service_name; - GError *error = NULL; - - service = CAMEL_SERVICE (store); - - service_name = camel_service_get_name (service, TRUE); - camel_operation_push_message ( - cancellable, _("Reconnecting to '%s'"), service_name); - g_free (service_name); - - if (CAMEL_IS_DISCO_STORE (store)) - camel_disco_store_set_status ( - CAMEL_DISCO_STORE (store), - CAMEL_DISCO_STORE_ONLINE, - cancellable, &error); - - else if (CAMEL_IS_OFFLINE_STORE (store)) - camel_offline_store_set_online_sync ( - CAMEL_OFFLINE_STORE (store), - TRUE, cancellable, &error); - - if (error != NULL) - g_simple_async_result_take_error (simple, error); - - camel_operation_pop_message (cancellable); -} - -void -e_mail_store_go_online (CamelStore *store, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - g_return_if_fail (CAMEL_IS_STORE (store)); - - simple = g_simple_async_result_new ( - G_OBJECT (store), callback, - user_data, e_mail_store_go_online); - - g_simple_async_result_run_in_thread ( - simple, (GSimpleAsyncThreadFunc) - mail_store_go_online_thread, - io_priority, cancellable); - - g_object_unref (simple); -} - -gboolean -e_mail_store_go_online_finish (CamelStore *store, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail ( - g_simple_async_result_is_valid ( - result, G_OBJECT (store), e_mail_store_go_online), FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - - /* Assume success unless a GError is set. */ - return !g_simple_async_result_propagate_error (simple, error); -} - -static void -mail_store_prepare_for_offline_thread (GSimpleAsyncResult *simple, - CamelStore *store, - GCancellable *cancellable) -{ - CamelService *service; - gchar *service_name; - GError *error = NULL; - - service = CAMEL_SERVICE (store); - - service_name = camel_service_get_name (service, TRUE); - camel_operation_push_message ( - cancellable, _("Preparing account '%s' for offline"), - service_name); - g_free (service_name); - - if (CAMEL_IS_DISCO_STORE (store)) - camel_disco_store_prepare_for_offline ( - CAMEL_DISCO_STORE (store), cancellable, &error); - - else if (CAMEL_IS_OFFLINE_STORE (store)) - camel_offline_store_prepare_for_offline_sync ( - CAMEL_OFFLINE_STORE (store), cancellable, &error); - - if (error != NULL) - g_simple_async_result_take_error (simple, error); - - camel_operation_pop_message (cancellable); -} - -void -e_mail_store_prepare_for_offline (CamelStore *store, - gint io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - g_return_if_fail (CAMEL_IS_STORE (store)); - - simple = g_simple_async_result_new ( - G_OBJECT (store), callback, user_data, - e_mail_store_prepare_for_offline); - - g_simple_async_result_run_in_thread ( - simple, (GSimpleAsyncThreadFunc) - mail_store_prepare_for_offline_thread, - io_priority, cancellable); - - g_object_unref (simple); -} - -gboolean -e_mail_store_prepare_for_offline_finish (CamelStore *store, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail ( - g_simple_async_result_is_valid ( - result, G_OBJECT (store), - e_mail_store_prepare_for_offline), FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - - /* Assume success unless a GError is set. */ - return !g_simple_async_result_propagate_error (simple, error); -} |