ostree-metalink: use _ostree_fetcher_contents_membuf_sync
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
d48aca5645
commit
5546c4d2fc
|
|
@ -578,67 +578,6 @@ start_target_request_phase (OstreeMetalinkRequest *self,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
on_metalink_bytes_read (GObject *src,
|
|
||||||
GAsyncResult *result,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GError *local_error = NULL;
|
|
||||||
GTask *task = user_data;
|
|
||||||
OstreeMetalinkRequest *self = g_task_get_task_data (task);
|
|
||||||
gs_unref_bytes GBytes *bytes = NULL;
|
|
||||||
gsize len;
|
|
||||||
const guint8 *data;
|
|
||||||
|
|
||||||
bytes = g_input_stream_read_bytes_finish ((GInputStream*)src,
|
|
||||||
result, &local_error);
|
|
||||||
if (!bytes)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
data = g_bytes_get_data (bytes, &len);
|
|
||||||
|
|
||||||
if (len == 0)
|
|
||||||
{
|
|
||||||
if (!start_target_request_phase (self, &local_error))
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!g_markup_parse_context_parse (self->parser, (const char*)data, len, &local_error))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
g_input_stream_read_bytes_async ((GInputStream*)src, 8192, G_PRIORITY_DEFAULT,
|
|
||||||
g_task_get_cancellable (task),
|
|
||||||
on_metalink_bytes_read, task);
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
if (local_error)
|
|
||||||
g_task_return_error (task, local_error);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_retrieved_metalink (GObject *src,
|
|
||||||
GAsyncResult *result,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GError *local_error = NULL;
|
|
||||||
GTask *task = user_data;
|
|
||||||
gs_unref_object GInputStream *metalink_stream = NULL;
|
|
||||||
|
|
||||||
metalink_stream = _ostree_fetcher_stream_uri_finish ((OstreeFetcher*)src, result, &local_error);
|
|
||||||
if (!metalink_stream)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
g_input_stream_read_bytes_async (metalink_stream, 8192, G_PRIORITY_DEFAULT,
|
|
||||||
g_task_get_cancellable (task),
|
|
||||||
on_metalink_bytes_read, task);
|
|
||||||
|
|
||||||
out:
|
|
||||||
if (local_error)
|
|
||||||
g_task_return_error (task, local_error);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ostree_metalink_request_unref (gpointer data)
|
ostree_metalink_request_unref (gpointer data)
|
||||||
{
|
{
|
||||||
|
|
@ -706,6 +645,24 @@ on_metalink_fetched (GObject *src,
|
||||||
g_main_loop_quit (data->loop);
|
g_main_loop_quit (data->loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
on_metalink_bytes_read (OstreeMetalinkRequest *self,
|
||||||
|
OstreeMetalinkRequest *request,
|
||||||
|
FetchMetalinkSyncData *sync_data,
|
||||||
|
GBytes *bytes,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
gsize len;
|
||||||
|
const guint8 *data = g_bytes_get_data (bytes, &len);
|
||||||
|
if (!g_markup_parse_context_parse (self->parser, (const char*)data, len, error))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!start_target_request_phase (self, error))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_ostree_metalink_request_sync (OstreeMetalink *self,
|
_ostree_metalink_request_sync (OstreeMetalink *self,
|
||||||
GMainLoop *loop,
|
GMainLoop *loop,
|
||||||
|
|
@ -718,6 +675,7 @@ _ostree_metalink_request_sync (OstreeMetalink *self,
|
||||||
OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1);
|
OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1);
|
||||||
FetchMetalinkSyncData data = { 0, };
|
FetchMetalinkSyncData data = { 0, };
|
||||||
GTask *task = g_task_new (self, cancellable, on_metalink_fetched, &data);
|
GTask *task = g_task_new (self, cancellable, on_metalink_fetched, &data);
|
||||||
|
GBytes *out_contents = NULL;
|
||||||
|
|
||||||
data.out_target_uri = out_target_uri;
|
data.out_target_uri = out_target_uri;
|
||||||
data.out_data = out_data;
|
data.out_data = out_data;
|
||||||
|
|
@ -732,10 +690,25 @@ _ostree_metalink_request_sync (OstreeMetalink *self,
|
||||||
request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL);
|
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);
|
g_task_set_task_data (task, request, ostree_metalink_request_unref);
|
||||||
_ostree_fetcher_stream_uri_async (self->fetcher, self->uri,
|
|
||||||
self->max_size, cancellable,
|
if (! _ostree_fetcher_contents_membuf_sync (self->fetcher,
|
||||||
on_retrieved_metalink, task);
|
self->uri,
|
||||||
g_main_loop_run (loop);
|
FALSE,
|
||||||
|
FALSE,
|
||||||
|
&out_contents,
|
||||||
|
loop,
|
||||||
|
NULL,
|
||||||
|
self->max_size,
|
||||||
|
cancellable,
|
||||||
|
error))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (! on_metalink_bytes_read (request, request, &data, out_contents, error))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
g_main_loop_run (data.loop);
|
||||||
|
|
||||||
|
out:
|
||||||
return data.success;
|
return data.success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue