[tracker] tracker-miner-fs: Added reindex by mime code to get files to update
- From: Martyn James Russell <mr src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] tracker-miner-fs: Added reindex by mime code to get files to update
- Date: Thu, 21 Jan 2010 14:49:53 +0000 (UTC)
commit ebc25a4d3217850630468351231c2af537259c80
Author: Martyn Russell <martyn lanedo com>
Date: Thu Jan 21 14:48:50 2010 +0000
tracker-miner-fs: Added reindex by mime code to get files to update
src/tracker-miner-fs/tracker-miner-files-reindex.c | 105 +++++++++++++++++---
1 files changed, 93 insertions(+), 12 deletions(-)
---
diff --git a/src/tracker-miner-fs/tracker-miner-files-reindex.c b/src/tracker-miner-fs/tracker-miner-files-reindex.c
index 0cf4fcc..d92eb20 100644
--- a/src/tracker-miner-fs/tracker-miner-files-reindex.c
+++ b/src/tracker-miner-fs/tracker-miner-files-reindex.c
@@ -21,15 +21,17 @@
#include <libtracker-common/tracker-dbus.h>
+#include <libtracker-client/tracker.h>
+
#include "tracker-miner-files-reindex.h"
#include "tracker-dbus.h"
#include "tracker-marshal.h"
-#define TRACKER_MINER_FILES_REINDEX_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_MINER_FILES_REINDEX, TrackerMinerFilesReindexPrivate))
-
typedef struct {
- GHashTable *mime_types;
-} TrackerMinerFilesReindexPrivate;
+ guint request_id;
+ DBusGMethodInvocation *context;
+ TrackerClient *client;
+} MimeTypesData;
G_DEFINE_TYPE(TrackerMinerFilesReindex, tracker_miner_files_reindex, G_TYPE_OBJECT)
@@ -39,8 +41,6 @@ tracker_miner_files_reindex_class_init (TrackerMinerFilesReindexClass *klass)
GObjectClass *object_class;
object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (TrackerMinerFilesReindexPrivate));
}
static void
@@ -48,6 +48,51 @@ tracker_miner_files_reindex_init (TrackerMinerFilesReindex *object)
{
}
+static MimeTypesData *
+mime_types_data_new (guint request_id,
+ DBusGMethodInvocation *context,
+ TrackerClient *client)
+{
+ MimeTypesData *mtd;
+
+ mtd = g_slice_new0 (MimeTypesData);
+
+ mtd->request_id = request_id;
+ mtd->context = context;
+ mtd->client = g_object_ref (client);
+
+ return mtd;
+}
+
+static void
+mime_types_data_destroy (gpointer data)
+{
+ MimeTypesData *mtd;
+
+ mtd = data;
+
+ g_object_unref (mtd->client);
+
+ g_slice_free (MimeTypesData, mtd);
+}
+
+static void
+mime_types_cb (GPtrArray *result,
+ GError *error,
+ gpointer user_data)
+{
+ MimeTypesData *mtd = user_data;
+
+ tracker_dbus_request_comment (mtd->request_id, mtd->context,
+ "Found %d files that will need reindexing",
+ result ? result->len : 0);
+
+ tracker_dbus_request_success (mtd->request_id, mtd->context);
+ dbus_g_method_return (mtd->context);
+
+ mime_types_data_destroy (user_data);
+}
+
TrackerMinerFilesReindex *
tracker_miner_files_reindex_new (void)
{
@@ -60,23 +105,59 @@ tracker_miner_files_reindex_mime_types (TrackerMinerFilesReindex *object,
DBusGMethodInvocation *context,
GError **error)
{
+ GString *query;
+ TrackerClient *client;
guint request_id;
- gchar **p;
+ gint len, i;
request_id = tracker_dbus_get_next_request_id ();
tracker_dbus_async_return_if_fail (mime_types != NULL, context);
- tracker_dbus_async_return_if_fail (g_strv_length (mime_types) > 0, context);
+
+ len = g_strv_length (mime_types);
+ tracker_dbus_async_return_if_fail (len > 0, context);
tracker_dbus_request_new (request_id, context, "%s()", __FUNCTION__);
+ client = tracker_client_new (FALSE, G_MAXINT);
+ if (!client) {
+ GError *actual_error = NULL;
+
+ tracker_dbus_request_failed (request_id,
+ context,
+ &actual_error,
+ "Could not create TrackerClient");
+ dbus_g_method_return_error (context, actual_error);
+ g_error_free (actual_error);
+ return;
+ }
+
tracker_dbus_request_comment (request_id, context,
"Attempting to reindex the following mime types:");
- for (p = mime_types; *p; p++) {
- tracker_dbus_request_comment (request_id, context, " %s", *p);
+
+ query = g_string_new ("SELECT ?url "
+ "WHERE {"
+ " ?resource nie:url ?url ;"
+ " nie:mimeType ?mime ."
+ " FILTER(");
+
+ for (i = 0; i < len; i++) {
+ tracker_dbus_request_comment (request_id, context, " %s", mime_types[i]);
+ g_string_append_printf (query, "?mime = '%s'", mime_types[i]);
+
+ if (i < len - 1) {
+ g_string_append (query, " || ");
+ }
}
- tracker_dbus_request_success (request_id, context);
- dbus_g_method_return (context);
+ g_string_append (query, ") }");
+
+ /* FIXME: save last call id */
+ tracker_resources_sparql_query_async (client,
+ query->str,
+ mime_types_cb,
+ mime_types_data_new (request_id, context, client));
+ g_string_free (query, TRUE);
+ g_object_unref (client);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]