[tracker/firefox] tracker-search: Add support for -b, --bookmarks



commit 069fa0583b2f09305fb1877a045f0dda53cd941c
Author: Martyn Russell <martyn lanedo com>
Date:   Thu Jul 28 17:00:42 2011 +0100

    tracker-search: Add support for -b, --bookmarks

 docs/manpages/tracker-search.1     |   16 ++++++
 src/tracker-utils/tracker-search.c |   97 ++++++++++++++++++++++++++++++++++++
 2 files changed, 113 insertions(+), 0 deletions(-)
---
diff --git a/docs/manpages/tracker-search.1 b/docs/manpages/tracker-search.1
index 2c29871..72f0bbb 100644
--- a/docs/manpages/tracker-search.1
+++ b/docs/manpages/tracker-search.1
@@ -79,6 +79,22 @@ of subjects for emails found.
 Search for contacts matching \fIEXPRESSION\fR (optional). Returns a list
 of names and email addresses found.
 .TP
+.B \-\-software=EXPRESSION
+Search for software installed matching \fIEXPRESSION\fR (optional). Returns a list
+of desktop files and application titles found.
+.TP
+.B \-\-software-categories=EXPRESSION
+Search for software categories matching \fIEXPRESSION\fR (optional). Returns a list
+of urns and their categories (e.g. Settings, Video, Utility, etc).
+.TP
+.B \-\-feeds=EXPRESSION
+Search through RSS feed information matching \fIEXPRESSION\fR (optional). Returns a list
+of those found.
+.TP
+.B \-b, \-\-bookmarks=EXPRESSION
+Search through bookmarks matching \fIEXPRESSION\fR (optional). Returns a list
+titles and links for each bookmark found.
+.TP
 .B \-V, \-\-version
 Print version.
 
diff --git a/src/tracker-utils/tracker-search.c b/src/tracker-utils/tracker-search.c
index 8434f4d..25b5e58 100644
--- a/src/tracker-utils/tracker-search.c
+++ b/src/tracker-utils/tracker-search.c
@@ -60,6 +60,7 @@ static gboolean contacts;
 static gboolean feeds;
 static gboolean software;
 static gboolean software_categories;
+static gboolean bookmarks;
 static gboolean print_version;
 
 static GOptionEntry entries[] = {
@@ -135,6 +136,10 @@ static GOptionEntry entries[] = {
 	  N_("Search for feeds (--all has no effect on this)"),
 	  NULL
 	},
+	{ "bookmarks", 'b', 0, G_OPTION_ARG_NONE, &bookmarks,
+	  N_("Search for bookmarks (--all has no effect on this)"),
+	  NULL
+	},
 	{ "version", 'V', 0, G_OPTION_ARG_NONE, &print_version,
 	  N_("Print version"),
 	  NULL
@@ -845,6 +850,88 @@ get_music_albums (TrackerSparqlConnection *connection,
 }
 
 static gboolean
+get_bookmarks (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 nie:title(?urn) nie:url(?bookmark) "
+		                         "WHERE {"
+		                         "  ?urn a nfo:Bookmark ;"
+		                         "       nfo:bookmarks ?bookmark ."
+		                         "  ?urn fts:match \"%s\" . "
+		                         "} "
+		                         "ORDER BY ASC(nie:title(?urn)) "
+		                         "OFFSET %d "
+		                         "LIMIT %d",
+		                         fts,
+		                         search_offset,
+		                         search_limit);
+	} else {
+		query = g_strdup_printf ("SELECT nie:title(?urn) nie:url(?bookmark) "
+		                         "WHERE {"
+		                         "  ?urn a nfo:Bookmark ;"
+		                         "       nfo:bookmarks ?bookmark ."
+		                         "} "
+		                         "ORDER BY ASC(nie:title(?urn)) "
+		                         "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 bookmarks were found"));
+	} else {
+		gint count = 0;
+
+		g_print ("%s:\n", _("Bookmarks"));
+
+		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_feeds (TrackerSparqlConnection *connection,
            GStrv                    search_terms,
            gint                     search_offset,
@@ -1352,6 +1439,7 @@ main (int argc, char **argv)
 	}
 
 	if (!music_albums && !music_artists && !music_files &&
+	    !bookmarks &&
 	    !feeds &&
 	    !software &&
 	    !software_categories &&
@@ -1565,6 +1653,15 @@ main (int argc, char **argv)
 		return success ? EXIT_SUCCESS : EXIT_FAILURE;
 	}
 
+	if (bookmarks) {
+		gboolean success;
+
+		success = get_bookmarks (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]