diff --git a/src/libostree/ostree-metalink.c b/src/libostree/ostree-metalink.c index 00cfb2c8..ee798fa9 100644 --- a/src/libostree/ostree-metalink.c +++ b/src/libostree/ostree-metalink.c @@ -658,33 +658,21 @@ static const GMarkupParser metalink_parser = { NULL }; -void -_ostree_metalink_request_async (OstreeMetalink *self, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +typedef struct { - GTask *task = g_task_new (self, cancellable, callback, user_data); - OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1); + SoupURI **out_target_uri; + GFile **out_data; + gboolean success; + GError **error; + GMainLoop *loop; +} FetchMetalinkSyncData; - request->metalink = g_object_ref (self); - request->urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free); - request->task = task; /* Unowned */ - - request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL); - - g_task_set_task_data (task, request, ostree_metalink_request_unref); - _ostree_fetcher_stream_uri_async (self->fetcher, self->uri, - self->max_size, cancellable, - on_retrieved_metalink, task); -} - -gboolean -_ostree_metalink_request_finish (OstreeMetalink *self, - GAsyncResult *result, - SoupURI **out_target_uri, - GFile **out_data, - GError **error) +static gboolean +ostree_metalink_request_finish (OstreeMetalink *self, + GAsyncResult *result, + SoupURI **out_target_uri, + GFile **out_data, + GError **error) { OstreeMetalinkRequest *request; @@ -703,6 +691,54 @@ _ostree_metalink_request_finish (OstreeMetalink *self, return FALSE; } +static void +on_metalink_fetched (GObject *src, + GAsyncResult *result, + gpointer user_data) +{ + FetchMetalinkSyncData *data = user_data; + + data->success = ostree_metalink_request_finish ((OstreeMetalink*)src, + result, + data->out_target_uri, + data->out_data, + data->error); + g_main_loop_quit (data->loop); +} + +gboolean +_ostree_metalink_request_sync (OstreeMetalink *self, + GMainLoop *loop, + SoupURI **out_target_uri, + GFile **out_data, + SoupURI **fetching_sync_uri, + GCancellable *cancellable, + GError **error) +{ + OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1); + FetchMetalinkSyncData data = { 0, }; + GTask *task = g_task_new (self, cancellable, on_metalink_fetched, &data); + + data.out_target_uri = out_target_uri; + data.out_data = out_data; + data.loop = loop; + data.error = error; + *fetching_sync_uri = _ostree_metalink_get_uri (self); + + request->metalink = g_object_ref (self); + request->urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free); + request->task = task; /* Unowned */ + + request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL); + + g_task_set_task_data (task, request, ostree_metalink_request_unref); + _ostree_fetcher_stream_uri_async (self->fetcher, self->uri, + self->max_size, cancellable, + on_retrieved_metalink, task); + g_main_loop_run (loop); + return data.success; +} + SoupURI * _ostree_metalink_get_uri (OstreeMetalink *self) { diff --git a/src/libostree/ostree-metalink.h b/src/libostree/ostree-metalink.h index 0c26adeb..6eb59e52 100644 --- a/src/libostree/ostree-metalink.h +++ b/src/libostree/ostree-metalink.h @@ -50,17 +50,13 @@ OstreeMetalink *_ostree_metalink_new (OstreeFetcher *fetcher, SoupURI *_ostree_metalink_get_uri (OstreeMetalink *self); -void _ostree_metalink_request_async (OstreeMetalink *self, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -gboolean _ostree_metalink_request_finish (OstreeMetalink *self, - GAsyncResult *result, - SoupURI **out_target_uri, - GFile **out_data, - GError **error); - +gboolean _ostree_metalink_request_sync (OstreeMetalink *self, + GMainLoop *loop, + SoupURI **out_target_uri, + GFile **out_data, + SoupURI **fetching_sync_uri, + GCancellable *cancellable, + GError **error); G_END_DECLS #endif diff --git a/src/libostree/ostree-repo-pull.c b/src/libostree/ostree-repo-pull.c index 7bd1557e..7a7ed465 100644 --- a/src/libostree/ostree-repo-pull.c +++ b/src/libostree/ostree-repo-pull.c @@ -303,49 +303,6 @@ fetch_uri_contents_utf8_sync (OtPullData *pull_data, return ret; } -typedef struct -{ - OtPullData *pull_data; - SoupURI **out_target_uri; - GFile **out_data; - gboolean success; -} FetchMetalinkSyncData; - -static void -on_metalink_fetched (GObject *src, - GAsyncResult *result, - gpointer user_data) -{ - FetchMetalinkSyncData *data = user_data; - - data->success = _ostree_metalink_request_finish ((OstreeMetalink*)src, result, - data->out_target_uri, data->out_data, - data->pull_data->async_error); - g_main_loop_quit (data->pull_data->loop); -} - -static gboolean -request_metalink_sync (OtPullData *pull_data, - OstreeMetalink *metalink, - SoupURI **out_target_uri, - GFile **out_data, - GCancellable *cancellable, - GError **error) -{ - FetchMetalinkSyncData data = { 0, }; - - data.pull_data = pull_data; - data.out_target_uri = out_target_uri; - data.out_data = out_data; - - pull_data->fetching_sync_uri = _ostree_metalink_get_uri (metalink); - _ostree_metalink_request_async (metalink, cancellable, on_metalink_fetched, &data); - - g_main_loop_run (pull_data->loop); - - return data.success; -} - static void enqueue_one_object_request (OtPullData *pull_data, const char *checksum, @@ -1387,8 +1344,13 @@ ostree_repo_pull_with_options (OstreeRepo *self, OSTREE_MAX_METADATA_SIZE, metalink_uri); soup_uri_free (metalink_uri); - if (!request_metalink_sync (pull_data, metalink, &target_uri, &metalink_data, - cancellable, error)) + if (! _ostree_metalink_request_sync (metalink, + pull_data->loop, + &target_uri, + &metalink_data, + &pull_data->fetching_sync_uri, + cancellable, + error)) goto out; {