[tracker/dbus-fd-experiment: 5/49] Port libtracker-miner and FS miner to steroids
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/dbus-fd-experiment: 5/49] Port libtracker-miner and FS miner to steroids
- Date: Tue, 22 Jun 2010 11:19:47 +0000 (UTC)
commit ffafc673aaf35088fcff94cd84a11c8d9dfea156
Author: Adrien Bustany <abustany gnome org>
Date: Thu Jun 3 20:58:45 2010 -0400
Port libtracker-miner and FS miner to steroids
src/libtracker-miner/tracker-miner-fs.c | 52 ++++++++++++--------------
src/libtracker-miner/tracker-miner-object.c | 34 +++++++++---------
src/libtracker-miner/tracker-miner-object.h | 3 +-
src/miners/fs/tracker-miner-files-reindex.c | 32 ++++++++---------
src/miners/fs/tracker-miner-files.c | 48 ++++++++++++-------------
5 files changed, 81 insertions(+), 88 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index a57454c..ea326fb 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -1061,12 +1061,12 @@ sparql_query_cb (GObject *object,
gpointer user_data)
{
SparqlQueryData *data = user_data;
- const GPtrArray *query_results;
+ TrackerResultIterator *iterator;
TrackerMiner *miner;
GError *error = NULL;
miner = TRACKER_MINER (object);
- query_results = tracker_miner_execute_sparql_finish (miner, result, &error);
+ iterator = tracker_miner_execute_sparql_finish (miner, result, &error);
g_main_loop_quit (data->main_loop);
@@ -1076,19 +1076,18 @@ sparql_query_cb (GObject *object,
return;
}
- if (!query_results ||
- query_results->len == 0)
+ if (!iterator ||
+ !tracker_result_iterator_has_next (iterator))
return;
- if (query_results->len == 1) {
- gchar **val;
+ tracker_result_iterator_next (iterator);
- val = g_ptr_array_index (query_results, 0);
- data->iri = g_strdup (val[0]);
+ if (!tracker_result_iterator_has_next (iterator)) {
+ data->iri = g_strdup (tracker_result_iterator_value (iterator, 0));
if (data->get_mime)
- data->mime = g_strdup (val[1]);
+ data->mime = g_strdup (tracker_result_iterator_value (iterator, 1));
} else {
- g_critical ("More than one URNs (%d) have been found for uri \"%s\"", query_results->len, data->uri);
+ g_critical ("More than one URNs have been found for uri \"%s\"", data->uri);
}
}
@@ -1149,15 +1148,14 @@ cache_query_cb (GObject *object,
GAsyncResult *result,
gpointer user_data)
{
- const GPtrArray *query_results;
+ TrackerResultIterator *iterator;
TrackerMiner *miner;
CacheQueryData *data;
GError *error = NULL;
- guint i;
data = user_data;
miner = TRACKER_MINER (object);
- query_results = tracker_miner_execute_sparql_finish (miner, result, &error);
+ iterator = tracker_miner_execute_sparql_finish (miner, result, &error);
g_main_loop_quit (data->main_loop);
@@ -1167,14 +1165,15 @@ cache_query_cb (GObject *object,
return;
}
- for (i = 0; i < query_results->len; i++) {
+ while (tracker_result_iterator_has_next (iterator)) {
GFile *file;
- GStrv strv;
- strv = g_ptr_array_index (query_results, i);
- file = g_file_new_for_uri (strv[0]);
+ tracker_result_iterator_next (iterator);
+ file = g_file_new_for_uri (tracker_result_iterator_value (iterator, 0));
- g_hash_table_insert (data->values, file, g_strdup (strv[1]));
+ g_hash_table_insert (data->values,
+ file,
+ g_strdup (tracker_result_iterator_value (iterator, 1)));
}
}
@@ -1643,23 +1642,20 @@ item_update_children_uri_cb (GObject *object,
RecursiveMoveData *data = user_data;
GError *error = NULL;
- const GPtrArray *query_results = tracker_miner_execute_sparql_finish (TRACKER_MINER (object), result, &error);
+ TrackerResultIterator *iterator = tracker_miner_execute_sparql_finish (TRACKER_MINER (object), result, &error);
if (error) {
g_critical ("Could not query children: %s", error->message);
g_error_free (error);
- } else if (query_results) {
- gint i;
-
- for (i = 0; i < query_results->len; i++) {
+ } else if (iterator) {
+ while (tracker_result_iterator_has_next (iterator)) {
const gchar *child_source_uri, *child_mime, *child_urn;
gchar *child_uri;
- GStrv row;
- row = g_ptr_array_index (query_results, i);
- child_urn = row[0];
- child_source_uri = row[1];
- child_mime = row[2];
+ tracker_result_iterator_next (iterator);
+ child_urn = tracker_result_iterator_value (iterator, 0);
+ child_source_uri = tracker_result_iterator_value (iterator, 1);
+ child_mime = tracker_result_iterator_value (iterator, 2);
if (!g_str_has_prefix (child_source_uri, data->source_uri)) {
g_warning ("Child URI '%s' does not start with parent URI '%s'",
diff --git a/src/libtracker-miner/tracker-miner-object.c b/src/libtracker-miner/tracker-miner-object.c
index 466e54c..66e8571 100644
--- a/src/libtracker-miner/tracker-miner-object.c
+++ b/src/libtracker-miner/tracker-miner-object.c
@@ -578,9 +578,9 @@ async_call_data_update_callback (AsyncCallData *data,
}
static void
-async_call_data_query_callback (AsyncCallData *data,
- const GPtrArray *query_results,
- GError *error)
+async_call_data_query_callback (AsyncCallData *data,
+ TrackerResultIterator *iterator,
+ GError *error)
{
GAsyncReadyCallback callback;
GSimpleAsyncResult *result;
@@ -599,7 +599,7 @@ async_call_data_query_callback (AsyncCallData *data,
data->source_function);
}
- g_simple_async_result_set_op_res_gpointer (result, (gpointer) query_results, NULL);
+ g_simple_async_result_set_op_res_gpointer (result, (gpointer) iterator, NULL);
g_simple_async_result_complete (result);
g_object_unref (result);
}
@@ -649,19 +649,19 @@ sparql_update_cb (GError *error,
}
static void
-sparql_query_cb (GPtrArray *result,
+sparql_query_cb (TrackerResultIterator *iterator,
GError *error,
gpointer user_data)
{
AsyncCallData *data = user_data;
- async_call_data_query_callback (data, result, error);
+ async_call_data_query_callback (data, iterator, error);
if (error) {
g_error_free (error);
} else {
- if (result) {
- tracker_dbus_results_ptr_array_free (&result);
+ if (iterator) {
+ tracker_result_iterator_free (iterator);
}
}
@@ -792,10 +792,10 @@ tracker_miner_execute_update (TrackerMiner *miner,
user_data,
tracker_miner_execute_sparql);
- data->id = tracker_resources_sparql_update_async (miner->private->client,
- sparql,
- sparql_update_cb,
- data);
+ data->id = tracker_resources_sparql_update_fast_async (miner->private->client,
+ sparql,
+ sparql_update_cb,
+ data);
}
/**
@@ -853,9 +853,9 @@ tracker_miner_execute_sparql (TrackerMiner *miner,
data = async_call_data_new (miner, cancellable, callback, user_data, tracker_miner_execute_sparql);
- data->id = tracker_resources_sparql_query_async (miner->private->client,
- sparql, sparql_query_cb,
- data);
+ data->id = tracker_resources_sparql_query_iterate_async (miner->private->client,
+ sparql, sparql_query_cb,
+ data);
}
/**
@@ -869,7 +869,7 @@ tracker_miner_execute_sparql (TrackerMiner *miner,
*
* Returns: a #GPtrArray with the sparql results which should not be freed.
**/
-const GPtrArray *
+TrackerResultIterator*
tracker_miner_execute_sparql_finish (TrackerMiner *miner,
GAsyncResult *result,
GError **error)
@@ -880,7 +880,7 @@ tracker_miner_execute_sparql_finish (TrackerMiner *miner,
return NULL;
}
- return (const GPtrArray*) g_simple_async_result_get_op_res_gpointer (r);
+ return (TrackerResultIterator*) g_simple_async_result_get_op_res_gpointer (r);
}
/**
diff --git a/src/libtracker-miner/tracker-miner-object.h b/src/libtracker-miner/tracker-miner-object.h
index 8df514b..16044cc 100644
--- a/src/libtracker-miner/tracker-miner-object.h
+++ b/src/libtracker-miner/tracker-miner-object.h
@@ -114,7 +114,8 @@ void tracker_miner_execute_sparql (TrackerMiner
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
-const GPtrArray* tracker_miner_execute_sparql_finish (TrackerMiner *miner,
+TrackerResultIterator*
+ tracker_miner_execute_sparql_finish (TrackerMiner *miner,
GAsyncResult *result,
GError **error);
void tracker_miner_execute_batch_update (TrackerMiner *miner,
diff --git a/src/miners/fs/tracker-miner-files-reindex.c b/src/miners/fs/tracker-miner-files-reindex.c
index 0b418f8..70e4346 100644
--- a/src/miners/fs/tracker-miner-files-reindex.c
+++ b/src/miners/fs/tracker-miner-files-reindex.c
@@ -164,23 +164,21 @@ mime_types_data_destroy (gpointer data)
}
static void
-mime_types_cb (GPtrArray *result,
- GError *error,
- gpointer user_data)
+mime_types_cb (TrackerResultIterator *iterator,
+ GError *error,
+ gpointer user_data)
{
MimeTypesData *mtd = user_data;
- guint i;
if (!error) {
tracker_dbus_request_comment (mtd->request_id, mtd->context,
- "Found %d files that will need reindexing",
- result ? result->len : 0);
+ "Found files that will need reindexing");
- for (i = 0; i < result->len; i++) {
- GStrv *row = g_ptr_array_index (result, i);
+ while (tracker_result_iterator_has_next (iterator)) {
+ tracker_result_iterator_next (iterator);
- if (row && row[0]) {
- const gchar *url = (const gchar *) row[0];
+ if (tracker_result_iterator_value (iterator, 0)) {
+ const gchar *url = (const gchar *) tracker_result_iterator_value (iterator, 0);
GFile *file = g_file_new_for_uri (url);
tracker_miner_fs_file_add (TRACKER_MINER_FS (mtd->miner_files), file);
g_object_unref (file);
@@ -265,13 +263,13 @@ tracker_miner_files_reindex_mime_types (TrackerMinerFilesReindex *object,
priv = TRACKER_MINER_FILES_REINDEX_GET_PRIVATE (object);
/* FIXME: save last call id */
- tracker_resources_sparql_query_async (client,
- query->str,
- mime_types_cb,
- mime_types_data_new (request_id,
- context,
- client,
- priv->files_miner));
+ tracker_resources_sparql_query_iterate_async (client,
+ query->str,
+ mime_types_cb,
+ mime_types_data_new (request_id,
+ context,
+ client,
+ priv->files_miner));
g_string_free (query, TRUE);
g_object_unref (client);
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index c19c18a..eb36f51 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -741,14 +741,13 @@ query_mount_points_cb (GObject *source,
GHashTableIter iter;
gpointer key, value;
GString *accumulator;
- gint i;
GError *error = NULL;
- const GPtrArray *query_results;
+ TrackerResultIterator *iterator;
GSList *uuids, *u;
- query_results = tracker_miner_execute_sparql_finish (miner,
- result,
- &error);
+ iterator = tracker_miner_execute_sparql_finish (miner,
+ result,
+ &error);
if (error) {
g_critical ("Could not obtain the mounted volumes: %s", error->message);
g_error_free (error);
@@ -761,29 +760,28 @@ query_mount_points_cb (GObject *source,
(GDestroyNotify) g_free,
NULL);
+
/* Make sure the root partition is always set to mounted, as GIO won't
* report it as a proper mount */
- g_hash_table_insert (volumes,
- g_strdup (TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN),
- GINT_TO_POINTER (VOLUME_MOUNTED));
+ g_hash_table_insert (volumes,
+ g_strdup (TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN),
+ GINT_TO_POINTER (VOLUME_MOUNTED));
+
+ while (tracker_result_iterator_has_next (iterator)) {
+ gint state;
+ const gchar *urn;
- /* Get mounted status from store */
- for (i = 0; i < query_results->len; i++) {
- gchar **row;
+ state = VOLUME_MOUNTED_IN_STORE;
- row = g_ptr_array_index (query_results, i);
+ tracker_result_iterator_next (iterator);
+ urn = tracker_result_iterator_value (iterator, 0);
- if (strcmp (row[0], TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN) == 0) {
- /* Update root partition to set also mounted in store */
- g_hash_table_replace (volumes,
- g_strdup (TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN),
- GINT_TO_POINTER (VOLUME_MOUNTED | VOLUME_MOUNTED_IN_STORE));
- } else {
- /* Set status of known volumes in store */
- g_hash_table_insert (volumes,
- g_strdup (row[0]),
- GINT_TO_POINTER (VOLUME_MOUNTED_IN_STORE));
+ if (strcmp (urn, TRACKER_NON_REMOVABLE_MEDIA_DATASOURCE_URN) == 0) {
+ /* Report non-removable media to be mounted by HAL as well */
+ state |= VOLUME_MOUNTED;
}
+
+ g_hash_table_replace (volumes, g_strdup (urn), GINT_TO_POINTER (state));
}
/* Then, get all currently mounted non-REMOVABLE volumes, according to GIO */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]