tracker r1250 - in trunk: . src/libtracker-common src/trackerd
- From: carlosg svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1250 - in trunk: . src/libtracker-common src/trackerd
- Date: Mon, 7 Apr 2008 18:48:26 +0100 (BST)
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]