tracker r1250 - in trunk: . src/libtracker-common src/trackerd



Author: carlosg
Date: Mon Apr  7 18:48:26 2008
New Revision: 1250
URL: http://svn.gnome.org/viewvc/tracker?rev=1250&view=rev

Log:
2008-04-07  Carlos Garnacho  <carlos imendio com>

        Make Mail indexing modular. Bug #526761.

        * src/libtracker-common/tracker-config.[ch]: Add a string
        configuration parameter instead of a boolean value for each mail
        client.

        * src/trackerd/Makefile.am: Build mail client dependent code in
        separate modules

        * src/trackerd/tracker-email-evolution.c:
        * src/trackerd/tracker-email-kmail.c:
        * src/trackerd/tracker-email-thunderbird.c: Modified to run as a
        module.

        * src/trackerd/tracker-email-evolution.h:
        * src/trackerd/tracker-email-kmail.h:
        * src/trackerd/tracker-email-thunderbird.h: Removed, no longer
        necessary. The three modules share now the same public interface,
        and these are called through GModule.

        * src/trackerd/tracker-email.[ch]: Use GModule to load the selected
        mail client code and call the module methods.

        * src/trackerd/tracker-email-utils.c:
        * src/trackerd/tracker-process-files.c:
        * src/trackerd/trackerd.c:
        * src/trackerd/tracker-dbus-methods: Change to work with modular mail
        indexing.


Removed:
   trunk/src/trackerd/tracker-email-evolution.h
   trunk/src/trackerd/tracker-email-kmail.h
   trunk/src/trackerd/tracker-email-thunderbird.h
Modified:
   trunk/ChangeLog
   trunk/src/libtracker-common/tracker-config.c
   trunk/src/libtracker-common/tracker-config.h
   trunk/src/trackerd/Makefile.am
   trunk/src/trackerd/tracker-dbus-methods.c
   trunk/src/trackerd/tracker-email-evolution.c
   trunk/src/trackerd/tracker-email-kmail.c
   trunk/src/trackerd/tracker-email-thunderbird.c
   trunk/src/trackerd/tracker-email-utils.c
   trunk/src/trackerd/tracker-email.c
   trunk/src/trackerd/tracker-email.h
   trunk/src/trackerd/tracker-process-files.c
   trunk/src/trackerd/trackerd.c

Modified: trunk/src/libtracker-common/tracker-config.c
==============================================================================
--- trunk/src/libtracker-common/tracker-config.c	(original)
+++ trunk/src/libtracker-common/tracker-config.c	Mon Apr  7 18:48:26 2008
@@ -61,9 +61,7 @@
 #define KEY_LOW_DISK_SPACE_LIMIT		 "LowDiskSpaceLimit"
 
 #define GROUP_EMAILS				 "Emails"
-#define KEY_INDEX_EVOLUTION_EMAILS		 "IndexEvolutionEmails"
-#define KEY_INDEX_KMAIL_EMAILS			 "IndexKMailEmails"
-#define KEY_INDEX_THUNDERBIRD_EMAILS		 "IndexThunderbirdEmails"
+#define KEY_EMAIL_CLIENT                         "IndexEMailClient"
 
 #define GROUP_PERFORMANCE			 "Performance"
 #define KEY_MAX_TEXT_TO_INDEX			 "MaxTextToIndex"
@@ -92,9 +90,7 @@
 #define DEFAULT_SKIP_MOUNT_POINTS		 FALSE
 #define DEFAULT_DISABLE_INDEXING_ON_BATTERY	 TRUE
 #define DEFAULT_DISABLE_INDEXING_ON_BATTERY_INIT FALSE
-#define DEFAULT_INDEX_EVOLUTION_EMAILS		 TRUE
-#define DEFAULT_INDEX_KMAIL_EMAILS		 TRUE
-#define DEFAULT_INDEX_THUNDERBIRD_EMAILS	 TRUE
+#define DEFAULT_INDEX_EMAIL_CLIENT               "evolution"
 #define DEFAULT_LOW_DISK_SPACE_LIMIT		 1	  /* 0->100 / -1 */
 #define DEFAULT_MAX_TEXT_TO_INDEX		 1048576  /* Bytes */
 #define DEFAULT_MAX_WORDS_TO_INDEX		 10000
@@ -138,9 +134,7 @@
 	gint	  low_disk_space_limit;
 
 	/* Emails */
-	gboolean  index_evolution_emails;
-	gboolean  index_kmail_emails;
-	gboolean  index_thunderbird_emails;
+	gchar    *email_client;
 
 	/* Performance */
 	gint	  max_text_to_index;
@@ -196,9 +190,7 @@
 	PROP_LOW_DISK_SPACE_LIMIT,
 
 	/* Emails */
-	PROP_INDEX_EVOLUTION_EMAILS,
-	PROP_INDEX_KMAIL_EMAILS,
-	PROP_INDEX_THUNDERBIRD_EMAILS,
+	PROP_EMAIL_CLIENT,
 
 	/* Performance */
 	PROP_MAX_TEXT_TO_INDEX,
@@ -401,27 +393,13 @@
 							   G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
 	/* Emails */
