Hi there,

Here's a patch that adds argument-handling to tracker-search-tool.

Might come in handy for instance to add an extra action to deskbar. "Search my Tracker"

Enjoy!

Regards
/ Ulrik
? src/tracker-search-tool/.deps
? src/tracker-search-tool/.libs
? src/tracker-search-tool/Makefile
? src/tracker-search-tool/Makefile.in
? src/tracker-search-tool/tracker-search-tool
Index: src/tracker-search-tool/tracker-search-tool.c
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-search-tool/tracker-search-tool.c,v
retrieving revision 1.4
diff -u -r1.4 tracker-search-tool.c
--- src/tracker-search-tool/tracker-search-tool.c	23 Oct 2006 00:15:36 -0000	1.4
+++ src/tracker-search-tool/tracker-search-tool.c	27 Oct 2006 16:51:06 -0000
@@ -61,6 +61,15 @@
 static GObjectClass * parent_class;
 static TrackerClient *tracker_client;
 
+static gchar **terms = NULL;
+static gchar *service = NULL;
+
+static GOptionEntry options[] = {
+	{"service", 's', 0, G_OPTION_ARG_STRING, &service, "search from a specific service", "service"},
+	{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &terms, "search terms", NULL},
+	{NULL}
+};
+
 typedef enum {
 	SEARCH_CONSTRAINT_TYPE_BOOLEAN,
 	SEARCH_CONSTRAINT_TYPE_NUMERIC,
@@ -2245,16 +2254,47 @@
 	g_free (click_to_activate_pref);
 }
 
+static gboolean tracker_search_select_service_type_by_string(GtkComboBox *combo, gchar *service)
+{
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	gchar *current_value;
+	
+	model = gtk_combo_box_get_model(combo);
+	if (!gtk_tree_model_get_iter_first(model, &iter))
+		return FALSE;
+
+	do {
+		gtk_tree_model_get(model, &iter, 1, &current_value, -1);
+		if (!strcmp(service, current_value)) {
+			gtk_combo_box_set_active_iter(combo, &iter);
+			return TRUE;
+		}
+	} while (gtk_tree_model_iter_next(model, &iter));
+
+	return FALSE;
+}
+
 int
 main (int argc,
       char * argv[])
 {
 	GSearchWindow * gsearch;
-	//GOptionContext * context;
+	GOptionContext * option_context;
+	GError *error = NULL;
 	GnomeProgram * program;
 	GnomeClient * client;
 	GtkWidget * window;
+	gchar * search_string;
+
+	option_context = g_option_context_new ("tracker-search-tool");
+	g_option_context_add_main_entries (option_context, options, NULL);
 
+	if (error) {
+		g_printerr ("invalid arguments: %s\n", error->message);
+		return 1;
+	}
+	
 	bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
 	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 	textdomain (GETTEXT_PACKAGE);
@@ -2264,7 +2304,8 @@
 	                              LIBGNOMEUI_MODULE,
 	                              argc, argv,
 	                              GNOME_PARAM_APP_DATADIR, DATADIR,
-	                              NULL);
+	                              GNOME_PARAM_GOPTION_CONTEXT, option_context,
+	                              GNOME_PARAM_NONE);
 
 	g_set_application_name (_("Desktop Search"));
 	gtk_window_set_default_icon_name (TRACKER_SEARCH_TOOL_ICON);
@@ -2305,6 +2346,18 @@
 
 	add_no_files_found_message (gsearch);
 
+	if (service && !(tracker_search_select_service_type_by_string(GTK_COMBO_BOX (gsearch->combo), service))) {
+		g_printerr ("invalid service type: %s\n", service);
+		return 1;
+	}
+
+	if (terms) {
+		search_string = g_strjoinv(" ", terms);
+		gtk_entry_set_text(GTK_ENTRY(gsearch->search_entry), search_string);
+		g_free(search_string);
+		gtk_button_clicked(GTK_BUTTON(gsearch->find_button));
+	}
+	
 	gtk_main ();
 	return 0;
 }
_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to