fetcher: Convert from GSimpleAsyncResult to GTask

Obsessive compulsive cleanup.
This commit is contained in:
Matthew Barnes 2015-09-23 15:41:24 -04:00
parent df4865e395
commit 330a99c40b
1 changed files with 52 additions and 56 deletions

View File

@ -58,7 +58,7 @@ typedef struct {
guint64 content_length; guint64 content_length;
GCancellable *cancellable; GCancellable *cancellable;
GSimpleAsyncResult *result; GTask *task;
} OstreeFetcherPendingURI; } OstreeFetcherPendingURI;
static int static int
@ -85,6 +85,7 @@ pending_uri_free (OstreeFetcherPendingURI *pending)
g_clear_object (&pending->self); g_clear_object (&pending->self);
g_clear_object (&pending->request); g_clear_object (&pending->request);
g_clear_object (&pending->request_body); g_clear_object (&pending->request_body);
g_free (pending->out_tmpfile);
g_clear_object (&pending->out_stream); g_clear_object (&pending->out_stream);
g_clear_object (&pending->cancellable); g_clear_object (&pending->cancellable);
g_free (pending); g_free (pending);
@ -349,11 +350,10 @@ on_out_splice_complete (GObject *object,
OstreeFetcherPendingURI *pending = user_data; OstreeFetcherPendingURI *pending = user_data;
gssize bytes_written; gssize bytes_written;
GError *local_error = NULL; GError *local_error = NULL;
GError **error = &local_error;
bytes_written = g_output_stream_splice_finish ((GOutputStream *)object, bytes_written = g_output_stream_splice_finish ((GOutputStream *)object,
result, result,
error); &local_error);
if (bytes_written < 0) if (bytes_written < 0)
goto out; goto out;
@ -362,10 +362,7 @@ on_out_splice_complete (GObject *object,
out: out:
if (local_error) if (local_error)
{ g_task_return_error (pending->task, local_error);
g_simple_async_result_take_error (pending->result, local_error);
g_simple_async_result_complete (pending->result);
}
} }
static void static void
@ -377,19 +374,20 @@ on_stream_read (GObject *object,
g_autoptr(GBytes) bytes = NULL; g_autoptr(GBytes) bytes = NULL;
gsize bytes_read; gsize bytes_read;
GError *local_error = NULL; GError *local_error = NULL;
GError **error = &local_error;
bytes = g_input_stream_read_bytes_finish ((GInputStream*)object, result, error); bytes = g_input_stream_read_bytes_finish ((GInputStream*)object, result, &local_error);
if (!bytes) if (!bytes)
goto out; goto out;
bytes_read = g_bytes_get_size (bytes); bytes_read = g_bytes_get_size (bytes);
if (bytes_read == 0) if (bytes_read == 0)
{ {
if (!finish_stream (pending, pending->cancellable, error)) if (!finish_stream (pending, pending->cancellable, &local_error))
goto out; goto out;
g_simple_async_result_complete (pending->result); g_task_return_pointer (pending->task,
g_object_unref (pending->result); g_strdup (pending->out_tmpfile),
(GDestroyNotify) g_free);
g_object_unref (pending->task);
} }
else else
{ {
@ -399,10 +397,9 @@ on_stream_read (GObject *object,
(bytes_read + pending->current_size) > pending->max_size) (bytes_read + pending->current_size) > pending->max_size)
{ {
g_autofree char *uristr = soup_uri_to_string (pending->uri, FALSE); g_autofree char *uristr = soup_uri_to_string (pending->uri, FALSE);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, local_error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED,
"URI %s exceeded maximum size of %" G_GUINT64_FORMAT " bytes", "URI %s exceeded maximum size of %" G_GUINT64_FORMAT " bytes",
uristr, uristr, pending->max_size);
pending->max_size);
goto out; goto out;
} }
} }
@ -427,9 +424,8 @@ on_stream_read (GObject *object,
out: out:
if (local_error) if (local_error)
{ {
g_simple_async_result_take_error (pending->result, local_error); g_task_return_error (pending->task, local_error);
g_simple_async_result_complete (pending->result); g_object_unref (pending->task);
g_object_unref (pending->result);
} }
} }
@ -457,8 +453,19 @@ on_request_sent (GObject *object,
// We already have the whole file, so just use it. // We already have the whole file, so just use it.
pending->state = OSTREE_FETCHER_STATE_COMPLETE; pending->state = OSTREE_FETCHER_STATE_COMPLETE;
(void) g_input_stream_close (pending->request_body, NULL, NULL); (void) g_input_stream_close (pending->request_body, NULL, NULL);
g_simple_async_result_complete (pending->result); if (pending->is_stream)
g_object_unref (pending->result); {
g_task_return_pointer (pending->task,
g_object_ref (pending->request_body),
(GDestroyNotify) g_object_unref);
}
else
{
g_task_return_pointer (pending->task,
g_strdup (pending->out_tmpfile),
(GDestroyNotify) g_free);
}
g_object_unref (pending->task);
return; return;
} }
else if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) else if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
@ -473,9 +480,10 @@ on_request_sent (GObject *object,
default: default:
code = G_IO_ERROR_FAILED; code = G_IO_ERROR_FAILED;
} }
g_set_error (&local_error, G_IO_ERROR, code, local_error = g_error_new (G_IO_ERROR, code,
"Server returned status %u: %s", "Server returned status %u: %s",
msg->status_code, soup_status_get_phrase (msg->status_code)); msg->status_code,
soup_status_get_phrase (msg->status_code));
goto out; goto out;
} }
} }
@ -511,8 +519,10 @@ on_request_sent (GObject *object,
} }
else else
{ {
g_simple_async_result_complete (pending->result); g_task_return_pointer (pending->task,
g_object_unref (pending->result); g_object_ref (pending->request_body),
(GDestroyNotify) g_object_unref);
g_object_unref (pending->task);
} }
out: out:
@ -520,9 +530,8 @@ on_request_sent (GObject *object,
{ {
if (pending->request_body) if (pending->request_body)
(void) g_input_stream_close (pending->request_body, NULL, NULL); (void) g_input_stream_close (pending->request_body, NULL, NULL);
g_simple_async_result_take_error (pending->result, local_error); g_task_return_error (pending->task, local_error);
g_simple_async_result_complete (pending->result); g_object_unref (pending->task);
g_object_unref (pending->result);
} }
} }
@ -549,13 +558,12 @@ ostree_fetcher_request_uri_internal (OstreeFetcher *self,
pending->max_size = max_size; pending->max_size = max_size;
pending->is_stream = is_stream; pending->is_stream = is_stream;
pending->cancellable = cancellable ? g_object_ref (cancellable) : NULL; pending->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
pending->result = g_simple_async_result_new ((GObject*) self, pending->task = g_task_new (self,
callback, cancellable,
user_data, callback, user_data);
source_tag);
g_simple_async_result_set_op_res_gpointer (pending->result, g_task_set_source_tag (pending->task, source_tag);
pending, g_task_set_task_data (pending->task, pending, (GDestroyNotify) pending_uri_free);
(GDestroyNotify) pending_uri_free);
if (is_stream) if (is_stream)
{ {
@ -630,17 +638,11 @@ _ostree_fetcher_request_uri_with_partial_finish (OstreeFetcher *self,
GAsyncResult *result, GAsyncResult *result,
GError **error) GError **error)
{ {
GSimpleAsyncResult *simple; g_return_val_if_fail (g_task_is_valid (result, self), NULL);
OstreeFetcherPendingURI *pending; g_return_val_if_fail (g_async_result_is_tagged (result,
_ostree_fetcher_request_uri_with_partial_async), NULL);
g_return_val_if_fail (g_simple_async_result_is_valid (result, (GObject*)self, _ostree_fetcher_request_uri_with_partial_async), FALSE); return g_task_propagate_pointer (G_TASK (result), error);
simple = G_SIMPLE_ASYNC_RESULT (result);
if (g_simple_async_result_propagate_error (simple, error))
return NULL;
pending = g_simple_async_result_get_op_res_gpointer (simple);
return g_strdup (pending->out_tmpfile);
} }
static void static void
@ -662,17 +664,11 @@ ostree_fetcher_stream_uri_finish (OstreeFetcher *self,
GAsyncResult *result, GAsyncResult *result,
GError **error) GError **error)
{ {
GSimpleAsyncResult *simple; g_return_val_if_fail (g_task_is_valid (result, self), NULL);
OstreeFetcherPendingURI *pending; g_return_val_if_fail (g_async_result_is_tagged (result,
ostree_fetcher_stream_uri_async), NULL);
g_return_val_if_fail (g_simple_async_result_is_valid (result, (GObject*)self, ostree_fetcher_stream_uri_async), FALSE); return g_task_propagate_pointer (G_TASK (result), error);
simple = G_SIMPLE_ASYNC_RESULT (result);
if (g_simple_async_result_propagate_error (simple, error))
return NULL;
pending = g_simple_async_result_get_op_res_gpointer (simple);
return g_object_ref (pending->request_body);
} }
guint64 guint64