[tracker] tracker-extract: Port TrackerExtract to GTask
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] tracker-extract: Port TrackerExtract to GTask
- Date: Wed, 25 Nov 2015 22:31:06 +0000 (UTC)
commit f80deca95b8f1e2a721cc06437f43e710c1bf3ed
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Nov 25 22:56:13 2015 +0100
tracker-extract: Port TrackerExtract to GTask
src/tracker-extract/tracker-extract-decorator.c | 11 ++---
src/tracker-extract/tracker-extract.c | 62 ++++++++++------------
src/tracker-extract/tracker-extract.h | 4 ++
3 files changed, 36 insertions(+), 41 deletions(-)
---
diff --git a/src/tracker-extract/tracker-extract-decorator.c b/src/tracker-extract/tracker-extract-decorator.c
index a3c8a31..82d6abe 100644
--- a/src/tracker-extract/tracker-extract-decorator.c
+++ b/src/tracker-extract/tracker-extract-decorator.c
@@ -209,21 +209,18 @@ get_metadata_cb (TrackerExtract *extract,
{
TrackerExtractDecoratorPrivate *priv;
TrackerExtractInfo *info;
+ GError *error = NULL;
GTask *task;
priv = TRACKER_EXTRACT_DECORATOR (data->decorator)->priv;
task = tracker_decorator_info_get_task (data->decorator_info);
- info = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result));
+ info = tracker_extract_file_finish (extract, result, &error);
tracker_extract_persistence_remove_file (priv->persistence, data->file);
g_hash_table_remove (priv->recovery_files, tracker_decorator_info_get_url (data->decorator_info));
- if (!info) {
- GError *error = NULL;
-
- g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), &error);
-
- if (!error || error->domain == TRACKER_EXTRACT_ERROR) {
+ if (error) {
+ if (error->domain == TRACKER_EXTRACT_ERROR) {
g_message ("Extraction failed: %s\n", error ? error->message : "no error given");
g_task_return_boolean (task, FALSE);
g_clear_error (&error);
diff --git a/src/tracker-extract/tracker-extract.c b/src/tracker-extract/tracker-extract.c
index a771c95..c15737c 100644
--- a/src/tracker-extract/tracker-extract.c
+++ b/src/tracker-extract/tracker-extract.c
@@ -519,25 +519,15 @@ get_metadata (TrackerExtractTask *task)
task->file);
#endif /* THREAD_ENABLE_TRACE */
- if (task->cancellable &&
- g_cancellable_is_cancelled (task->cancellable)) {
- g_simple_async_result_set_error ((GSimpleAsyncResult *) task->res,
- G_IO_ERROR, G_IO_ERROR_CANCELLED,
- "Extraction of '%s' was cancelled",
- task->file);
-
- g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res);
+ if (g_task_return_error_if_cancelled (G_TASK (task->res))) {
extract_task_free (task);
return FALSE;
}
if (!filter_module (task->extract, task->cur_module) &&
get_file_metadata (task, &info)) {
- g_simple_async_result_set_op_res_gpointer ((GSimpleAsyncResult *) task->res,
- info,
- (GDestroyNotify) tracker_extract_info_unref);
-
- g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res);
+ g_task_return_pointer (G_TASK (task->res), info,
+ (GDestroyNotify) tracker_extract_info_unref);
extract_task_free (task);
} else {
/* Reinject the task into the main thread
@@ -617,10 +607,8 @@ dispatch_task_cb (TrackerExtractTask *task)
}
if (error) {
- g_simple_async_result_set_from_error ((GSimpleAsyncResult *) task->res, error);
- g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res);
+ g_task_return_error (G_TASK (task->res), error);
extract_task_free (task);
- g_error_free (error);
return FALSE;
}
@@ -637,12 +625,11 @@ dispatch_task_cb (TrackerExtractTask *task)
switch (thread_awareness) {
case TRACKER_MODULE_NONE:
/* Error out */
- g_simple_async_result_set_error ((GSimpleAsyncResult *) task->res,
- tracker_extract_error_quark (),
- TRACKER_EXTRACT_ERROR_NO_EXTRACTOR,
- "Module '%s' initialization failed",
- g_module_name (module));
- g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res);
+ g_task_return_new_error (G_TASK (task->res),
+ tracker_extract_error_quark (),
+ TRACKER_EXTRACT_ERROR_NO_EXTRACTOR,
+ "Module '%s' initialization failed",
+ g_module_name (module));
extract_task_free (task);
break;
case TRACKER_MODULE_MAIN_THREAD:
@@ -670,8 +657,7 @@ dispatch_task_cb (TrackerExtractTask *task)
g_async_queue_ref (async_queue),
&error);
if (!thread) {
- g_simple_async_result_take_error ((GSimpleAsyncResult *) task->res, error);
- g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res);
+ g_task_return_error (G_TASK (task->res), error);
extract_task_free (task);
return FALSE;
}
@@ -694,10 +680,8 @@ dispatch_task_cb (TrackerExtractTask *task)
g_thread_pool_push (priv->thread_pool, task, &error);
if (error) {
- g_simple_async_result_set_from_error ((GSimpleAsyncResult *) task->res, error);
- g_simple_async_result_complete_in_idle ((GSimpleAsyncResult *) task->res);
+ g_task_return_error (G_TASK (task->res), error);
extract_task_free (task);
- g_error_free (error);
return FALSE;
}
@@ -718,9 +702,9 @@ tracker_extract_file (TrackerExtract *extract,
GAsyncReadyCallback cb,
gpointer user_data)
{
- GSimpleAsyncResult *res;
GError *error = NULL;
TrackerExtractTask *task;
+ GTask *async_task;
g_return_if_fail (TRACKER_IS_EXTRACT (extract));
g_return_if_fail (file != NULL);
@@ -732,16 +716,14 @@ tracker_extract_file (TrackerExtract *extract,
file);
#endif /* THREAD_ENABLE_TRACE */
- res = g_simple_async_result_new (G_OBJECT (extract), cb, user_data, NULL);
+ async_task = g_task_new (extract, cancellable, cb, user_data);
task = extract_task_new (extract, file, mimetype, graph,
- cancellable, G_ASYNC_RESULT (res), &error);
+ cancellable, G_ASYNC_RESULT (async_task), &error);
if (error) {
g_warning ("Could not get mimetype, %s", error->message);
- g_simple_async_result_set_from_error (res, error);
- g_simple_async_result_complete_in_idle (res);
- g_error_free (error);
+ g_task_return_error (async_task, error);
} else {
TrackerExtractPrivate *priv;
@@ -755,7 +737,7 @@ tracker_extract_file (TrackerExtract *extract,
}
/* Task takes a ref and if this fails, we want to unref anyway */
- g_object_unref (res);
+ g_object_unref (async_task);
}
#ifdef HAVE_LIBMEDIAART
@@ -864,3 +846,15 @@ tracker_extract_get_metadata_by_cmdline (TrackerExtract *object,
extract_task_free (task);
}
+
+TrackerExtractInfo *
+tracker_extract_file_finish (TrackerExtract *extract,
+ GAsyncResult *res,
+ GError **error)
+{
+ g_return_val_if_fail (TRACKER_IS_EXTRACT (extract), NULL);
+ g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+ g_return_val_if_fail (!error || !*error, NULL);
+
+ return g_task_propagate_pointer (G_TASK (res), error);
+}
diff --git a/src/tracker-extract/tracker-extract.h b/src/tracker-extract/tracker-extract.h
index bcb8cd2..a527e82 100644
--- a/src/tracker-extract/tracker-extract.h
+++ b/src/tracker-extract/tracker-extract.h
@@ -66,6 +66,10 @@ void tracker_extract_file (TrackerExtract
GCancellable *cancellable,
GAsyncReadyCallback cb,
gpointer user_data);
+TrackerExtractInfo *
+ tracker_extract_file_finish (TrackerExtract *extract,
+ GAsyncResult *res,
+ GError **error);
#ifdef HAVE_LIBMEDIAART
MediaArtProcess *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]