[tracker] tracker-miner-fs: Added reindex by mime code to get files to update



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]