[tracker/rss-enclosures] tracker-search: New --software and --software-categories options
- From: Roberto Guido <rguido src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/rss-enclosures] tracker-search: New --software and --software-categories options
- Date: Wed, 24 Nov 2010 02:33:52 +0000 (UTC)
commit 8a22ba4b4e489d0af577ecfb9fe9be9e4bff922f
Author: Aleksander Morgado <aleksander lanedo com>
Date: Wed Nov 17 12:18:47 2010 +0100
tracker-search: New --software and --software-categories options
src/tracker-utils/tracker-search.c | 196 +++++++++++++++++++++++++++++++++++-
1 files changed, 193 insertions(+), 3 deletions(-)
---
diff --git a/src/tracker-utils/tracker-search.c b/src/tracker-utils/tracker-search.c
index 36651d0..8434f4d 100644
--- a/src/tracker-utils/tracker-search.c
+++ b/src/tracker-utils/tracker-search.c
@@ -58,6 +58,8 @@ static gboolean document_files;
static gboolean emails;
static gboolean contacts;
static gboolean feeds;
+static gboolean software;
+static gboolean software_categories;
static gboolean print_version;
static GOptionEntry entries[] = {
@@ -74,7 +76,7 @@ static GOptionEntry entries[] = {
NULL
},
{ "detailed", 'd', 0, G_OPTION_ARG_NONE, &detailed,
- N_("Show URNs for results (doesn't apply to --music-albums, --music-artists, --feeds)"),
+ N_("Show URNs for results (doesn't apply to --music-albums, --music-artists, --feeds, --software, --software-categories)"),
NULL
},
{ "all", 'a', 0, G_OPTION_ARG_NONE, &all,
@@ -98,7 +100,7 @@ static GOptionEntry entries[] = {
NULL
},
{ "music-artists", 0, 0, G_OPTION_ARG_NONE, &music_artists,
- N_("Search for music artists (--all has no effect on this) "),
+ N_("Search for music artists (--all has no effect on this)"),
NULL
},
{ "images", 'i', 0, G_OPTION_ARG_NONE, &image_files,
@@ -121,8 +123,16 @@ static GOptionEntry entries[] = {
N_("Search for contacts"),
NULL
},
+ { "software", 0, 0, G_OPTION_ARG_NONE, &software,
+ N_("Search for software (--all has no effect on this)"),
+ NULL
+ },
+ { "software-categories", 0, 0, G_OPTION_ARG_NONE, &software_categories,
+ N_("Search for software categories (--all has no effect on this)"),
+ NULL
+ },
{ "feeds", 0, 0, G_OPTION_ARG_NONE, &feeds,
- N_("Search for feeds (--all has no effect on this) "),
+ N_("Search for feeds (--all has no effect on this)"),
NULL
},
{ "version", 'V', 0, G_OPTION_ARG_NONE, &print_version,
@@ -915,6 +925,166 @@ get_feeds (TrackerSparqlConnection *connection,
}
static gboolean
+get_software (TrackerSparqlConnection *connection,
+ GStrv search_terms,
+ gint search_offset,
+ gint search_limit,
+ gboolean use_or_operator)
+{
+ GError *error = NULL;
+ TrackerSparqlCursor *cursor;
+ gchar *fts;
+ gchar *query;
+
+ fts = get_fts_string (search_terms, use_or_operator);
+
+ if (fts) {
+ query = g_strdup_printf ("SELECT ?soft nie:title(?soft) "
+ "WHERE {"
+ " ?soft a nfo:Software ;"
+ " fts:match \"%s\" . "
+ "} "
+ "ORDER BY ASC(nie:title(?soft)) "
+ "OFFSET %d "
+ "LIMIT %d",
+ fts,
+ search_offset,
+ search_limit);
+ } else {
+ query = g_strdup_printf ("SELECT ?soft nie:title(?soft) "
+ "WHERE {"
+ " ?soft a nfo:Software ."
+ "} "
+ "ORDER BY ASC(nie:title(?soft)) "
+ "OFFSET %d "
+ "LIMIT %d",
+ search_offset,
+ search_limit);
+ }
+
+ g_free (fts);
+
+ cursor = tracker_sparql_connection_query (connection, query, NULL, &error);
+ g_free (query);
+
+ if (error) {
+ g_printerr ("%s, %s\n",
+ _("Could not get search results"),
+ error->message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ if (!cursor) {
+ g_print ("%s\n",
+ _("No software was found"));
+ } else {
+ gint count = 0;
+
+ g_print ("%s:\n", _("Software"));
+
+ while (tracker_sparql_cursor_next (cursor, NULL, NULL)) {
+ g_print (" %s (%s)\n",
+ tracker_sparql_cursor_get_string (cursor, 0, NULL),
+ tracker_sparql_cursor_get_string (cursor, 1, NULL));
+
+ count++;
+ }
+
+ g_print ("\n");
+
+ if (count >= search_limit) {
+ show_limit_warning ();
+ }
+
+ g_object_unref (cursor);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+get_software_categories (TrackerSparqlConnection *connection,
+ GStrv search_terms,
+ gint search_offset,
+ gint search_limit,
+ gboolean use_or_operator)
+{
+ GError *error = NULL;
+ TrackerSparqlCursor *cursor;
+ gchar *fts;
+ gchar *query;
+
+ fts = get_fts_string (search_terms, use_or_operator);
+
+ if (fts) {
+ query = g_strdup_printf ("SELECT ?cat nie:title(?cat) "
+ "WHERE {"
+ " ?cat a nfo:SoftwareCategory ;"
+ " fts:match \"%s\" . "
+ "} "
+ "ORDER BY ASC(nie:title(?cat)) "
+ "OFFSET %d "
+ "LIMIT %d",
+ fts,
+ search_offset,
+ search_limit);
+ } else {
+ query = g_strdup_printf ("SELECT ?cat nie:title(?cat) "
+ "WHERE {"
+ " ?cat a nfo:SoftwareCategory ."
+ "} "
+ "ORDER BY ASC(nie:title(?cat)) "
+ "OFFSET %d "
+ "LIMIT %d",
+ search_offset,
+ search_limit);
+ }
+
+ g_free (fts);
+
+ cursor = tracker_sparql_connection_query (connection, query, NULL, &error);
+ g_free (query);
+
+ if (error) {
+ g_printerr ("%s, %s\n",
+ _("Could not get search results"),
+ error->message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ if (!cursor) {
+ g_print ("%s\n",
+ _("No software categories were found"));
+ } else {
+ gint count = 0;
+
+ g_print ("%s:\n", _("Software Categories"));
+
+ while (tracker_sparql_cursor_next (cursor, NULL, NULL)) {
+ g_print (" %s (%s)\n",
+ tracker_sparql_cursor_get_string (cursor, 0, NULL),
+ tracker_sparql_cursor_get_string (cursor, 1, NULL));
+
+ count++;
+ }
+
+ g_print ("\n");
+
+ if (count >= search_limit) {
+ show_limit_warning ();
+ }
+
+ g_object_unref (cursor);
+ }
+
+ return TRUE;
+}
+
+static gboolean
get_files (TrackerSparqlConnection *connection,
GStrv search_terms,
gboolean show_all,
@@ -1183,6 +1353,8 @@ main (int argc, char **argv)
if (!music_albums && !music_artists && !music_files &&
!feeds &&
+ !software &&
+ !software_categories &&
!image_files &&
!video_files &&
!document_files &&
@@ -1375,6 +1547,24 @@ main (int argc, char **argv)
return success ? EXIT_SUCCESS : EXIT_FAILURE;
}
+ if (software) {
+ gboolean success;
+
+ success = get_software (connection, terms, offset, limit, or_operator);
+ g_object_unref (connection);
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+
+ if (software_categories) {
+ gboolean success;
+
+ success = get_software_categories (connection, terms, offset, limit, or_operator);
+ g_object_unref (connection);
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+
if (terms) {
gboolean success;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]