[tracker] tracker-search: New --software and --software-categories options



commit 76e169b5a066c890d168a3cd6a59a519a571a249
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]