-	g_object_class_install_property (object_class,
-					 PROP_INDEX_EVOLUTION_EMAILS,
-					 g_param_spec_boolean ("index-evolution-emails",
-							       "Index evolution emails",
-							       "Index evolution emails",
-							       DEFAULT_INDEX_EVOLUTION_EMAILS,
-							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-	g_object_class_install_property (object_class,
-					 PROP_INDEX_KMAIL_EMAILS,
-					 g_param_spec_boolean ("index-kmail-emails",
-							       "Index kmail emails",
-							       "Index kmail emails",
-							       DEFAULT_INDEX_KMAIL_EMAILS,
-							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-	g_object_class_install_property (object_class,
-					 PROP_INDEX_THUNDERBIRD_EMAILS,
-					 g_param_spec_boolean ("index-thunderbird-emails",
-							       "Index thunderbird emails",
-							       "Index thunderbird emails",
-							       DEFAULT_INDEX_THUNDERBIRD_EMAILS,
-							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+        g_object_class_install_property (object_class,
+					 PROP_EMAIL_CLIENT,
+					 g_param_spec_string ("email-client",
+							      "Email client",
+							      "Email client to index",
+							      DEFAULT_INDEX_EMAIL_CLIENT,
+							      G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
 	/* Performance */
 	g_object_class_install_property (object_class,
@@ -614,14 +592,8 @@
 		break;
 
 		/* Emails */
-	case PROP_INDEX_EVOLUTION_EMAILS:
-		g_value_set_boolean (value, priv->index_evolution_emails);
-		break;
-	case PROP_INDEX_KMAIL_EMAILS:
-		g_value_set_boolean (value, priv->index_kmail_emails);
-		break;
-	case PROP_INDEX_THUNDERBIRD_EMAILS:
-		g_value_set_boolean (value, priv->index_thunderbird_emails);
+	case PROP_EMAIL_CLIENT:
+		g_value_set_string (value, priv->email_client);
 		break;
 
 		/* Performance */
@@ -750,17 +722,9 @@
 		break;
 
 		/* Emails */
-	case PROP_INDEX_EVOLUTION_EMAILS:
-		tracker_config_set_index_evolution_emails (TRACKER_CONFIG (object),
-							   g_value_get_boolean (value));
-		break;
-	case PROP_INDEX_KMAIL_EMAILS:
-		tracker_config_set_index_kmail_emails (TRACKER_CONFIG (object),
-						       g_value_get_boolean (value));
-		break;
-	case PROP_INDEX_THUNDERBIRD_EMAILS:
-		tracker_config_set_index_thunderbird_emails (TRACKER_CONFIG (object),
-							     g_value_get_boolean (value));
+	case PROP_EMAIL_CLIENT:
+		tracker_config_set_email_client (TRACKER_CONFIG (object),
+						 g_value_get_string (value));
 		break;
 
 		/* Performance */
@@ -1068,9 +1032,7 @@
 				NULL);
 
 	/* Emails */
-	g_key_file_set_boolean (key_file, GROUP_EMAILS, KEY_INDEX_EVOLUTION_EMAILS, DEFAULT_INDEX_EVOLUTION_EMAILS);
-	g_key_file_set_boolean (key_file, GROUP_EMAILS, KEY_INDEX_KMAIL_EMAILS, DEFAULT_INDEX_KMAIL_EMAILS);
-	g_key_file_set_boolean (key_file, GROUP_EMAILS, KEY_INDEX_THUNDERBIRD_EMAILS, DEFAULT_INDEX_THUNDERBIRD_EMAILS);
+	g_key_file_set_string  (key_file, GROUP_EMAILS, KEY_EMAIL_CLIENT, DEFAULT_INDEX_EMAIL_CLIENT);
 
 	/* Performance */
 	g_key_file_set_integer (key_file, GROUP_PERFORMANCE, KEY_MAX_TEXT_TO_INDEX, DEFAULT_MAX_TEXT_TO_INDEX);
@@ -1334,9 +1296,7 @@
 	config_load_int (config, "low-disk-space-limit", key_file, GROUP_INDEXING, KEY_LOW_DISK_SPACE_LIMIT);
 
 	/* Emails */
-	config_load_boolean (config, "index-evolution-emails", key_file, GROUP_EMAILS, KEY_INDEX_EVOLUTION_EMAILS);
-	config_load_boolean (config, "index-kmail-emails", key_file, GROUP_EMAILS, KEY_INDEX_KMAIL_EMAILS);
-	config_load_boolean (config, "index-thunderbird-emails", key_file, GROUP_EMAILS, KEY_INDEX_THUNDERBIRD_EMAILS);
+	config_load_string (config, "email-client", key_file, GROUP_EMAILS, KEY_EMAIL_CLIENT);
 
 	/* Performance */
 	config_load_int (config, "max-text-to-index", key_file, GROUP_PERFORMANCE, KEY_MAX_TEXT_TO_INDEX);
@@ -1639,40 +1599,16 @@
 	return priv->low_disk_space_limit;
 }
 
-gboolean
-tracker_config_get_index_evolution_emails (TrackerConfig *config)
-{
-	TrackerConfigPriv *priv;
-
-	g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_INDEX_EVOLUTION_EMAILS);
-
-	priv = GET_PRIV (config);
-
-	return priv->index_evolution_emails;
-}
-
-gboolean
-tracker_config_get_index_kmail_emails (TrackerConfig *config)
-{
-	TrackerConfigPriv *priv;
-
-	g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_INDEX_KMAIL_EMAILS);
-
-	priv = GET_PRIV (config);
-
-	return priv->index_kmail_emails;
-}
-
-gboolean
-tracker_config_get_index_thunderbird_emails (TrackerConfig *config)
+const gchar *
+tracker_config_get_email_client (TrackerConfig *config)
 {
 	TrackerConfigPriv *priv;
 
-	g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_INDEX_THUNDERBIRD_EMAILS);
+	g_return_val_if_fail (TRACKER_IS_CONFIG (config), DEFAULT_INDEX_EMAIL_CLIENT);
 
 	priv = GET_PRIV (config);
 
-	return priv->index_thunderbird_emails;
+	return priv->email_client;
 }
 
 gint
@@ -2059,45 +1995,24 @@
 }
 
 void
-tracker_config_set_index_evolution_emails (TrackerConfig *config,
-					   gboolean	  value)
-{
-	TrackerConfigPriv *priv;
-
-	g_return_if_fail (TRACKER_IS_CONFIG (config));
-
-	priv = GET_PRIV (config);
-
-	priv->index_evolution_emails = value;
-	g_object_notify (G_OBJECT (config), "index-evolution-emails");
-}
-
-void
-tracker_config_set_index_kmail_emails (TrackerConfig *config,
-				       gboolean	      value)
+tracker_config_set_email_client (TrackerConfig *config,
+				 const gchar   *value)
 {
 	TrackerConfigPriv *priv;
+	gchar *email_client;
 
 	g_return_if_fail (TRACKER_IS_CONFIG (config));
 
 	priv = GET_PRIV (config);
 
-	priv->index_kmail_emails = value;
-	g_object_notify (G_OBJECT (config), "index-kmail-emails");
-}
-
-void
-tracker_config_set_index_thunderbird_emails (TrackerConfig *config,
-					     gboolean	    value)
-{
-	TrackerConfigPriv *priv;
-
-	g_return_if_fail (TRACKER_IS_CONFIG (config));
+	email_client = g_strdup (value);
 
-	priv = GET_PRIV (config);
+	if (priv->email_client) {
+		g_free (priv->email_client);
+	}
 
-	priv->index_thunderbird_emails = value;
-	g_object_notify (G_OBJECT (config), "index-thunderbird-emails");
+	priv->email_client = email_client;
+	g_object_notify (G_OBJECT (config), "email-client");
 }
 
 void

Modified: trunk/src/libtracker-common/tracker-config.h
==============================================================================
--- trunk/src/libtracker-common/tracker-config.h	(original)
+++ trunk/src/libtracker-common/tracker-config.h	Mon Apr  7 18:48:26 2008
@@ -72,9 +72,7 @@
 gboolean       tracker_config_get_disable_indexing_on_battery      (TrackerConfig *config);
 gboolean       tracker_config_get_disable_indexing_on_battery_init (TrackerConfig *config);
 gint           tracker_config_get_low_disk_space_limit             (TrackerConfig *config);
-gboolean       tracker_config_get_index_evolution_emails           (TrackerConfig *config);
-gboolean       tracker_config_get_index_kmail_emails               (TrackerConfig *config);
-gboolean       tracker_config_get_index_thunderbird_emails         (TrackerConfig *config);
+const gchar *  tracker_config_get_email_client                     (TrackerConfig *config);
 gint           tracker_config_get_max_text_to_index                (TrackerConfig *config);
 gint           tracker_config_get_max_words_to_index               (TrackerConfig *config);
 gint           tracker_config_get_optimization_sweep_count         (TrackerConfig *config);
@@ -118,12 +116,8 @@
 								    gboolean       value);
 void           tracker_config_set_low_disk_space_limit             (TrackerConfig *config,
 								    gint           value);
-void           tracker_config_set_index_evolution_emails           (TrackerConfig *config,
-								    gboolean       value);
-void           tracker_config_set_index_kmail_emails               (TrackerConfig *config,
-								    gboolean       value);
-void           tracker_config_set_index_thunderbird_emails         (TrackerConfig *config,
-								    gboolean       value);
+void           tracker_config_set_email_client                     (TrackerConfig *config,
+								    const gchar   *value);
 void           tracker_config_set_max_text_to_index                (TrackerConfig *config,
 								    gint           value);
 void           tracker_config_set_max_words_to_index               (TrackerConfig *config,

Modified: trunk/src/trackerd/Makefile.am
==============================================================================
--- trunk/src/trackerd/Makefile.am	(original)
+++ trunk/src/trackerd/Makefile.am	Mon Apr  7 18:48:26 2008
@@ -1,8 +1,12 @@
+module_flags = -module -avoid-version -no-undefined
+mail_modulesdir = $(libdir)/tracker/mail-modules
+
 INCLUDES =								\
 	-DSHAREDIR=\""$(datadir)"\"					\
 	-DLIBDIR=\""$(libdir)"\"					\
 	-DLOCALEDIR=\""$(localedir)"\" 					\
 	$(GLIB2_CFLAGS)							\
+	$(GMODULE_CFLAGS)						\
 	$(PANGO_CFLAGS)							\
 	$(GMIME_CFLAGS)							\
 	$(HAL_CFLAGS)							\
@@ -11,6 +15,7 @@
 	$(SQLITE3_CFLAGS)						\
 	$(QDBM_CFLAGS)							\
 	$(UNAC_CFLAGS)							\
+	-DMAIL_MODULES_DIR=\"$(mail_modulesdir)\"			\
 	-I$(top_srcdir)/src
 
 if HAVE_INOTIFY
@@ -76,12 +81,6 @@
 	tracker-email.h							\
 	tracker-email-utils.c						\
 	tracker-email-utils.h						\
-	tracker-email-evolution.c					\
-	tracker-email-evolution.h					\
-	tracker-email-thunderbird.c					\
-	tracker-email-thunderbird.h					\
-	tracker-email-kmail.c						\
-	tracker-email-kmail.h						\
 	tracker-metadata.c						\
 	tracker-metadata.h						\
 	tracker-process-files.c						\
@@ -103,6 +102,7 @@
 
 trackerd_LDADD =							\
 	$(GLIB2_LIBS)							\
+	$(GMODULE_LIBS)							\
 	$(FAM_LIBS)							\
 	$(DBUS_LIBS)							\
 	$(PANGO_LIBS)							\
@@ -118,3 +118,20 @@
 	$(top_builddir)/src/libstemmer/libstemmer-private.la 		\
 	$(top_builddir)/src/xdgmime/libxdgmime.la 			\
 	$(trackerd_win_libs)
+
+mail_modules_LTLIBRARIES = \
+	libemail-evolution.la \
+	libemail-thunderbird.la \
+	libemail-kmail.la
+
+libemail_evolution_la_SOURCES = tracker-email-evolution.c
+libemail_evolution_la_LDFLAGS = $(module_flags)
+libemail_evolution_la_LIBADD = $(GLIB2_LIBS)
+
+libemail_thunderbird_la_SOURCES = tracker-email-thunderbird.c
+libemail_thunderbird_la_LDFLAGS = $(module_flags)
+libemail_thunderbird_la_LIBADD = $(GLIB2_LIBS)
+
+libemail_kmail_la_SOURCES = tracker-email-kmail.c
+libemail_kmail_la_LDFLAGS = $(module_flags)
+libemail_kmail_la_LIBADD = $(GLIB2_LIBS)

Modified: trunk/src/trackerd/tracker-dbus-methods.c
==============================================================================
--- trunk/src/trackerd/tracker-dbus-methods.c	(original)
+++ trunk/src/trackerd/tracker-dbus-methods.c	Mon Apr  7 18:48:26 2008
@@ -459,7 +459,7 @@
 
 	dbus_error_init (&dbus_error);
 
-	/*	<!-- sets boolean options in tracker - option can be one of "Pause", "EnableIndexing", "LowMemoryMode", "IndexFileContents", "EnableEvolution" -->
+	/*	<!-- sets boolean options in tracker - option can be one of "Pause", "EnableIndexing", "LowMemoryMode", "IndexFileContents" -->
 		<method name="SetBoolOption">
 			<arg type="s" name="option" direction="in" />
 			<arg type="b" name="value" direction="in" />
@@ -506,9 +506,6 @@
 	} else if (strcasecmp (option, "SkipMountPoints") == 0) {
                 tracker_config_set_skip_mount_points (tracker->config, value);
 		tracker_log ("Skip mounted directories set to %d", value);
-	} else if (strcasecmp (option, "EnableEvolution") == 0) {
-                tracker_config_set_index_evolution_emails (tracker->config, value);
-		tracker_log ("evolution support set to %d", value);
 	} else if (strcasecmp (option, "BatteryIndex") == 0) {
                 tracker_config_set_disable_indexing_on_battery (tracker->config, !value);
 		tracker_log ("Disable index on battery set to %d", !value);

Modified: trunk/src/trackerd/tracker-email-evolution.c
==============================================================================
--- trunk/src/trackerd/tracker-email-evolution.c	(original)
+++ trunk/src/trackerd/tracker-email-evolution.c	Mon Apr  7 18:48:26 2008
@@ -34,7 +34,6 @@
 #include <libtracker-common/tracker-log.h>
 #include <libtracker-common/tracker-config.h>
 
-#include "tracker-email-evolution.h"
 #include "tracker-email-utils.h"
 #include "tracker-db-email.h"
 #include "tracker-cache.h"
@@ -218,13 +217,18 @@
 static gchar * g_unescape_uri_string (const gchar *escaped, const gchar *illegal_characters);
 static void  check_summary_file (DBConnection *db_con, const gchar *filename, MailStore *store);
 
+static gboolean
+evolution_module_is_running (void)
+{
+	return evolution_config != NULL;
+}
 
 /********************************************************************************************
  Public functions
 *********************************************************************************************/
 
 gboolean
-evolution_init_module (void)
+tracker_email_init (void)
 {
 	EvolutionConfig *conf;
 
@@ -243,14 +247,7 @@
 
 
 gboolean
-evolution_module_is_running (void)
-{
-	return evolution_config != NULL;
-}
-
-
-gboolean
-evolution_finalize_module (void)
+tracker_email_finalize (void)
 {
 	if (!evolution_config) {
 		return TRUE;
@@ -264,11 +261,19 @@
 
 
 void
-evolution_watch_emails (DBConnection *db_con)
+tracker_email_watch_emails (DBConnection *db_con)
 {
 	gchar ***res, **row;
 	gint  j;
 
+	/* if initial indexing has not finished reset mtime on all email stuff so they are rechecked */
+	if (tracker_db_get_option_int (db_con->common, "InitialIndex") == 1) {
+		char *sql = g_strdup_printf ("update Services set mtime = 0 where path like '%s/.evolution/%s'", g_get_home_dir (), "%");
+
+		tracker_exec_sql (db_con, sql);
+		g_free (sql);
+	}
+
 	/* check all registered mbox/paths for deletions */
 	res = tracker_db_email_get_mboxes (db_con);
 
@@ -296,8 +301,8 @@
 }
 
 
-gboolean
-evolution_file_is_interesting (FileInfo *info, const gchar *service)
+static gboolean
+evolution_file_is_interesting (FileInfo *info)
 {
 	GSList *dir;
 
@@ -352,13 +357,16 @@
 }
 
 
-void
-evolution_index_file (DBConnection *db_con, FileInfo *info)
+gboolean
+tracker_email_index_file (DBConnection *db_con, FileInfo *info)
 {
 	gchar *file_name;
 
-	g_return_if_fail (db_con);
-	g_return_if_fail (info);
+	g_return_val_if_fail (db_con, FALSE);
+	g_return_val_if_fail (info, FALSE);
+
+	if (!evolution_file_is_interesting (info))
+		return FALSE;
 
 	file_name = g_path_get_basename (info->uri);
 
@@ -512,9 +520,15 @@
 
  end_index:
 	g_free (file_name);
-}
 
+	return TRUE;
+}
 
+const gchar *
+tracker_email_get_name (void)
+{
+	return "EvolutionEmails";
+}
 
 
 /********************************************************************************************

Modified: trunk/src/trackerd/tracker-email-kmail.c
==============================================================================
--- trunk/src/trackerd/tracker-email-kmail.c	(original)
+++ trunk/src/trackerd/tracker-email-kmail.c	Mon Apr  7 18:48:26 2008
@@ -27,7 +27,6 @@
 
 #include <libtracker-common/tracker-log.h>
 
-#include "tracker-email-kmail.h"
 #include "tracker-email-utils.h"
 #include "tracker-db-email.h"
 #include "tracker-watch.h"
@@ -90,6 +89,11 @@
 
 
 
+static gboolean
+kmail_module_is_running (void)
+{
+        return kmail_config != NULL;
+}
 
 /********************************************************************************************
  Public functions
@@ -115,14 +119,7 @@
 
 
 gboolean
-kmail_module_is_running (void)
-{
-        return kmail_config != NULL;
-}
-
-
-gboolean
-kmail_finalize_module (void)
+tracker_email_finalize (void)
 {
         if (!kmail_config) {
                 return TRUE;
@@ -136,7 +133,7 @@
 
 
 void
-kmail_watch_emails (DBConnection *db_con)
+tracker_email_watch_emails (DBConnection *db_con)
 {
         g_return_if_fail (kmail_config);
 
@@ -156,8 +153,8 @@
 }
 
 
-gboolean
-kmail_file_is_interesting (FileInfo *info, const gchar *service)
+static gboolean
+kmail_file_is_interesting (FileInfo *info)
 {
         const GSList *account;
 
@@ -182,13 +179,16 @@
 }
 
 
-void
-kmail_index_file (DBConnection *db_con, FileInfo *info)
+gboolean
+tracker_email_index_file (DBConnection *db_con, FileInfo *info)
 {
         KMailMailProtocol mail_protocol;
 
-        g_return_if_fail (db_con);
-        g_return_if_fail (info);
+        g_return_val_if_fail (db_con, FALSE);
+        g_return_val_if_fail (info, FALSE);
+
+	if (!kmail_file_is_interesting (info))
+		return FALSE;
 
         mail_protocol = find_mail_protocol (info->uri);
 
@@ -229,7 +229,7 @@
                                 MailStore *store = tracker_db_email_get_mbox_details (db_con, info->uri);
                                 if (!store) {
                                         tracker_error ("ERROR: could not retrieve store for file %s", info->uri);
-                                        return;
+                                        return FALSE;
                                 }
 
                                 if (mail_protocol == KMAIL_MAIL_PROTOCOL_MBOX) {
@@ -259,9 +259,15 @@
                         break;
                 }
         }
-}
 
+	return TRUE;
+}
 
+const gchar *
+tracker_email_get_name (void)
+{
+	return "KMailEmails";
+}
 
 /********************************************************************************************
  Private functions

Modified: trunk/src/trackerd/tracker-email-thunderbird.c
==============================================================================
--- trunk/src/trackerd/tracker-email-thunderbird.c	(original)
+++ trunk/src/trackerd/tracker-email-thunderbird.c	Mon Apr  7 18:48:26 2008
@@ -27,7 +27,6 @@
 #include <libtracker-common/tracker-log.h>
 #include <libtracker-common/tracker-config.h>
 
-#include "tracker-email-thunderbird.h"
 #include "tracker-db-email.h"
 #include "tracker-watch.h"
 
@@ -85,14 +84,25 @@
 static void     free_parser_data                (gpointer user_data);
 
 
+static gboolean
+thunderbird_module_is_running (void)
+{
+	return thunderbird_mail_dir != NULL;
+}
 
+static gboolean
+thunderbird_file_is_interesting (FileInfo *info)
+{
+        //Filename should be objectX.tms (Thunderbird Message Summary)
+        return g_str_has_suffix (info->uri, ".tms") ;
+}
 
 /********************************************************************************************
  Public functions
 *********************************************************************************************/
 
 gboolean
-thunderbird_init_module (void)
+tracker_email_init (void)
 {
 	if (!thunderbird_mail_dir) {
 		thunderbird_mail_dir = g_build_filename (g_get_home_dir (), THUNDERBIRD_MAIL_DIR_S, NULL);
@@ -103,14 +113,7 @@
 
 
 gboolean
-thunderbird_module_is_running (void)
-{
-	return thunderbird_mail_dir != NULL;
-}
-
-
-gboolean
-thunderbird_finalize_module (void)
+tracker_email_finalize (void)
 {
 	if (thunderbird_mail_dir) {
 		g_free (thunderbird_mail_dir);
@@ -122,7 +125,7 @@
 
 
 void
-thunderbird_watch_emails (DBConnection *db_con)
+tracker_email_watch_emails (DBConnection *db_con)
 {
         if( thunderbird_mail_dir != NULL ) {
             tracker_log("Thunderbird directory lookup: \"%s\"", thunderbird_mail_dir);
@@ -132,27 +135,27 @@
 
 
 gboolean
-thunderbird_file_is_interesting (FileInfo *info, const gchar *service)
+tracker_email_index_file (DBConnection *db_con, FileInfo *info)
 {
-        //Filename should be objectX.tms (Thunderbird Message Summary)
-        return g_str_has_suffix (info->uri, ".tms") ;
-}
-
+	g_return_val_if_fail (db_con, FALSE);
+	g_return_val_if_fail (info, FALSE);
 
-void
-thunderbird_index_file (DBConnection *db_con, FileInfo *info)
-{
-	g_return_if_fail (db_con);
-	g_return_if_fail (info);
+	if (!thunderbird_file_is_interesting (info))
+		return FALSE;
 
         tracker_log ("Thunderbird file index: \"%s\"\n",info->uri);
         if (email_parse_mail_tms_file_and_save_new_emails (db_con, MAIL_APP_THUNDERBIRD, info->uri)) {
                 unlink(info->uri);
         }
-}
-
 
+	return TRUE;
+}
 
+const gchar *
+tracker_email_get_name (void)
+{
+	return "ThunderbirdEmails";
+}
 
 /********************************************************************************************
  Private functions

Modified: trunk/src/trackerd/tracker-email-utils.c
==============================================================================
--- trunk/src/trackerd/tracker-email-utils.c	(original)
+++ trunk/src/trackerd/tracker-email-utils.c	Mon Apr  7 18:48:26 2008
@@ -37,9 +37,6 @@
 #include "tracker-db-email.h"
 #include "tracker-dbus.h"
 #include "tracker-email-utils.h"
-#include "tracker-email-evolution.h"
-#include "tracker-email-thunderbird.h"
-#include "tracker-email-kmail.h"
 #include "tracker-watch.h"
 
 extern Tracker *tracker;

Modified: trunk/src/trackerd/tracker-email.c
==============================================================================
--- trunk/src/trackerd/tracker-email.c	(original)
+++ trunk/src/trackerd/tracker-email.c	Mon Apr  7 18:48:26 2008
@@ -20,113 +20,123 @@
 
 #include <glib.h>
 #include <glib/gstdio.h>
+#include <gmodule.h>
 
 #include <libtracker-common/tracker-config.h>
 
 #include "tracker-email.h"
 #include "tracker-email-utils.h"
-#include "tracker-email-evolution.h"
-#include "tracker-email-thunderbird.h"
-#include "tracker-email-kmail.h"
 
 extern Tracker *tracker;
 
+static GModule *module = NULL;
+
 
 /* must be called before any work on files containing mails */
 void
 tracker_email_add_service_directories (DBConnection *db_con)
 {
+	TrackerMailWatchEmails func;
 
-	g_mime_init (0);
-
-	if (tracker_config_get_index_evolution_emails (tracker->config)) {
-		if (evolution_init_module ()) {
-			evolution_watch_emails (db_con);
-		}
-	}
+	if (!module)
+		return;
 
-	if (tracker_config_get_index_kmail_emails (tracker->config)) {
-		if (kmail_init_module ()) {
-			kmail_watch_emails (db_con);
-		}
-	}
-
-	if (tracker_config_get_index_thunderbird_emails (tracker->config)) {
-		if (thunderbird_init_module ()) {
-			thunderbird_watch_emails (db_con);
-		}
-	}
+	if (g_module_symbol (module, "tracker_email_watch_emails", (gpointer *) &func)) {
+		(func) (db_con);
+        }
 }
 
 
 void
 tracker_email_end_email_watching (void)
 {
-	//email_free_root_path_for_attachments ();
-
-	if (evolution_module_is_running ()) {
-		evolution_finalize_module ();
-	}
+	TrackerMailFinalize func;
 
-	if (kmail_module_is_running ()) {
-		kmail_finalize_module ();
-	}
+	if (!module)
+		return;
 
-	if (thunderbird_module_is_running ()) {
-		thunderbird_finalize_module ();
+	if (g_module_symbol (module, "tracker_email_finalize", (gpointer *) &func)) {
+		(func) ();
 	}
 
 	g_mime_shutdown ();
-} 
+}
 
 
 gboolean
-tracker_email_file_is_interesting (FileInfo *info, const char *service)
+tracker_email_index_file (DBConnection *db_con, FileInfo *info)
 {
+	TrackerMailIndexFile func;
+
+	g_return_val_if_fail (db_con, FALSE);
 	g_return_val_if_fail (info, FALSE);
 
-	if (g_str_has_prefix (service, "Evolution") && evolution_module_is_running ()) {
-		return evolution_file_is_interesting (info, service);
-	
-	} else if (g_str_has_prefix (service, "KMail") && kmail_module_is_running ()) {
-		return kmail_file_is_interesting (info, service);
-
-	} else if (g_str_has_prefix (service, "Thunderbird") && thunderbird_module_is_running ()) {
-		return thunderbird_file_is_interesting (info, service);
-	
-	} else {
+	if (!module)
 		return FALSE;
-	}
 
+	if (!g_module_symbol (module, "tracker_email_index_file", (gpointer *) &func))
+		return FALSE;
 
+	return (func) (db_con, info);
 }
 
-
 gboolean
-tracker_email_index_file (DBConnection *db_con, FileInfo *info, const char *service)
+tracker_email_init (void)
 {
-	gboolean has_been_handled;
+	TrackerMailInit func;
+	const gchar *email_client;
+	gchar *module_name, *module_path;
+	gboolean result = FALSE;
 
-	g_return_val_if_fail (db_con, FALSE);
-	g_return_val_if_fail (info, FALSE);
+	if (module)
+		return result;
 
-	has_been_handled = TRUE;
+	email_client = tracker_config_get_email_client (tracker->config);
 
-	if (evolution_module_is_running () && evolution_file_is_interesting (info, service)) {
-		evolution_index_file (db_con, info);
+	if (!email_client)
+		return result;
 
-	} else if (kmail_module_is_running () && kmail_file_is_interesting (info, service)) {
-		kmail_index_file (db_con, info);
+	if (!g_module_supported ()) {
+		g_error ("Modules are not supported by this platform");
+		return result;
+	}
 
-	} else if (thunderbird_module_is_running () && thunderbird_file_is_interesting (info, service)) {
-		thunderbird_index_file (db_con, info);
+	module_name = g_strdup_printf ("libemail-%s.so", email_client);
+	module_path = g_build_filename (MAIL_MODULES_DIR, module_name, NULL);
 
-	} else {
-		has_been_handled = FALSE;
+	module = g_module_open (module_path, G_MODULE_BIND_LOCAL);
+
+	if (!module) {
+		g_warning ("Could not load EMail module: %s\n", module_name);
+		g_free (module_name);
+		g_free (module_path);
+		return result;
 	}
 
-	return has_been_handled;
+	g_module_make_resident (module);
+
+	if (g_module_symbol (module, "tracker_email_init", (gpointer *) &func)) {
+		g_mime_init (0);
+
+		result = (func) ();
+	}
+
+	g_free (module_name);
+	g_free (module_path);
+
+	return result;
 }
 
+const gchar *
+tracker_email_get_name (void)
+{
+	TrackerMailGetName func;
+
+	if (!module)
+		return NULL;
 
+	if (!g_module_symbol (module, "tracker_email_get_name", (gpointer *) &func))
+		return NULL;
 
+	return (func) ();
+}

Modified: trunk/src/trackerd/tracker-email.h
==============================================================================
--- trunk/src/trackerd/tracker-email.h	(original)
+++ trunk/src/trackerd/tracker-email.h	Mon Apr  7 18:48:26 2008
@@ -27,10 +27,19 @@
 
 #include "tracker-db-sqlite.h"
 
+typedef gboolean      (* TrackerMailInit)          (void);
+typedef void          (* TrackerMailFinalize)      (void);
+typedef void          (* TrackerMailWatchEmails)   (DBConnection *db_con);
+typedef gboolean      (* TrackerMailIndexFile)     (DBConnection *db_con,
+						    FileInfo     *info);
+typedef const gchar * (* TrackerMailGetName)       (void);
+
+gboolean        tracker_email_init                      (void);
 void		tracker_email_add_service_directories	(DBConnection *db_con);
 void		tracker_email_end_email_watching	(void);
-gboolean	tracker_email_file_is_interesting	(FileInfo *info, const char *service);
-gboolean	tracker_email_index_file		(DBConnection *db_con, FileInfo *info, const char *service);
+gboolean	tracker_email_file_is_interesting	(FileInfo *info);
+gboolean	tracker_email_index_file		(DBConnection *db_con, FileInfo *info);
+const gchar *   tracker_email_get_name                  (void);
 
 
 #endif

Modified: trunk/src/trackerd/tracker-process-files.c
==============================================================================
--- trunk/src/trackerd/tracker-process-files.c	(original)
+++ trunk/src/trackerd/tracker-process-files.c	Mon Apr  7 18:48:26 2008
@@ -376,7 +376,7 @@
 
                 db_con = tracker->index_db;
 
-		if (!tracker_email_index_file (db_con, info, service_info)) {
+		if (!tracker_email_index_file (db_con, info)) {
 			g_free (service_info);
 			return;
 		}
@@ -800,9 +800,6 @@
 {
         DBConnection  *db_con;
         TrackerConfig *config;
-        gboolean       index_evolution_emails;
-        gboolean       index_kmail_emails;
-        gboolean       index_thunderbird_emails;
        
         db_con = tracker->index_db;
         config = tracker->config;
@@ -825,54 +822,21 @@
         }
         
         tracker_db_start_index_transaction (tracker->index_db);
-              
-        index_evolution_emails = tracker_config_get_index_evolution_emails (config);
-        index_kmail_emails = tracker_config_get_index_kmail_emails (config);
-        index_thunderbird_emails = tracker_config_get_index_thunderbird_emails (config);
-        
-        if (index_evolution_emails ||
-            index_kmail_emails ||
-            index_thunderbird_emails) {
+
+	if (tracker_config_get_email_client (tracker->config)) {
+		const gchar *name;
+
                 tracker_email_add_service_directories (db_con->emails);
                 tracker_log ("Starting email indexing...");
                 
                 tracker_db_start_transaction (db_con->cache);
-                
-                if (index_evolution_emails) {
-                        GSList *list;
 
-                        list = tracker_get_service_dirs ("EvolutionEmails");
-                        tracker_add_root_directories (list);
-                        process_directory_list (tracker, list, TRUE);
-                        g_slist_free (list);
-                        
-                        /* If initial indexing has not finished reset
-                         * mtime on all email stuff so they are
-                         * rechecked 
-                         */
-                        if (tracker_db_get_option_int (db_con->common, "InitialIndex") == 1) {
-                                gchar *sql;
+		name = tracker_email_get_name ();
 
-                                sql = g_strdup_printf ("update Services set mtime = 0 where path like '%s/.evolution/%%'", 
-                                                       g_get_home_dir ());
-                                tracker_exec_sql (tracker->index_db, sql);
-                                g_free (sql);
-                        }
-                }
-                
-                if (index_kmail_emails) {
-                        GSList *list;
-
-                        list = tracker_get_service_dirs ("KMailEmails");
-                        tracker_add_root_directories (list);
-                        process_directory_list (tracker, list, TRUE);
-                        g_slist_free (list);
-                }
-                
-                if (index_thunderbird_emails) {
+                if (name) {
                         GSList *list;
 
-                        list = tracker_get_service_dirs ("ThunderbirdEmails");
+                        list = tracker_get_service_dirs (name);
                         tracker_add_root_directories (list);
                         process_directory_list (tracker, list, TRUE);
                         g_slist_free (list);

Modified: trunk/src/trackerd/trackerd.c
==============================================================================
--- trunk/src/trackerd/trackerd.c	(original)
+++ trunk/src/trackerd/trackerd.c	Mon Apr  7 18:48:26 2008
@@ -118,7 +118,7 @@
 static gboolean disable_indexing = FALSE;
 static gboolean reindex = FALSE;
 static gboolean fatal_errors = FALSE;
-static gboolean low_memory, enable_evolution, enable_thunderbird, enable_kmail;
+static gboolean low_memory;
 static gint throttle = -1;
 static gint verbosity = 0;
 static gint initial_sleep = -1; /* >= 0 is valid and will be set */
@@ -654,12 +654,8 @@
                      tracker_config_get_enable_content_indexing (tracker->config) ? "yes" : "no");
 	tracker_log ("  Thumbnailing enabled  .................  %s", 
                      tracker_config_get_enable_thumbnails (tracker->config) ? "yes" : "no");
- 	tracker_log ("  Evolution email indexing enabled  .....  %s", 
-                     tracker_config_get_index_evolution_emails (tracker->config) ? "yes" : "no");
- 	tracker_log ("  KMail email indexing enabled  .........  %s", 
-                     tracker_config_get_index_kmail_emails (tracker->config) ? "yes" : "no");
- 	tracker_log ("  Thunderbird email indexing enabled  ...  %s", 
-                     tracker_config_get_index_thunderbird_emails (tracker->config) ? "yes" : "no");
+	tracker_log ("  Email client to index .................  %s",
+		     tracker_config_get_email_client (tracker->config));
 
 	tracker_log ("Tracker indexer parameters:");
 	tracker_log ("  Indexer language code  ................  %s", 
@@ -1030,18 +1026,6 @@
 		tracker_config_set_language (tracker->config, language);
 	}
 
-	if (enable_evolution) {
-		tracker_config_set_index_evolution_emails (tracker->config, TRUE);
-	}
-	
-	if (enable_kmail) {
-		tracker_config_set_index_kmail_emails (tracker->config, TRUE);
-	}
-
-	if (enable_thunderbird) {
-		tracker_config_set_index_thunderbird_emails (tracker->config, TRUE);
-	}
-
 	if (throttle != -1) {
 		tracker_config_set_throttle (tracker->config, throttle);
 	}
@@ -1204,6 +1188,8 @@
 
 	tracker->user_request_queue = g_async_queue_new ();
 
+	tracker_email_init ();
+
   	tracker->loop = g_main_loop_new (NULL, TRUE);
 
 	/* this var is used to tell the threads when to quit */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]