summaryrefslogtreecommitdiff
path: root/src/nautilus-search-engine-tracker.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-search-engine-tracker.c')
-rw-r--r--src/nautilus-search-engine-tracker.c698
1 files changed, 370 insertions, 328 deletions
diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c
index 680acf250..3bba5558e 100644
--- a/src/nautilus-search-engine-tracker.c
+++ b/src/nautilus-search-engine-tracker.c
@@ -32,120 +32,134 @@
#include <gio/gio.h>
#include <libtracker-sparql/tracker-sparql.h>
-struct NautilusSearchEngineTrackerDetails {
- TrackerSparqlConnection *connection;
- NautilusQuery *query;
+struct NautilusSearchEngineTrackerDetails
+{
+ TrackerSparqlConnection *connection;
+ NautilusQuery *query;
- gboolean query_pending;
- GQueue *hits_pending;
+ gboolean query_pending;
+ GQueue *hits_pending;
- gboolean recursive;
+ gboolean recursive;
- GCancellable *cancellable;
+ GCancellable *cancellable;
};
-enum {
- PROP_0,
- PROP_RUNNING,
- LAST_PROP
+enum
+{
+ PROP_0,
+ PROP_RUNNING,
+ LAST_PROP
};
static void nautilus_search_provider_init (NautilusSearchProviderInterface *iface);
G_DEFINE_TYPE_WITH_CODE (NautilusSearchEngineTracker,
- nautilus_search_engine_tracker,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_SEARCH_PROVIDER,
- nautilus_search_provider_init))
+ nautilus_search_engine_tracker,
+ G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_SEARCH_PROVIDER,
+ nautilus_search_provider_init))
static void
finalize (GObject *object)
{
- NautilusSearchEngineTracker *tracker;
+ NautilusSearchEngineTracker *tracker;
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (object);
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (object);
- if (tracker->details->cancellable) {
- g_cancellable_cancel (tracker->details->cancellable);
- g_clear_object (&tracker->details->cancellable);
- }
+ if (tracker->details->cancellable)
+ {
+ g_cancellable_cancel (tracker->details->cancellable);
+ g_clear_object (&tracker->details->cancellable);
+ }
- g_clear_object (&tracker->details->query);
- g_clear_object (&tracker->details->connection);
- g_queue_free_full (tracker->details->hits_pending, g_object_unref);
+ g_clear_object (&tracker->details->query);
+ g_clear_object (&tracker->details->connection);
+ g_queue_free_full (tracker->details->hits_pending, g_object_unref);
- G_OBJECT_CLASS (nautilus_search_engine_tracker_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nautilus_search_engine_tracker_parent_class)->finalize (object);
}
#define BATCH_SIZE 100
static void
check_pending_hits (NautilusSearchEngineTracker *tracker,
- gboolean force_send)
+ gboolean force_send)
{
- GList *hits = NULL;
- NautilusSearchHit *hit;
+ GList *hits = NULL;
+ NautilusSearchHit *hit;
- DEBUG ("Tracker engine add hits");
+ DEBUG ("Tracker engine add hits");
- if (!force_send &&
- g_queue_get_length (tracker->details->hits_pending) < BATCH_SIZE) {
- return;
- }
+ if (!force_send &&
+ g_queue_get_length (tracker->details->hits_pending) < BATCH_SIZE)
+ {
+ return;
+ }
- while ((hit = g_queue_pop_head (tracker->details->hits_pending))) {
- hits = g_list_prepend (hits, hit);
- }
+ while ((hit = g_queue_pop_head (tracker->details->hits_pending)))
+ {
+ hits = g_list_prepend (hits, hit);
+ }
- nautilus_search_provider_hits_added (NAUTILUS_SEARCH_PROVIDER (tracker), hits);
- g_list_free_full (hits, g_object_unref);
+ nautilus_search_provider_hits_added (NAUTILUS_SEARCH_PROVIDER (tracker), hits);
+ g_list_free_full (hits, g_object_unref);
}
static void
search_finished (NautilusSearchEngineTracker *tracker,
- GError *error)
+ GError *error)
{
- DEBUG ("Tracker engine finished");
-
- if (error == NULL) {
- check_pending_hits (tracker, TRUE);
- } else {
- g_queue_foreach (tracker->details->hits_pending, (GFunc) g_object_unref, NULL);
- g_queue_clear (tracker->details->hits_pending);
- }
-
- tracker->details->query_pending = FALSE;
-
- g_object_notify (G_OBJECT (tracker), "running");
-
- if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- DEBUG ("Tracker engine error %s", error->message);
- nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (tracker), error->message);
- } else {
- nautilus_search_provider_finished (NAUTILUS_SEARCH_PROVIDER (tracker),
- NAUTILUS_SEARCH_PROVIDER_STATUS_NORMAL);
- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- DEBUG ("Tracker engine finished and cancelled");
- } else {
- DEBUG ("Tracker engine finished correctly");
- }
- }
-
- g_object_unref (tracker);
+ DEBUG ("Tracker engine finished");
+
+ if (error == NULL)
+ {
+ check_pending_hits (tracker, TRUE);
+ }
+ else
+ {
+ g_queue_foreach (tracker->details->hits_pending, (GFunc) g_object_unref, NULL);
+ g_queue_clear (tracker->details->hits_pending);
+ }
+
+ tracker->details->query_pending = FALSE;
+
+ g_object_notify (G_OBJECT (tracker), "running");
+
+ if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ DEBUG ("Tracker engine error %s", error->message);
+ nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (tracker), error->message);
+ }
+ else
+ {
+ nautilus_search_provider_finished (NAUTILUS_SEARCH_PROVIDER (tracker),
+ NAUTILUS_SEARCH_PROVIDER_STATUS_NORMAL);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ DEBUG ("Tracker engine finished and cancelled");
+ }
+ else
+ {
+ DEBUG ("Tracker engine finished correctly");
+ }
+ }
+
+ g_object_unref (tracker);
}
static void cursor_callback (GObject *object,
- GAsyncResult *result,
- gpointer user_data);
+ GAsyncResult *result,
+ gpointer user_data);
static void
cursor_next (NautilusSearchEngineTracker *tracker,
- TrackerSparqlCursor *cursor)
+ TrackerSparqlCursor *cursor)
{
- tracker_sparql_cursor_next_async (cursor,
- tracker->details->cancellable,
- cursor_callback,
- tracker);
+ tracker_sparql_cursor_next_async (cursor,
+ tracker->details->cancellable,
+ cursor_callback,
+ tracker);
}
static void
@@ -153,66 +167,73 @@ cursor_callback (GObject *object,
GAsyncResult *result,
gpointer user_data)
{
- NautilusSearchEngineTracker *tracker;
- GError *error = NULL;
- TrackerSparqlCursor *cursor;
- NautilusSearchHit *hit;
- const char *uri;
- const char *mtime_str;
- const char *atime_str;
- GTimeVal tv;
- gdouble rank, match;
- gboolean success;
- gchar *basename;
-
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (user_data);
-
- cursor = TRACKER_SPARQL_CURSOR (object);
- success = tracker_sparql_cursor_next_finish (cursor, result, &error);
-
- if (!success) {
- search_finished (tracker, error);
-
- g_clear_error (&error);
- g_clear_object (&cursor);
-
- return;
- }
-
- /* We iterate result by result, not n at a time. */
- uri = tracker_sparql_cursor_get_string (cursor, 0, NULL);
- rank = tracker_sparql_cursor_get_double (cursor, 1);
- mtime_str = tracker_sparql_cursor_get_string (cursor, 2, NULL);
- atime_str = tracker_sparql_cursor_get_string (cursor, 3, NULL);
- basename = g_path_get_basename (uri);
-
- hit = nautilus_search_hit_new (uri);
- match = nautilus_query_matches_string (tracker->details->query, basename);
- nautilus_search_hit_set_fts_rank (hit, rank + match);
- g_free (basename);
-
- if (g_time_val_from_iso8601 (mtime_str, &tv)) {
- GDateTime *date;
- date = g_date_time_new_from_timeval_local (&tv);
- nautilus_search_hit_set_modification_time (hit, date);
- g_date_time_unref (date);
- } else {
- g_warning ("unable to parse mtime: %s", mtime_str);
- }
- if (g_time_val_from_iso8601 (atime_str, &tv)) {
- GDateTime *date;
- date = g_date_time_new_from_timeval_local (&tv);
- nautilus_search_hit_set_access_time (hit, date);
- g_date_time_unref (date);
- } else {
- g_warning ("unable to parse atime: %s", atime_str);
- }
-
- g_queue_push_head (tracker->details->hits_pending, hit);
- check_pending_hits (tracker, FALSE);
-
- /* Get next */
- cursor_next (tracker, cursor);
+ NautilusSearchEngineTracker *tracker;
+ GError *error = NULL;
+ TrackerSparqlCursor *cursor;
+ NautilusSearchHit *hit;
+ const char *uri;
+ const char *mtime_str;
+ const char *atime_str;
+ GTimeVal tv;
+ gdouble rank, match;
+ gboolean success;
+ gchar *basename;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (user_data);
+
+ cursor = TRACKER_SPARQL_CURSOR (object);
+ success = tracker_sparql_cursor_next_finish (cursor, result, &error);
+
+ if (!success)
+ {
+ search_finished (tracker, error);
+
+ g_clear_error (&error);
+ g_clear_object (&cursor);
+
+ return;
+ }
+
+ /* We iterate result by result, not n at a time. */
+ uri = tracker_sparql_cursor_get_string (cursor, 0, NULL);
+ rank = tracker_sparql_cursor_get_double (cursor, 1);
+ mtime_str = tracker_sparql_cursor_get_string (cursor, 2, NULL);
+ atime_str = tracker_sparql_cursor_get_string (cursor, 3, NULL);
+ basename = g_path_get_basename (uri);
+
+ hit = nautilus_search_hit_new (uri);
+ match = nautilus_query_matches_string (tracker->details->query, basename);
+ nautilus_search_hit_set_fts_rank (hit, rank + match);
+ g_free (basename);
+
+ if (g_time_val_from_iso8601 (mtime_str, &tv))
+ {
+ GDateTime *date;
+ date = g_date_time_new_from_timeval_local (&tv);
+ nautilus_search_hit_set_modification_time (hit, date);
+ g_date_time_unref (date);
+ }
+ else
+ {
+ g_warning ("unable to parse mtime: %s", mtime_str);
+ }
+ if (g_time_val_from_iso8601 (atime_str, &tv))
+ {
+ GDateTime *date;
+ date = g_date_time_new_from_timeval_local (&tv);
+ nautilus_search_hit_set_access_time (hit, date);
+ g_date_time_unref (date);
+ }
+ else
+ {
+ g_warning ("unable to parse atime: %s", atime_str);
+ }
+
+ g_queue_push_head (tracker->details->hits_pending, hit);
+ check_pending_hits (tracker, FALSE);
+
+ /* Get next */
+ cursor_next (tracker, cursor);
}
static void
@@ -220,217 +241,234 @@ query_callback (GObject *object,
GAsyncResult *result,
gpointer user_data)
{
- NautilusSearchEngineTracker *tracker;
- TrackerSparqlConnection *connection;
- TrackerSparqlCursor *cursor;
- GError *error = NULL;
-
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (user_data);
-
- connection = TRACKER_SPARQL_CONNECTION (object);
- cursor = tracker_sparql_connection_query_finish (connection,
- result,
- &error);
-
- if (error != NULL) {
- search_finished (tracker, error);
- g_error_free (error);
- } else {
- cursor_next (tracker, cursor);
- }
+ NautilusSearchEngineTracker *tracker;
+ TrackerSparqlConnection *connection;
+ TrackerSparqlCursor *cursor;
+ GError *error = NULL;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (user_data);
+
+ connection = TRACKER_SPARQL_CONNECTION (object);
+ cursor = tracker_sparql_connection_query_finish (connection,
+ result,
+ &error);
+
+ if (error != NULL)
+ {
+ search_finished (tracker, error);
+ g_error_free (error);
+ }
+ else
+ {
+ cursor_next (tracker, cursor);
+ }
}
static gboolean
search_finished_idle (gpointer user_data)
{
- NautilusSearchEngineTracker *tracker = user_data;
+ NautilusSearchEngineTracker *tracker = user_data;
- DEBUG ("Tracker engine finished idle");
+ DEBUG ("Tracker engine finished idle");
- search_finished (tracker, NULL);
+ search_finished (tracker, NULL);
- return FALSE;
+ return FALSE;
}
static void
nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
{
- NautilusSearchEngineTracker *tracker;
- gchar *query_text, *search_text, *location_uri, *downcase;
- GFile *location;
- GString *sparql;
- GList *mimetypes, *l;
- gint mime_count;
- gboolean recursive;
- GPtrArray *date_range;
+ NautilusSearchEngineTracker *tracker;
+ gchar *query_text, *search_text, *location_uri, *downcase;
+ GFile *location;
+ GString *sparql;
+ GList *mimetypes, *l;
+ gint mime_count;
+ gboolean recursive;
+ GPtrArray *date_range;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+
+ if (tracker->details->query_pending)
+ {
+ return;
+ }
+
+ DEBUG ("Tracker engine start");
+ g_object_ref (tracker);
+ tracker->details->query_pending = TRUE;
+
+ g_object_notify (G_OBJECT (provider), "running");
+
+ if (tracker->details->connection == NULL)
+ {
+ g_idle_add (search_finished_idle, provider);
+ return;
+ }
+
+ recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY ||
+ g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
+ tracker->details->recursive = recursive;
+
+ query_text = nautilus_query_get_text (tracker->details->query);
+ downcase = g_utf8_strdown (query_text, -1);
+ search_text = tracker_sparql_escape_string (downcase);
+ g_free (query_text);
+ g_free (downcase);
+
+ location = nautilus_query_get_location (tracker->details->query);
+ location_uri = location ? g_file_get_uri (location) : NULL;
+ mimetypes = nautilus_query_get_mime_types (tracker->details->query);
+ mime_count = g_list_length (mimetypes);
+
+ sparql = g_string_new ("SELECT DISTINCT nie:url(?urn) fts:rank(?urn) nfo:fileLastModified(?urn) nfo:fileLastAccessed(?urn)\n"
+ "WHERE {"
+ " ?urn a nfo:FileDataObject;"
+ " nfo:fileLastModified ?mtime;"
+ " nfo:fileLastAccessed ?atime;"
+ " tracker:available true;");
+
+ g_string_append_printf (sparql, " fts:match '\"%s*\"'", search_text);
+
+ if (mime_count > 0)
+ {
+ g_string_append (sparql, "; nie:mimeType ?mime");
+ }
+
+ g_string_append_printf (sparql, " . FILTER( ");
+
+ if (!tracker->details->recursive)
+ {
+ g_string_append_printf (sparql, "tracker:uri-is-parent('%s', nie:url(?urn)) && ", location_uri);
+ }
+ else
+ {
+ g_string_append_printf (sparql, "tracker:uri-is-descendant('%s', nie:url(?urn)) && ", location_uri);
+ }
+
+ g_string_append_printf (sparql, "fn:contains(fn:lower-case(nfo:fileName(?urn)), '%s')", search_text);
+
+ date_range = nautilus_query_get_date_range (tracker->details->query);
+ if (date_range)
+ {
+ NautilusQuerySearchType type;
+ gchar *initial_date_format;
+ gchar *end_date_format;
+ GDateTime *initial_date;
+ GDateTime *end_date;
+ GDateTime *shifted_end_date;
+
+ initial_date = g_ptr_array_index (date_range, 0);
+ end_date = g_ptr_array_index (date_range, 1);
+ /* As we do for other searches, we want to make the end date inclusive.
+ * For that, add a day to it */
+ shifted_end_date = g_date_time_add_days (end_date, 1);
+
+ type = nautilus_query_get_search_type (tracker->details->query);
+ initial_date_format = g_date_time_format (initial_date, "%Y-%m-%dT%H:%M:%S");
+ end_date_format = g_date_time_format (shifted_end_date, "%Y-%m-%dT%H:%M:%S");
+
+ g_string_append (sparql, " && ");
+
+ if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS)
+ {
+ g_string_append_printf (sparql, "?atime >= \"%s\"^^xsd:dateTime", initial_date_format);
+ g_string_append_printf (sparql, " && ?atime <= \"%s\"^^xsd:dateTime", end_date_format);
+ }
+ else
+ {
+ g_string_append_printf (sparql, "?mtime >= \"%s\"^^xsd:dateTime", initial_date_format);
+ g_string_append_printf (sparql, " && ?mtime <= \"%s\"^^xsd:dateTime", end_date_format);
+ }
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
- if (tracker->details->query_pending) {
- return;
- }
+ g_free (initial_date_format);
+ g_free (end_date_format);
+ g_ptr_array_unref (date_range);
+ }
- DEBUG ("Tracker engine start");
- g_object_ref (tracker);
- tracker->details->query_pending = TRUE;
+ if (mime_count > 0)
+ {
+ g_string_append (sparql, " && (");
- g_object_notify (G_OBJECT (provider), "running");
+ for (l = mimetypes; l != NULL; l = l->next)
+ {
+ if (l != mimetypes)
+ {
+ g_string_append (sparql, " || ");
+ }
- if (tracker->details->connection == NULL) {
- g_idle_add (search_finished_idle, provider);
- return;
- }
-
- recursive = g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY ||
- g_settings_get_enum (nautilus_preferences, "recursive-search") == NAUTILUS_SPEED_TRADEOFF_ALWAYS;
- tracker->details->recursive = recursive;
-
- query_text = nautilus_query_get_text (tracker->details->query);
- downcase = g_utf8_strdown (query_text, -1);
- search_text = tracker_sparql_escape_string (downcase);
- g_free (query_text);
- g_free (downcase);
-
- location = nautilus_query_get_location (tracker->details->query);
- location_uri = location ? g_file_get_uri (location) : NULL;
- mimetypes = nautilus_query_get_mime_types (tracker->details->query);
- mime_count = g_list_length (mimetypes);
-
- sparql = g_string_new ("SELECT DISTINCT nie:url(?urn) fts:rank(?urn) nfo:fileLastModified(?urn) nfo:fileLastAccessed(?urn)\n"
- "WHERE {"
- " ?urn a nfo:FileDataObject;"
- " nfo:fileLastModified ?mtime;"
- " nfo:fileLastAccessed ?atime;"
- " tracker:available true;");
-
- g_string_append_printf (sparql, " fts:match '\"%s*\"'", search_text);
-
- if (mime_count > 0) {
- g_string_append (sparql, "; nie:mimeType ?mime");
- }
-
- g_string_append_printf (sparql, " . FILTER( ");
-
- if (!tracker->details->recursive) {
- g_string_append_printf (sparql, "tracker:uri-is-parent('%s', nie:url(?urn)) && ", location_uri);
- } else {
- g_string_append_printf (sparql, "tracker:uri-is-descendant('%s', nie:url(?urn)) && ", location_uri);
- }
-
- g_string_append_printf (sparql, "fn:contains(fn:lower-case(nfo:fileName(?urn)), '%s')", search_text);
-
- date_range = nautilus_query_get_date_range (tracker->details->query);
- if (date_range) {
- NautilusQuerySearchType type;
- gchar *initial_date_format;
- gchar *end_date_format;
- GDateTime *initial_date;
- GDateTime *end_date;
- GDateTime *shifted_end_date;
-
- initial_date = g_ptr_array_index (date_range, 0);
- end_date = g_ptr_array_index (date_range, 1);
- /* As we do for other searches, we want to make the end date inclusive.
- * For that, add a day to it */
- shifted_end_date = g_date_time_add_days (end_date, 1);
-
- type = nautilus_query_get_search_type (tracker->details->query);
- initial_date_format = g_date_time_format (initial_date, "%Y-%m-%dT%H:%M:%S");
- end_date_format = g_date_time_format (shifted_end_date, "%Y-%m-%dT%H:%M:%S");
-
- g_string_append (sparql, " && ");
-
- if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS) {
- g_string_append_printf (sparql, "?atime >= \"%s\"^^xsd:dateTime", initial_date_format);
- g_string_append_printf (sparql, " && ?atime <= \"%s\"^^xsd:dateTime", end_date_format);
- } else {
- g_string_append_printf (sparql, "?mtime >= \"%s\"^^xsd:dateTime", initial_date_format);
- g_string_append_printf (sparql, " && ?mtime <= \"%s\"^^xsd:dateTime", end_date_format);
- }
-
-
- g_free (initial_date_format);
- g_free (end_date_format);
- g_ptr_array_unref (date_range);
+ g_string_append_printf (sparql, "fn:contains(?mime, '%s')",
+ (gchar *) l->data);
}
-
- if (mime_count > 0) {
- g_string_append (sparql, " && (");
-
- for (l = mimetypes; l != NULL; l = l->next) {
- if (l != mimetypes) {
- g_string_append (sparql, " || ");
- }
-
- g_string_append_printf (sparql, "fn:contains(?mime, '%s')",
- (gchar *) l->data);
- }
- g_string_append (sparql, ")\n");
- }
-
- g_string_append (sparql, ")} ORDER BY DESC (fts:rank(?urn))");
-
- tracker->details->cancellable = g_cancellable_new ();
- tracker_sparql_connection_query_async (tracker->details->connection,
- sparql->str,
- tracker->details->cancellable,
- query_callback,
- tracker);
- g_string_free (sparql, TRUE);
-
- g_free (search_text);
- g_free (location_uri);
- g_list_free_full (mimetypes, g_free);
- g_object_unref (location);
+ g_string_append (sparql, ")\n");
+ }
+
+ g_string_append (sparql, ")} ORDER BY DESC (fts:rank(?urn))");
+
+ tracker->details->cancellable = g_cancellable_new ();
+ tracker_sparql_connection_query_async (tracker->details->connection,
+ sparql->str,
+ tracker->details->cancellable,
+ query_callback,
+ tracker);
+ g_string_free (sparql, TRUE);
+
+ g_free (search_text);
+ g_free (location_uri);
+ g_list_free_full (mimetypes, g_free);
+ g_object_unref (location);
}
static void
nautilus_search_engine_tracker_stop (NautilusSearchProvider *provider)
{
- NautilusSearchEngineTracker *tracker;
-
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
-
- if (tracker->details->query_pending) {
- DEBUG ("Tracker engine stop");
- g_cancellable_cancel (tracker->details->cancellable);
- g_clear_object (&tracker->details->cancellable);
- tracker->details->query_pending = FALSE;
-
- g_object_notify (G_OBJECT (provider), "running");
- }
+ NautilusSearchEngineTracker *tracker;
+
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+
+ if (tracker->details->query_pending)
+ {
+ DEBUG ("Tracker engine stop");
+ g_cancellable_cancel (tracker->details->cancellable);
+ g_clear_object (&tracker->details->cancellable);
+ tracker->details->query_pending = FALSE;
+
+ g_object_notify (G_OBJECT (provider), "running");
+ }
}
static void
nautilus_search_engine_tracker_set_query (NautilusSearchProvider *provider,
- NautilusQuery *query)
+ NautilusQuery *query)
{
- NautilusSearchEngineTracker *tracker;
+ NautilusSearchEngineTracker *tracker;
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
- g_object_ref (query);
- g_clear_object (&tracker->details->query);
- tracker->details->query = query;
+ g_object_ref (query);
+ g_clear_object (&tracker->details->query);
+ tracker->details->query = query;
}
static gboolean
nautilus_search_engine_tracker_is_running (NautilusSearchProvider *provider)
{
- NautilusSearchEngineTracker *tracker;
+ NautilusSearchEngineTracker *tracker;
- tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
+ tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
- return tracker->details->query_pending;
+ return tracker->details->query_pending;
}
static void
nautilus_search_provider_init (NautilusSearchProviderInterface *iface)
{
- iface->set_query = nautilus_search_engine_tracker_set_query;
- iface->start = nautilus_search_engine_tracker_start;
- iface->stop = nautilus_search_engine_tracker_stop;
- iface->is_running = nautilus_search_engine_tracker_is_running;
+ iface->set_query = nautilus_search_engine_tracker_set_query;
+ iface->start = nautilus_search_engine_tracker_start;
+ iface->stop = nautilus_search_engine_tracker_stop;
+ iface->is_running = nautilus_search_engine_tracker_is_running;
}
static void
@@ -439,57 +477,61 @@ nautilus_search_engine_tracker_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
- NautilusSearchProvider *self = NAUTILUS_SEARCH_PROVIDER (object);
+ NautilusSearchProvider *self = NAUTILUS_SEARCH_PROVIDER (object);
- switch (prop_id) {
+ switch (prop_id)
+ {
case PROP_RUNNING:
- g_value_set_boolean (value, nautilus_search_engine_tracker_is_running (self));
- break;
+ {
+ g_value_set_boolean (value, nautilus_search_engine_tracker_is_running (self));
+ }
+ break;
default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
static void
nautilus_search_engine_tracker_class_init (NautilusSearchEngineTrackerClass *class)
{
- GObjectClass *gobject_class;
+ GObjectClass *gobject_class;
- gobject_class = G_OBJECT_CLASS (class);
- gobject_class->finalize = finalize;
- gobject_class->get_property = nautilus_search_engine_tracker_get_property;
+ gobject_class = G_OBJECT_CLASS (class);
+ gobject_class->finalize = finalize;
+ gobject_class->get_property = nautilus_search_engine_tracker_get_property;
- /**
- * NautilusSearchEngine::running:
- *
- * Whether the search engine is running a search.
- */
- g_object_class_override_property (gobject_class, PROP_RUNNING, "running");
+ /**
+ * NautilusSearchEngine::running:
+ *
+ * Whether the search engine is running a search.
+ */
+ g_object_class_override_property (gobject_class, PROP_RUNNING, "running");
- g_type_class_add_private (class, sizeof (NautilusSearchEngineTrackerDetails));
+ g_type_class_add_private (class, sizeof (NautilusSearchEngineTrackerDetails));
}
static void
nautilus_search_engine_tracker_init (NautilusSearchEngineTracker *engine)
{
- GError *error = NULL;
+ GError *error = NULL;
- engine->details = G_TYPE_INSTANCE_GET_PRIVATE (engine, NAUTILUS_TYPE_SEARCH_ENGINE_TRACKER,
- NautilusSearchEngineTrackerDetails);
- engine->details->hits_pending = g_queue_new ();
+ engine->details = G_TYPE_INSTANCE_GET_PRIVATE (engine, NAUTILUS_TYPE_SEARCH_ENGINE_TRACKER,
+ NautilusSearchEngineTrackerDetails);
+ engine->details->hits_pending = g_queue_new ();
- engine->details->connection = tracker_sparql_connection_get (NULL, &error);
+ engine->details->connection = tracker_sparql_connection_get (NULL, &error);
- if (error) {
- g_warning ("Could not establish a connection to Tracker: %s", error->message);
- g_error_free (error);
- }
+ if (error)
+ {
+ g_warning ("Could not establish a connection to Tracker: %s", error->message);
+ g_error_free (error);
+ }
}
NautilusSearchEngineTracker *
nautilus_search_engine_tracker_new (void)
{
- return g_object_new (NAUTILUS_TYPE_SEARCH_ENGINE_TRACKER, NULL);
+ return g_object_new (NAUTILUS_TYPE_SEARCH_ENGINE_TRACKER, NULL);
}