static void search_engine_hits_added (NautilusSearchEngine *engine, GList *hits, NautilusSearchDirectory *search) { GList *hit_list; GList *file_list; NautilusFile *file; SearchMonitor *monitor; GList *monitor_list; file_list = NULL; for (hit_list = hits; hit_list != NULL; hit_list = hit_list->next) { NautilusSearchHit *hit = hit_list->data; const char *uri; uri = nautilus_search_hit_get_uri (hit); if (g_str_has_suffix (uri, NAUTILUS_SAVED_SEARCH_EXTENSION)) { /* Never return saved searches themselves as hits */ continue; } nautilus_search_hit_compute_scores (hit, search->details->query); file = nautilus_file_get_by_uri (uri); nautilus_file_set_search_relevance (file, nautilus_search_hit_get_relevance (hit)); for (monitor_list = search->details->monitor_list; monitor_list; monitor_list = monitor_list->next) { monitor = monitor_list->data; /* Add monitors */ nautilus_file_monitor_add (file, monitor, monitor->monitor_attributes); } g_signal_connect (file, "changed", G_CALLBACK (file_changed), search), file_list = g_list_prepend (file_list, file); g_hash_table_add (search->details->files_hash, file); } search->details->files = g_list_concat (search->details->files, file_list); nautilus_directory_emit_files_added (NAUTILUS_DIRECTORY (search), file_list); file = nautilus_directory_get_corresponding_file (NAUTILUS_DIRECTORY (search)); nautilus_file_emit_changed (file); nautilus_file_unref (file); search_directory_add_pending_files_callbacks (search); }
static void search_provider_hits_added (NautilusSearchProvider *provider, GList *hits, NautilusSearchEngine *engine) { NautilusSearchEnginePrivate *priv; GList *added = NULL; GList *l; priv = nautilus_search_engine_get_instance_private (engine); if (!priv->running || priv->restart) { DEBUG ("Ignoring hits-added, since engine is %s", !priv->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 (priv->uris, uri)); if (count == 0) { added = g_list_prepend (added, hit); } g_hash_table_replace (priv->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); } }