Index: src/tracker-search-tool/tracker-search-tool.c =================================================================== --- src/tracker-search-tool/tracker-search-tool.c (revision 394) +++ src/tracker-search-tool/tracker-search-tool.c (working copy) @@ -2004,11 +2004,74 @@ } void +get_rdf_data (gchar **commands, gchar **rdf_rv) +{ + static struct { + gchar *key, *metaname; + } *p, map[] = { + { "title", "DC:Title" }, + { "format", "DC:Format" }, + { "creator", "DC:Creator" }, + { "keywords", "DC:Keywords" }, + { "mime", "File:Mime" }, + { "path", "File:Path" }, + { "ext", "File:Ext" }, + { "artist", "Audio:Artist" }, + { "album", "Audio:Album" }, + { "track", "Audio:Title" }, + { "subject", "Doc:Subject" }, + { "author", "Doc:Author" }, + { NULL, NULL } + }; + GString *rdf, *new_commands; + gboolean got_something = FALSE; + gchar **command_tokens, **tok; + gchar **item; + + rdf = g_string_new (""); + new_commands = g_string_new (NULL); + + command_tokens = g_strsplit (*commands, " ", -1); + for (tok = command_tokens; *tok; ++tok) { + item = g_strsplit (*tok, ":", 2); + if (item[1] == NULL) { + g_string_append (new_commands, *tok); + } + else { + for (p = map; p->key; ++p) { + if (item[0] && strcmp (item[0], p->key) == 0) { + got_something = TRUE; + g_string_append_printf (rdf, + "" + " " + " %s" + "", + p->metaname, item[1]); + } + } + } + g_strfreev (item); + } + g_strfreev (command_tokens); + + g_free (*commands); + *commands = g_string_free (new_commands, FALSE); + if (got_something) { + g_string_append (rdf, ""); + *rdf_rv = g_string_free (rdf, FALSE); + } + else { + g_string_free (rdf, TRUE); + } +} + +void click_find_cb (GtkWidget * widget, gpointer data) { GSearchWindow * gsearch = data; gchar * command; + gchar * rdf = NULL; GPtrArray *out_array = NULL; GtkTreeIter iter; int type; @@ -2038,8 +2101,18 @@ type = SERVICE_FILES; } - - out_array = tracker_search_text_detailed (tracker_client, -1, type, command, gsearch->offset, MAX_SEARCH_RESULTS, NULL); + get_rdf_data (&command, &rdf); + command = g_strstrip (command); + if (rdf) { + gchar *fields[2] = { "File:Mime", NULL }; + out_array = tracker_search_query (tracker_client, -1, type, fields, command, NULL, rdf, gsearch->offset, MAX_SEARCH_RESULTS, FALSE, NULL); + + g_free (rdf); + } + else { + out_array = tracker_search_text_detailed (tracker_client, -1, type, command, gsearch->offset, MAX_SEARCH_RESULTS, NULL); + } + gsearch->is_locate_database_check_finished = TRUE; stop_animation (gsearch); g_free (command);