summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--ChangeLog5
-rw-r--r--src/tracker-preferences/Makefile.am4
-rw-r--r--src/tracker-preferences/tracker-preferences-private.h3
-rw-r--r--src/tracker-preferences/tracker-preferences.c204
-rw-r--r--src/trackerd/tracker-dbus-methods.c2
6 files changed, 198 insertions, 21 deletions
diff --git a/AUTHORS b/AUTHORS
index abbd80598..d12b225d7 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -29,3 +29,4 @@ John Stowers <john.stowers@gmail.com>
Neil Patel <njpatel@gmail.com>
Anders Rune Jensen <anders@iola.dk>
Michal Pryc <Michal.Pryc at Sun.Com>
+Halton Huo <Halton Huo at sun com>
diff --git a/ChangeLog b/ChangeLog
index 06bbaee5e..081888e14 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-04 Patch from Halton Huo <Halton.Huo@Sun.COM>
+
+ * Addeed shutdown and restart of trackerd to refresh config settings to tracker-preferences
+
+
2007-11-03 Jamie McCracken <jamiemcc at gnome org>
* made corruption scan active only if trackerd was not cleanly shutdown
diff --git a/src/tracker-preferences/Makefile.am b/src/tracker-preferences/Makefile.am
index 4ffd3864e..06014917d 100644
--- a/src/tracker-preferences/Makefile.am
+++ b/src/tracker-preferences/Makefile.am
@@ -22,6 +22,8 @@ INCLUDES = -DTRACKER_DATADIR=\""$(datadir)/tracker"\" \
$(GLIB_CFLAGS) \
$(GTK2_CFLAGS) \
$(LIBGLADE_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ -I$(top_srcdir)/src/libtracker \
$(NULL)
tracker_preferences_SOURCES = tracker-configuration.c \
@@ -34,6 +36,8 @@ tracker_preferences_SOURCES = tracker-configuration.c \
tracker_preferences_LDADD = $(GLIB_LIBS) \
$(GTK2_LIBS) \
$(LIBGLADE_LIBS) \
+ $(DBUS_LIBS) \
+ $(top_builddir)/src/libtracker/libtrackerclient.la \
$(NULL)
EXTRA_DIST = $(pkgdata_DATA)
diff --git a/src/tracker-preferences/tracker-preferences-private.h b/src/tracker-preferences/tracker-preferences-private.h
index 1448d71da..52ddbadd5 100644
--- a/src/tracker-preferences/tracker-preferences-private.h
+++ b/src/tracker-preferences/tracker-preferences-private.h
@@ -31,6 +31,9 @@
typedef struct _TrackerPreferencesPrivate {
GladeXML *gxml;
TrackerConfiguration *prefs;
+ DBusGConnection *connection;
+ DBusGProxy *dbus_proxy;
+ DBusGProxy *tracker_proxy;
} TrackerPreferencesPrivate;
static void
diff --git a/src/tracker-preferences/tracker-preferences.c b/src/tracker-preferences/tracker-preferences.c
index f0df821dc..b5cd2afa8 100644
--- a/src/tracker-preferences/tracker-preferences.c
+++ b/src/tracker-preferences/tracker-preferences.c
@@ -18,11 +18,17 @@
*/
#include <string.h>
+#include <glib/gi18n.h>
+#include "../trackerd/tracker-dbus.h"
+#include "../libtracker/tracker.h"
+
#include "tracker-preferences.h"
#include "tracker-preferences-private.h"
#include "tracker-preferences-dialogs.h"
static GObjectClass *parent_class = NULL;
+static gboolean flag_restart = FALSE;
+static gboolean flag_reindex = FALSE;
static void
tracker_preferences_class_init (TrackerPreferencesClass * klass)
@@ -123,6 +129,39 @@ tracker_preferences_init (GTypeInstance * instance, gpointer g_class)
g_signal_connect (widget, "clicked",
G_CALLBACK (cmdRemoveIgnorePattern_Clicked), self);
+ /* Init dbus */
+
+ GError *error = NULL;
+ g_type_init ();
+
+ priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+
+ if (priv->connection == NULL) {
+ g_warning("Unable to connect to dbus: %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ priv->dbus_proxy = dbus_g_proxy_new_for_name (priv->connection,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+
+ if (!priv->dbus_proxy) {
+ g_warning ("could not create proxy");
+ return;
+ }
+
+ priv->tracker_proxy = dbus_g_proxy_new_for_name (priv->connection,
+ TRACKER_SERVICE,
+ TRACKER_OBJECT,
+ TRACKER_INTERFACE);
+
+ if (!priv->tracker_proxy) {
+ g_warning ("could not create proxy");
+ return;
+ }
+
/* setup pages */
setup_page_general (self);
setup_page_files (self);
@@ -404,6 +443,44 @@ cmdHelp_Clicked (GtkWidget * widget, gpointer data)
}
static void
+name_owner_changed (DBusGProxy *proxy, const gchar *name,
+ const gchar *prev_owner, const gchar *new_owner,
+ gpointer data)
+{
+ if (!g_str_equal (name, TRACKER_SERVICE))
+ return;
+
+ if (g_str_equal (new_owner, "")) {
+ /* tracker has exited */
+ const gchar *command = "trackerd";
+
+ if (!g_spawn_command_line_async (command, NULL))
+ g_warning ("Unable to execute command: %s", command);
+ gtk_main_quit ();
+ }
+}
+
+static gboolean
+if_trackerd_start (TrackerPreferencesPrivate *priv)
+{
+ gchar *status = NULL;
+ TrackerClient *client = NULL;
+
+ client = tracker_connect (FALSE);
+
+ if (!client)
+ return FALSE;
+
+ status = tracker_get_status (client, NULL);
+ tracker_disconnect (client);
+
+ if (strcmp (status, "Shutdown") == 0)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void
cmdClose_Clicked (GtkWidget * widget, gpointer data)
{
TrackerPreferences *self = TRACKER_PREFERENCES (data);
@@ -414,30 +491,46 @@ cmdClose_Clicked (GtkWidget * widget, gpointer data)
GSList *list = NULL;
gboolean value = FALSE;
- gint ivalue;
+ gboolean value_old = FALSE;
+ gint ivalue, ivalue_old;
+ char *str_value;
/* save general settings */
- widget = glade_xml_get_widget (priv->gxml, "spnInitialSleep");
- gint sleep = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(widget));
- tracker_configuration_set_int (configuration,"/General/InitialSleep", sleep);
+ widget = glade_xml_get_widget (priv->gxml, "spnInitialSleep");
+ value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(widget));
+ tracker_configuration_set_int (configuration,"/General/InitialSleep", value);
widget = glade_xml_get_widget (priv->gxml, "chkEnableIndexing");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ value_old = tracker_configuration_get_bool (configuration,
+ "/Indexing/EnableIndexing", NULL);
+ if (value != value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
"/Indexing/EnableIndexing", value);
widget = glade_xml_get_widget (priv->gxml, "chkEnableWatching");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ value_old = tracker_configuration_get_bool (configuration,
+ "/Watches/EnableWatching", NULL);
+ if (value != value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
"/Watches/EnableWatching", value);
widget = glade_xml_get_widget (priv->gxml, "comLanguage");
gint i = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
-
+ str_value = tracker_configuration_get_string (configuration,
+ "/Indexing/Language",
+ NULL);
if (i != -1) {
+ if (strcmp (str_value, tmap[i].lang) != 0) {
+ flag_restart = TRUE;
+ flag_reindex = TRUE;
+ }
tracker_configuration_set_string (configuration,
- "/Indexing/Language",
- tmap[i].lang);
+ "/Indexing/Language",
+ tmap[i].lang);
}
@@ -446,33 +539,50 @@ cmdClose_Clicked (GtkWidget * widget, gpointer data)
widget = glade_xml_get_widget (priv->gxml, "scaThrottle");
ivalue = gtk_range_get_value (GTK_RANGE (widget));
-
+ ivalue_old = tracker_configuration_get_int (configuration,
+ "/Indexing/Throttle",
+ NULL);
+ if (ivalue != ivalue_old)
+ flag_restart = TRUE;
tracker_configuration_set_int (configuration,
- "/Indexing/Throttle",
- ivalue);
+ "/Indexing/Throttle",
+ ivalue);
widget = glade_xml_get_widget (priv->gxml, "optReducedMemory");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-
+ value_old = tracker_configuration_get_bool (configuration,
+ "/General/LowMemoryMode",
+ NULL);
+ if (value != value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
- "/General/LowMemoryMode",
- value);
+ "/General/LowMemoryMode",
+ value);
widget = glade_xml_get_widget (priv->gxml, "spnMaxText");
ivalue = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(widget));
ivalue = ivalue * 1024;
+ ivalue_old = tracker_configuration_get_int (configuration,
+ "/Performance/MaxTextToIndex",
+ NULL);
+ if (ivalue != ivalue_old)
+ flag_restart = TRUE;
tracker_configuration_set_int (configuration,
- "/Performance/MaxTextToIndex",
- ivalue);
-
+ "/Performance/MaxTextToIndex",
+ ivalue);
widget = glade_xml_get_widget (priv->gxml, "spnMaxWords");
ivalue = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(widget));
+ ivalue_old = tracker_configuration_get_int (configuration,
+ "/Performance/MaxWordsToIndex",
+ NULL);
+ if (ivalue != ivalue_old)
+ flag_restart = TRUE;
tracker_configuration_set_int (configuration,
- "/Performance/MaxWordsToIndex",
- ivalue);
+ "/Performance/MaxWordsToIndex",
+ ivalue);
/* files settings */
@@ -480,18 +590,32 @@ cmdClose_Clicked (GtkWidget * widget, gpointer data)
widget = glade_xml_get_widget (priv->gxml, "chkIndexContents");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ value_old = tracker_configuration_get_bool (configuration,
+ "/Indexing/EnableFileContentIndexing",
+ NULL);
+ if (value != value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
"/Indexing/EnableFileContentIndexing",
value);
widget = glade_xml_get_widget (priv->gxml, "chkGenerateThumbs");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ value_old = tracker_configuration_get_bool (configuration,
+ "/Indexing/EnableThumbnails",
+ NULL);
+ if (value != value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
"/Indexing/EnableThumbnails",
- value);
+ value);
widget = glade_xml_get_widget (priv->gxml, "chkSkipMountPoints");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ value_old = tracker_configuration_get_bool (configuration,
+ "/Indexing/SkipMountPoints", NULL);
+ if (value == value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
"/Indexing/SkipMountPoints", !value);
@@ -545,13 +669,43 @@ cmdClose_Clicked (GtkWidget * widget, gpointer data)
widget = glade_xml_get_widget (priv->gxml,
"chkEnableEvolutionIndexing");
value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ value_old = tracker_configuration_get_bool (configuration,
+ "/Emails/IndexEvolutionEmails",
+ NULL);
+ if (value != value_old)
+ flag_restart = TRUE;
tracker_configuration_set_bool (configuration,
"/Emails/IndexEvolutionEmails",
value);
tracker_configuration_write (configuration);
- gtk_main_quit ();
+
+ if (flag_restart && if_trackerd_start (priv)) {
+ dbus_g_proxy_add_signal(priv->dbus_proxy,
+ "NameOwnerChanged",
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal(priv->dbus_proxy,
+ "NameOwnerChanged",
+ G_CALLBACK(name_owner_changed),
+ self,
+ NULL);
+
+ dbus_g_proxy_begin_call (priv->tracker_proxy,
+ "Shutdown",
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_BOOLEAN,
+ flag_reindex,
+ G_TYPE_INVALID);
+ } else {
+ gtk_main_quit ();
+ }
}
static void
@@ -567,6 +721,7 @@ cmdAddCrawledPath_Clicked (GtkWidget * widget, gpointer data)
append_item_to_list (self, path, "lstCrawledPaths");
g_free (path);
+ flag_restart = TRUE;
}
static void
@@ -574,6 +729,7 @@ cmdRemoveCrawledPath_Clicked (GtkWidget * widget, gpointer data)
{
TrackerPreferences *self = TRACKER_PREFERENCES (data);
remove_selection_from_list (self, "lstCrawledPaths");
+ flag_restart = TRUE;
}
static void
@@ -597,6 +753,7 @@ cmdAddIndexPath_Clicked (GtkWidget * widget, gpointer data)
append_item_to_list (self, path, "lstAdditionalPathIndexes");
g_free (path);
+ flag_restart = TRUE;
}
static void
@@ -604,6 +761,7 @@ cmdRemoveIndexPath_Clicked (GtkWidget * widget, gpointer data)
{
TrackerPreferences *self = TRACKER_PREFERENCES (data);
remove_selection_from_list (self, "lstAdditionalPathIndexes");
+ flag_restart = TRUE;
}
static void
@@ -618,6 +776,7 @@ cmdAddIndexMailbox_Clicked (GtkWidget * widget, gpointer data)
append_item_to_list (self, path, "lstAdditionalMBoxIndexes");
g_free (path);
+ flag_restart = TRUE;
}
static void
@@ -625,6 +784,7 @@ cmdRemoveIndexMailbox_Clicked (GtkWidget * widget, gpointer data)
{
TrackerPreferences *self = TRACKER_PREFERENCES (data);
remove_selection_from_list (self, "lstAdditionalMBoxIndexes");
+ flag_restart = TRUE;
}
static void
@@ -639,6 +799,7 @@ cmdAddIgnorePath_Clicked (GtkWidget * widget, gpointer data)
append_item_to_list (self, path, "lstIgnorePaths");
g_free (path);
+ flag_restart = TRUE;
}
static void
@@ -646,6 +807,7 @@ cmdRemoveIgnorePath_Clicked (GtkWidget * widget, gpointer data)
{
TrackerPreferences *self = TRACKER_PREFERENCES (data);
remove_selection_from_list (self, "lstIgnorePaths");
+ flag_restart = TRUE;
}
static void
@@ -659,6 +821,7 @@ cmdAddIgnorePattern_Clicked (GtkWidget * widget, gpointer data)
return;
append_item_to_list (self, pattern, "lstIgnoreFilePatterns");
+ flag_restart = TRUE;
}
static void
@@ -666,6 +829,7 @@ cmdRemoveIgnorePattern_Clicked (GtkWidget * widget, gpointer data)
{
TrackerPreferences *self = TRACKER_PREFERENCES (data);
remove_selection_from_list (self, "lstIgnoreFilePatterns");
+ flag_restart = TRUE;
}
static void
diff --git a/src/trackerd/tracker-dbus-methods.c b/src/trackerd/tracker-dbus-methods.c
index 7c4cdb56a..0a524e198 100644
--- a/src/trackerd/tracker-dbus-methods.c
+++ b/src/trackerd/tracker-dbus-methods.c
@@ -555,7 +555,7 @@ tracker_dbus_method_shutdown (DBusRec *rec)
*/
- if (!dbus_message_get_args (rec->message, NULL, DBUS_TYPE_INT32, &reindex, DBUS_TYPE_INVALID)) {
+ if (!dbus_message_get_args (rec->message, NULL, DBUS_TYPE_BOOLEAN, &reindex, DBUS_TYPE_INVALID)) {
tracker_set_error (rec, "DBusError: %s;%s", dbus_error.name, dbus_error.message);
dbus_error_free (&dbus_error);
return;