CamelStream *stream;
GPtrArray *strings;
gchar *userid;
-
- /* results */
- CamelCipherValidity *validity;
};
enum {
g_ptr_array_free (async_context->strings, TRUE);
}
- if (async_context->validity != NULL)
- camel_cipher_validity_free (async_context->validity);
-
g_free (async_context->userid);
g_slice_free (AsyncContext, async_context);
/* Helper for camel_cipher_context_sign() */
static void
-cipher_context_sign_thread (GSimpleAsyncResult *simple,
- GObject *object,
+cipher_context_sign_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
GCancellable *cancellable)
{
+ gboolean success;
AsyncContext *async_context;
- GError *error = NULL;
+ GError *local_error = NULL;
- async_context = g_simple_async_result_get_op_res_gpointer (simple);
+ async_context = (AsyncContext *) task_data;
- camel_cipher_context_sign_sync (
- CAMEL_CIPHER_CONTEXT (object),
- async_context->userid, async_context->hash,
- async_context->ipart, async_context->opart,
- cancellable, &error);
+ success = camel_cipher_context_sign_sync (
+ CAMEL_CIPHER_CONTEXT (source_object),
+ async_context->userid,
+ async_context->hash,
+ async_context->ipart,
+ async_context->opart,
+ cancellable, &local_error);
- if (error != NULL)
- g_simple_async_result_take_error (simple, error);
+ if (local_error != NULL) {
+ g_task_return_error (task, local_error);
+ } else {
+ g_task_return_boolean (task, success);
+ }
}
/**
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
AsyncContext *async_context;
g_return_if_fail (CAMEL_IS_CIPHER_CONTEXT (context));
async_context->ipart = g_object_ref (ipart);
async_context->opart = g_object_ref (opart);
- simple = g_simple_async_result_new (
- G_OBJECT (context), callback, user_data,
- camel_cipher_context_sign);
-
- g_simple_async_result_set_check_cancellable (simple, cancellable);
+ task = g_task_new (context, cancellable, callback, user_data);
+ g_task_set_source_tag (task, camel_cipher_context_sign);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_set_op_res_gpointer (
- simple, async_context, (GDestroyNotify) async_context_free);
+ g_task_set_task_data (
+ task, async_context,
+ (GDestroyNotify) async_context_free);
- g_simple_async_result_run_in_thread (
- simple, cipher_context_sign_thread, io_priority, cancellable);
+ g_task_run_in_thread (task, cipher_context_sign_thread);
- g_object_unref (simple);
+ g_object_unref (task);
}
/**
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
+ g_return_val_if_fail (CAMEL_IS_CIPHER_CONTEXT (context), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, context), FALSE);
g_return_val_if_fail (
- g_simple_async_result_is_valid (
- result, G_OBJECT (context),
- camel_cipher_context_sign), FALSE);
+ g_async_result_is_tagged (
+ result, camel_cipher_context_sign), FALSE);
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- /* Assume success unless a GError is set. */
- return !g_simple_async_result_propagate_error (simple, error);
+ return g_task_propagate_boolean (G_TASK (result), error);
}
/**
/* Helper for camel_cipher_context_verify() */
static void
-cipher_context_verify_thread (GSimpleAsyncResult *simple,
- GObject *object,
+cipher_context_verify_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
GCancellable *cancellable)
{
+ CamelCipherValidity *validity;
AsyncContext *async_context;
- GError *error = NULL;
+ GError *local_error = NULL;
- async_context = g_simple_async_result_get_op_res_gpointer (simple);
+ async_context = (AsyncContext *) task_data;
- async_context->validity = camel_cipher_context_verify_sync (
- CAMEL_CIPHER_CONTEXT (object), async_context->ipart,
- cancellable, &error);
+ validity = camel_cipher_context_verify_sync (
+ CAMEL_CIPHER_CONTEXT (source_object),
+ async_context->ipart,
+ cancellable, &local_error);
- if (error != NULL)
- g_simple_async_result_take_error (simple, error);
+ if (local_error != NULL) {
+ g_warn_if_fail (validity == NULL);
+ g_task_return_error (task, local_error);
+ } else {
+ g_task_return_pointer (
+ task, validity,
+ (GDestroyNotify) camel_cipher_validity_free);
+ }
}
/**
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
AsyncContext *async_context;
g_return_if_fail (CAMEL_IS_CIPHER_CONTEXT (context));
async_context = g_slice_new0 (AsyncContext);
async_context->ipart = g_object_ref (ipart);
- simple = g_simple_async_result_new (
- G_OBJECT (context), callback, user_data,
- camel_cipher_context_verify);
-
- g_simple_async_result_set_check_cancellable (simple, cancellable);
+ task = g_task_new (context, cancellable, callback, user_data);
+ g_task_set_source_tag (task, camel_cipher_context_verify);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_set_op_res_gpointer (
- simple, async_context, (GDestroyNotify) async_context_free);
+ g_task_set_task_data (
+ task, async_context,
+ (GDestroyNotify) async_context_free);
- g_simple_async_result_run_in_thread (
- simple, cipher_context_verify_thread,
- io_priority, cancellable);
+ g_task_run_in_thread (task, cipher_context_verify_thread);
- g_object_unref (simple);
+ g_object_unref (task);
}
/**
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
- AsyncContext *async_context;
- CamelCipherValidity *validity;
+ g_return_val_if_fail (CAMEL_IS_CIPHER_CONTEXT (context), NULL);
+ g_return_val_if_fail (g_task_is_valid (result, context), NULL);
g_return_val_if_fail (
- g_simple_async_result_is_valid (
- result, G_OBJECT (context),
- camel_cipher_context_verify), NULL);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- async_context = g_simple_async_result_get_op_res_gpointer (simple);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- validity = async_context->validity;
- async_context->validity = NULL;
+ g_async_result_is_tagged (
+ result, camel_cipher_context_verify), NULL);
- return validity;
+ return g_task_propagate_pointer (G_TASK (result), error);
}
/**
/* Helper for camel_cipher_context_encrypt_thread() */
static void
-cipher_context_encrypt_thread (GSimpleAsyncResult *simple,
- GObject *object,
+cipher_context_encrypt_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
GCancellable *cancellable)
{
+ gboolean success;
AsyncContext *async_context;
- GError *error = NULL;
+ GError *local_error = NULL;
- async_context = g_simple_async_result_get_op_res_gpointer (simple);
+ async_context = (AsyncContext *) task_data;
- camel_cipher_context_encrypt_sync (
- CAMEL_CIPHER_CONTEXT (object),
- async_context->userid, async_context->strings,
- async_context->ipart, async_context->opart,
- cancellable, &error);
+ success = camel_cipher_context_encrypt_sync (
+ CAMEL_CIPHER_CONTEXT (source_object),
+ async_context->userid,
+ async_context->strings,
+ async_context->ipart,
+ async_context->opart,
+ cancellable, &local_error);
- if (error != NULL)
- g_simple_async_result_take_error (simple, error);
+ if (local_error != NULL) {
+ g_task_return_error (task, local_error);
+ } else {
+ g_task_return_boolean (task, success);
+ }
}
/**
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
AsyncContext *async_context;
guint ii;
async_context->strings,
g_strdup (recipients->pdata[ii]));
- simple = g_simple_async_result_new (
- G_OBJECT (context), callback, user_data,
- camel_cipher_context_encrypt);
-
- g_simple_async_result_set_check_cancellable (simple, cancellable);
+ task = g_task_new (context, cancellable, callback, user_data);
+ g_task_set_source_tag (task, camel_cipher_context_encrypt);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_set_op_res_gpointer (
- simple, async_context, (GDestroyNotify) async_context_free);
+ g_task_set_task_data (
+ task, async_context,
+ (GDestroyNotify) async_context_free);
- g_simple_async_result_run_in_thread (
- simple, cipher_context_encrypt_thread,
- io_priority, cancellable);
+ g_task_run_in_thread (task, cipher_context_encrypt_thread);
- g_object_unref (simple);
+ g_object_unref (task);
}
/**
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
+ g_return_val_if_fail (CAMEL_IS_CIPHER_CONTEXT (context), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, context), FALSE);
g_return_val_if_fail (
- g_simple_async_result_is_valid (
- result, G_OBJECT (context),
- camel_cipher_context_encrypt), FALSE);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
+ g_async_result_is_tagged (
+ result, camel_cipher_context_encrypt), FALSE);
- /* Assume success unless a GError is set. */
- return !g_simple_async_result_propagate_error (simple, error);
+ return g_task_propagate_boolean (G_TASK (result), error);
}
/**
/* Helper for camel_cipher_context_decrypt() */
static void
-cipher_context_decrypt_thread (GSimpleAsyncResult *simple,
- GObject *object,
+cipher_context_decrypt_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
GCancellable *cancellable)
{
+ CamelCipherValidity *validity;
AsyncContext *async_context;
- GError *error = NULL;
+ GError *local_error = NULL;
- async_context = g_simple_async_result_get_op_res_gpointer (simple);
+ async_context = (AsyncContext *) task_data;
- async_context->validity = camel_cipher_context_decrypt_sync (
- CAMEL_CIPHER_CONTEXT (object), async_context->ipart,
- async_context->opart, cancellable, &error);
+ validity = camel_cipher_context_decrypt_sync (
+ CAMEL_CIPHER_CONTEXT (source_object),
+ async_context->ipart,
+ async_context->opart,
+ cancellable, &local_error);
- if (error != NULL)
- g_simple_async_result_take_error (simple, error);
+ if (local_error != NULL) {
+ g_warn_if_fail (validity == NULL);
+ g_task_return_error (task, local_error);
+ } else {
+ g_task_return_pointer (
+ task, validity,
+ (GDestroyNotify) camel_cipher_validity_free);
+ }
}
/**
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
AsyncContext *async_context;
g_return_if_fail (CAMEL_IS_CIPHER_CONTEXT (context));
async_context->ipart = g_object_ref (ipart);
async_context->opart = g_object_ref (opart);
- simple = g_simple_async_result_new (
- G_OBJECT (context), callback, user_data,
- camel_cipher_context_decrypt);
+ task = g_task_new (context, cancellable, callback, user_data);
+ g_task_set_source_tag (task, camel_cipher_context_decrypt);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_set_check_cancellable (simple, cancellable);
+ g_task_set_task_data (
+ task, async_context,
+ (GDestroyNotify) async_context_free);
- g_simple_async_result_set_op_res_gpointer (
- simple, async_context, (GDestroyNotify) async_context_free);
+ g_task_run_in_thread (task, cipher_context_decrypt_thread);
- g_simple_async_result_run_in_thread (
- simple, cipher_context_decrypt_thread,
- io_priority, cancellable);
-
- g_object_unref (simple);
+ g_object_unref (task);
}
/**
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
- AsyncContext *async_context;
- CamelCipherValidity *validity;
+ g_return_val_if_fail (CAMEL_IS_CIPHER_CONTEXT (context), NULL);
+ g_return_val_if_fail (g_task_is_valid (result, context), NULL);
g_return_val_if_fail (
- g_simple_async_result_is_valid (
- result, G_OBJECT (context),
- camel_cipher_context_decrypt), NULL);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- async_context = g_simple_async_result_get_op_res_gpointer (simple);
+ g_async_result_is_tagged (
+ result, camel_cipher_context_decrypt), NULL);
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- validity = async_context->validity;
- async_context->validity = NULL;
-
- return validity;
+ return g_task_propagate_pointer (G_TASK (result), error);
}
/* a couple of util functions */