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); }
static void nemo_search_engine_tracker_start (NemoSearchEngine *engine) { NemoSearchEngineTracker *tracker; gchar *search_text, *location_uri; GString *sparql; GList *mimetypes, *l; gint mime_count; tracker = NEMO_SEARCH_ENGINE_TRACKER (engine); if (tracker->details->query_pending) { return; } if (tracker->details->query == NULL) { return; } g_cancellable_reset (tracker->details->cancellable); search_text = nemo_query_get_text (tracker->details->query); location_uri = nemo_query_get_location (tracker->details->query); mimetypes = nemo_query_get_mime_types (tracker->details->query); mime_count = g_list_length (mimetypes); #ifdef FTS_MATCHING /* Using FTS: */ sparql = g_string_new ("SELECT nie:url(?urn) " "WHERE {" " ?urn a nfo:FileDataObject ;" " tracker:available true ; "); if (mime_count > 0) { g_string_append (sparql, "nie:mimeType ?mime ;"); } g_string_append (sparql, " fts:match "); sparql_append_string_literal (sparql, search_text); if (location_uri || mime_count > 0) { g_string_append (sparql, " . FILTER ("); if (location_uri) { g_string_append (sparql, " fn:starts-with(nie:url(?urn),"); sparql_append_string_literal (sparql, location_uri); g_string_append (sparql, ")"); } if (mime_count > 0) { if (location_uri) { g_string_append (sparql, " && "); } g_string_append (sparql, "("); for (l = mimetypes; l != NULL; l = l->next) { if (l != mimetypes) { g_string_append (sparql, " || "); } g_string_append (sparql, "?mime = "); sparql_append_string_literal (sparql, l->data); } g_string_append (sparql, ")"); } 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 ;"); if (mime_count > 0) { g_string_append (sparql, "nie:mimeType ?mime ;"); } g_string_append (sparql, " tracker:available true ." " FILTER (fn:contains(nfo:fileName(?urn),"); sparql_append_string_literal (sparql, search_text); g_string_append (sparql, ")"); if (location_uri) { g_string_append (sparql, " && fn:starts-with(nie:url(?urn),"); sparql_append_string_literal (sparql, location_uri); g_string_append (sparql, ")"); } if (mime_count > 0) { g_string_append (sparql, " && "); g_string_append (sparql, "("); for (l = mimetypes; l != NULL; l = l->next) { if (l != mimetypes) { g_string_append (sparql, " || "); } g_string_append (sparql, "?mime = "); sparql_append_string_literal (sparql, l->data); } g_string_append (sparql, ")"); } g_string_append (sparql, ")"); g_string_append (sparql, "} ORDER BY DESC(nie:url(?urn)) DESC(nfo:fileName(?urn))"); #endif /* FTS_MATCHING */ tracker_sparql_connection_query_async (tracker->details->connection, sparql->str, tracker->details->cancellable, query_callback, tracker); g_string_free (sparql, TRUE); tracker->details->query_pending = TRUE; g_free (search_text); g_free (location_uri); if (mimetypes != NULL) { g_list_free_full (mimetypes, g_free); } }