diff options
Diffstat (limited to 'src/nautilus-search-engine.c')
-rw-r--r-- | src/nautilus-search-engine.c | 393 |
1 files changed, 207 insertions, 186 deletions
diff --git a/src/nautilus-search-engine.c b/src/nautilus-search-engine.c index 79404f0a1..9e109cc5d 100644 --- a/src/nautilus-search-engine.c +++ b/src/nautilus-search-engine.c @@ -36,24 +36,25 @@ struct NautilusSearchEngineDetails { #ifdef ENABLE_TRACKER - NautilusSearchEngineTracker *tracker; + NautilusSearchEngineTracker *tracker; #endif - NautilusSearchEngineSimple *simple; - NautilusSearchEngineModel *model; + NautilusSearchEngineSimple *simple; + NautilusSearchEngineModel *model; - GHashTable *uris; - guint providers_running; - guint providers_finished; - guint providers_error; + GHashTable *uris; + guint providers_running; + guint providers_finished; + guint providers_error; - gboolean running; - gboolean restart; + gboolean running; + gboolean restart; }; -enum { - PROP_0, - PROP_RUNNING, - LAST_PROP +enum +{ + PROP_0, + PROP_RUNNING, + LAST_PROP }; static void nautilus_search_provider_init (NautilusSearchProviderInterface *iface); @@ -61,238 +62,255 @@ static void nautilus_search_provider_init (NautilusSearchProviderInterface *ifac static gboolean nautilus_search_engine_is_running (NautilusSearchProvider *provider); G_DEFINE_TYPE_WITH_CODE (NautilusSearchEngine, - nautilus_search_engine, - G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_SEARCH_PROVIDER, - nautilus_search_provider_init)) + nautilus_search_engine, + G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_SEARCH_PROVIDER, + nautilus_search_provider_init)) static void nautilus_search_engine_set_query (NautilusSearchProvider *provider, - NautilusQuery *query) + NautilusQuery *query) { - NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (provider); + NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (provider); #ifdef ENABLE_TRACKER - nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine->details->tracker), query); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine->details->tracker), query); #endif - nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine->details->model), query); - nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine->details->simple), query); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine->details->model), query); + nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (engine->details->simple), query); } static void search_engine_start_real (NautilusSearchEngine *engine) { - engine->details->providers_running = 0; - engine->details->providers_finished = 0; - engine->details->providers_error = 0; + engine->details->providers_running = 0; + engine->details->providers_finished = 0; + engine->details->providers_error = 0; - engine->details->restart = FALSE; + engine->details->restart = FALSE; - DEBUG ("Search engine start real"); + DEBUG ("Search engine start real"); - g_object_ref (engine); + g_object_ref (engine); #ifdef ENABLE_TRACKER - nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine->details->tracker)); - engine->details->providers_running++; + nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine->details->tracker)); + engine->details->providers_running++; #endif - if (nautilus_search_engine_model_get_model (engine->details->model)) { - nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine->details->model)); - engine->details->providers_running++; - } - - nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine->details->simple)); - engine->details->providers_running++; + if (nautilus_search_engine_model_get_model (engine->details->model)) + { + nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine->details->model)); + engine->details->providers_running++; + } + + nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (engine->details->simple)); + engine->details->providers_running++; } static void nautilus_search_engine_start (NautilusSearchProvider *provider) { - NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (provider); - gint num_finished; + NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (provider); + gint num_finished; - DEBUG ("Search engine start"); + DEBUG ("Search engine start"); - num_finished = engine->details->providers_error + engine->details->providers_finished; + num_finished = engine->details->providers_error + engine->details->providers_finished; - if (engine->details->running) { - if (num_finished == engine->details->providers_running && - engine->details->restart) { - search_engine_start_real (engine); - } + if (engine->details->running) + { + if (num_finished == engine->details->providers_running && + engine->details->restart) + { + search_engine_start_real (engine); + } - return; - } + return; + } - engine->details->running = TRUE; + engine->details->running = TRUE; - g_object_notify (G_OBJECT (provider), "running"); + g_object_notify (G_OBJECT (provider), "running"); - if (num_finished < engine->details->providers_running) { - engine->details->restart = TRUE; - } else { - search_engine_start_real (engine); - } + if (num_finished < engine->details->providers_running) + { + engine->details->restart = TRUE; + } + else + { + search_engine_start_real (engine); + } } static void nautilus_search_engine_stop (NautilusSearchProvider *provider) { - NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (provider); + NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (provider); - DEBUG ("Search engine stop"); + DEBUG ("Search engine stop"); #ifdef ENABLE_TRACKER - nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine->details->tracker)); + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine->details->tracker)); #endif - nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine->details->model)); - nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine->details->simple)); + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine->details->model)); + nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (engine->details->simple)); - engine->details->running = FALSE; - engine->details->restart = FALSE; + engine->details->running = FALSE; + engine->details->restart = FALSE; - g_object_notify (G_OBJECT (provider), "running"); + g_object_notify (G_OBJECT (provider), "running"); } static void search_provider_hits_added (NautilusSearchProvider *provider, - GList *hits, - NautilusSearchEngine *engine) + GList *hits, + NautilusSearchEngine *engine) { - GList *added = NULL; - GList *l; - - if (!engine->details->running || engine->details->restart) { - DEBUG ("Ignoring hits-added, since engine is %s", - !engine->details->running ? "not running" : "waiting to restart"); - return; - } - - for (l = hits; l != NULL; l = l->next) { - NautilusSearchHit *hit = l->data; - int count; - const char *uri; - - uri = nautilus_search_hit_get_uri (hit); - count = GPOINTER_TO_INT (g_hash_table_lookup (engine->details->uris, uri)); - if (count == 0) - added = g_list_prepend (added, hit); - g_hash_table_replace (engine->details->uris, g_strdup (uri), GINT_TO_POINTER (++count)); - } - if (added != NULL) { - added = g_list_reverse (added); - nautilus_search_provider_hits_added (NAUTILUS_SEARCH_PROVIDER (engine), added); - g_list_free (added); - } + GList *added = NULL; + GList *l; + + if (!engine->details->running || engine->details->restart) + { + DEBUG ("Ignoring hits-added, since engine is %s", + !engine->details->running ? "not running" : "waiting to restart"); + return; + } + + for (l = hits; l != NULL; l = l->next) + { + NautilusSearchHit *hit = l->data; + int count; + const char *uri; + + uri = nautilus_search_hit_get_uri (hit); + count = GPOINTER_TO_INT (g_hash_table_lookup (engine->details->uris, uri)); + if (count == 0) + { + added = g_list_prepend (added, hit); + } + g_hash_table_replace (engine->details->uris, g_strdup (uri), GINT_TO_POINTER (++count)); + } + if (added != NULL) + { + added = g_list_reverse (added); + nautilus_search_provider_hits_added (NAUTILUS_SEARCH_PROVIDER (engine), added); + g_list_free (added); + } } static void check_providers_status (NautilusSearchEngine *engine) { - gint num_finished = engine->details->providers_error + engine->details->providers_finished; - - if (num_finished < engine->details->providers_running) { - return; - } - - if (num_finished == engine->details->providers_error) { - DEBUG ("Search engine error"); - nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (engine), - _("Unable to complete the requested search")); - } else { - if (engine->details->restart) { - DEBUG ("Search engine finished and restarting"); - } else { - DEBUG ("Search engine finished"); - } - nautilus_search_provider_finished (NAUTILUS_SEARCH_PROVIDER (engine), - engine->details->restart ? NAUTILUS_SEARCH_PROVIDER_STATUS_RESTARTING : - NAUTILUS_SEARCH_PROVIDER_STATUS_NORMAL); - } - - engine->details->running = FALSE; - g_object_notify (G_OBJECT (engine), "running"); - - g_hash_table_remove_all (engine->details->uris); - - if (engine->details->restart) { - nautilus_search_engine_start (NAUTILUS_SEARCH_PROVIDER (engine)); - } - - g_object_unref (engine); + gint num_finished = engine->details->providers_error + engine->details->providers_finished; + + if (num_finished < engine->details->providers_running) + { + return; + } + + if (num_finished == engine->details->providers_error) + { + DEBUG ("Search engine error"); + nautilus_search_provider_error (NAUTILUS_SEARCH_PROVIDER (engine), + _("Unable to complete the requested search")); + } + else + { + if (engine->details->restart) + { + DEBUG ("Search engine finished and restarting"); + } + else + { + DEBUG ("Search engine finished"); + } + nautilus_search_provider_finished (NAUTILUS_SEARCH_PROVIDER (engine), + engine->details->restart ? NAUTILUS_SEARCH_PROVIDER_STATUS_RESTARTING : + NAUTILUS_SEARCH_PROVIDER_STATUS_NORMAL); + } + + engine->details->running = FALSE; + g_object_notify (G_OBJECT (engine), "running"); + + g_hash_table_remove_all (engine->details->uris); + + if (engine->details->restart) + { + nautilus_search_engine_start (NAUTILUS_SEARCH_PROVIDER (engine)); + } + + g_object_unref (engine); } static void search_provider_error (NautilusSearchProvider *provider, - const char *error_message, - NautilusSearchEngine *engine) - + const char *error_message, + NautilusSearchEngine *engine) { - DEBUG ("Search provider error: %s", error_message); - engine->details->providers_error++; + DEBUG ("Search provider error: %s", error_message); + engine->details->providers_error++; - check_providers_status (engine); + check_providers_status (engine); } static void search_provider_finished (NautilusSearchProvider *provider, NautilusSearchProviderStatus status, NautilusSearchEngine *engine) - { - DEBUG ("Search provider finished"); - engine->details->providers_finished++; + DEBUG ("Search provider finished"); + engine->details->providers_finished++; - check_providers_status (engine); + check_providers_status (engine); } static void connect_provider_signals (NautilusSearchEngine *engine, - NautilusSearchProvider *provider) + NautilusSearchProvider *provider) { - g_signal_connect (provider, "hits-added", - G_CALLBACK (search_provider_hits_added), - engine); - g_signal_connect (provider, "finished", - G_CALLBACK (search_provider_finished), - engine); - g_signal_connect (provider, "error", - G_CALLBACK (search_provider_error), - engine); + g_signal_connect (provider, "hits-added", + G_CALLBACK (search_provider_hits_added), + engine); + g_signal_connect (provider, "finished", + G_CALLBACK (search_provider_finished), + engine); + g_signal_connect (provider, "error", + G_CALLBACK (search_provider_error), + engine); } static gboolean nautilus_search_engine_is_running (NautilusSearchProvider *provider) { - NautilusSearchEngine *engine; + NautilusSearchEngine *engine; - engine = NAUTILUS_SEARCH_ENGINE (provider); + engine = NAUTILUS_SEARCH_ENGINE (provider); - return engine->details->running; + return engine->details->running; } static void nautilus_search_provider_init (NautilusSearchProviderInterface *iface) { - iface->set_query = nautilus_search_engine_set_query; - iface->start = nautilus_search_engine_start; - iface->stop = nautilus_search_engine_stop; - iface->is_running = nautilus_search_engine_is_running; + iface->set_query = nautilus_search_engine_set_query; + iface->start = nautilus_search_engine_start; + iface->stop = nautilus_search_engine_stop; + iface->is_running = nautilus_search_engine_is_running; } static void nautilus_search_engine_finalize (GObject *object) { - NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (object); + NautilusSearchEngine *engine = NAUTILUS_SEARCH_ENGINE (object); - g_hash_table_destroy (engine->details->uris); + g_hash_table_destroy (engine->details->uris); #ifdef ENABLE_TRACKER - g_clear_object (&engine->details->tracker); + g_clear_object (&engine->details->tracker); #endif - g_clear_object (&engine->details->model); - g_clear_object (&engine->details->simple); + g_clear_object (&engine->details->model); + g_clear_object (&engine->details->simple); - G_OBJECT_CLASS (nautilus_search_engine_parent_class)->finalize (object); + G_OBJECT_CLASS (nautilus_search_engine_parent_class)->finalize (object); } static void @@ -301,76 +319,79 @@ nautilus_search_engine_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_is_running (self)); - break; + { + g_value_set_boolean (value, nautilus_search_engine_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_class_init (NautilusSearchEngineClass *class) { - GObjectClass *object_class; + GObjectClass *object_class; - object_class = (GObjectClass *) class; + object_class = (GObjectClass *) class; - object_class->finalize = nautilus_search_engine_finalize; - object_class->get_property = nautilus_search_engine_get_property; + object_class->finalize = nautilus_search_engine_finalize; + object_class->get_property = nautilus_search_engine_get_property; - /** - * NautilusSearchEngine::running: - * - * Whether the search engine is running a search. - */ - g_object_class_override_property (object_class, PROP_RUNNING, "running"); + /** + * NautilusSearchEngine::running: + * + * Whether the search engine is running a search. + */ + g_object_class_override_property (object_class, PROP_RUNNING, "running"); - g_type_class_add_private (class, sizeof (NautilusSearchEngineDetails)); + g_type_class_add_private (class, sizeof (NautilusSearchEngineDetails)); } static void nautilus_search_engine_init (NautilusSearchEngine *engine) { - engine->details = G_TYPE_INSTANCE_GET_PRIVATE (engine, - NAUTILUS_TYPE_SEARCH_ENGINE, - NautilusSearchEngineDetails); + engine->details = G_TYPE_INSTANCE_GET_PRIVATE (engine, + NAUTILUS_TYPE_SEARCH_ENGINE, + NautilusSearchEngineDetails); - engine->details->uris = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + engine->details->uris = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); #ifdef ENABLE_TRACKER - engine->details->tracker = nautilus_search_engine_tracker_new (); - connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (engine->details->tracker)); + engine->details->tracker = nautilus_search_engine_tracker_new (); + connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (engine->details->tracker)); #endif - engine->details->model = nautilus_search_engine_model_new (); - connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (engine->details->model)); + engine->details->model = nautilus_search_engine_model_new (); + connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (engine->details->model)); - engine->details->simple = nautilus_search_engine_simple_new (); - connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (engine->details->simple)); + engine->details->simple = nautilus_search_engine_simple_new (); + connect_provider_signals (engine, NAUTILUS_SEARCH_PROVIDER (engine->details->simple)); } NautilusSearchEngine * nautilus_search_engine_new (void) { - NautilusSearchEngine *engine; + NautilusSearchEngine *engine; - engine = g_object_new (NAUTILUS_TYPE_SEARCH_ENGINE, NULL); + engine = g_object_new (NAUTILUS_TYPE_SEARCH_ENGINE, NULL); - return engine; + return engine; } NautilusSearchEngineModel * nautilus_search_engine_get_model_provider (NautilusSearchEngine *engine) { - return engine->details->model; + return engine->details->model; } NautilusSearchEngineSimple * nautilus_search_engine_get_simple_provider (NautilusSearchEngine *engine) { - return engine->details->simple; + return engine->details->simple; } |