static SearchThreadData * search_thread_data_new (GtkSearchEngineSimple *engine, GtkQuery *query) { SearchThreadData *data; char *text, *lower, *uri; data = g_new0 (SearchThreadData, 1); data->engine = g_object_ref (engine); uri = _gtk_query_get_location (query); if (uri != NULL) { data->path = g_filename_from_uri (uri, NULL, NULL); g_free (uri); } if (data->path == NULL) data->path = g_strdup (g_get_home_dir ()); text = _gtk_query_get_text (query); lower = g_ascii_strdown (text, -1); data->words = g_strsplit (lower, " ", -1); g_free (text); g_free (lower); return data; }
static void gtk_search_engine_tracker_start (GtkSearchEngine *engine) { GtkSearchEngineTracker *tracker; gchar *search_text, *location, *location_uri; tracker = GTK_SEARCH_ENGINE_TRACKER (engine); if (tracker->priv->query_pending) return; if (tracker->priv->query == NULL) return; search_text = _gtk_query_get_text (tracker->priv->query); location_uri = _gtk_query_get_location (tracker->priv->query); location = NULL; if (location_uri) { if (tracker->priv->version == TRACKER_0_6) { location = g_filename_from_uri (location_uri, NULL, NULL); g_free (location_uri); } else location = location_uri; } if (location) { tracker_search_metadata_by_text_and_location_async (tracker->priv->client, search_text, location, search_callback, tracker); g_free (location); } else { tracker_search_metadata_by_text_async (tracker->priv->client, search_text, search_callback, tracker); } tracker->priv->query_pending = TRUE; g_free (search_text); }
static void gtk_search_engine_tracker_start (GtkSearchEngine *engine) { GtkSearchEngineTracker *tracker; gchar *search_text, *location_uri; GString *sparql; tracker = GTK_SEARCH_ENGINE_TRACKER (engine); if (tracker->priv->query_pending) { g_debug ("Attempt to start a new search while one is pending, doing nothing"); return; } if (tracker->priv->query == NULL) { g_debug ("Attempt to start a new search with no GtkQuery, doing nothing"); return; } search_text = _gtk_query_get_text (tracker->priv->query); location_uri = _gtk_query_get_location (tracker->priv->query); g_debug ("Query starting, search criteria:'%s', location:'%s'", search_text, location_uri); #ifdef FTS_MATCHING /* Using FTS: */ sparql = g_string_new ("SELECT nie:url(?urn) " "WHERE {" " ?urn a nfo:FileDataObject ;" " tracker:available true ; " " fts:match "); sparql_append_string_literal (sparql, search_text); if (location_uri) { g_string_append (sparql, " . FILTER (fn:starts-with(nie:url(?urn),"); sparql_append_string_literal (sparql, location_uri); g_string_append (sparql, "))"); } g_string_append (sparql, " } ORDER BY DESC(fts:rank(?urn)) ASC(nie:url(?urn))"); #else /* FTS_MATCHING */ /* Using filename matching: */ sparql = g_string_new ("SELECT nie:url(?urn) " "WHERE {" " ?urn a nfo:FileDataObject ;" " tracker:available true ." " FILTER (fn:contains(nfo:fileName(?urn),"); sparql_append_string_literal (sparql, search_text); g_string_append (sparql, "))" "} ORDER BY DESC(nie:url(?urn)) DESC(nfo:fileName(?urn))"); #endif /* FTS_MATCHING */ tracker_sparql_connection_query_async (tracker->priv->connection, sparql->str, tracker->priv->cancellable, query_callback, tracker); g_string_free (sparql, TRUE); tracker->priv->query_pending = TRUE; g_free (search_text); }