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;
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}