tracker r1797 - in branches/indexer-split: . src/tracker-indexer src/tracker-indexer/modules



Author: carlosg
Date: Fri Jun 27 13:04:08 2008
New Revision: 1797
URL: http://svn.gnome.org/viewvc/tracker?rev=1797&view=rev

Log:
2008-06-27  Carlos Garnacho  <carlos imendio com>

        * src/tracker-indexer/tracker-indexer-db.c
        (tracker_db_create_service): Allow modules to specify a custom dirname
        and basename for the service.
        * src/tracker-indexer/modules/evolution.c: And use it for local mail.
        IMAP has yet to come.


Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/tracker-indexer/Makefile.am
   branches/indexer-split/src/tracker-indexer/modules/evolution.c
   branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c

Modified: branches/indexer-split/src/tracker-indexer/Makefile.am
==============================================================================
--- branches/indexer-split/src/tracker-indexer/Makefile.am	(original)
+++ branches/indexer-split/src/tracker-indexer/Makefile.am	Fri Jun 27 13:04:08 2008
@@ -8,7 +8,7 @@
 	-DG_LOG_DOMAIN=\"Tracker\"					\
 	-I$(top_srcdir)/src						\
 	$(DBUS_CFLAGS)							\
-	$(GMODULE_CFLAGS)						
+	$(GMODULE_CFLAGS)
 
 bin_PROGRAMS = tracker-indexer
 

Modified: branches/indexer-split/src/tracker-indexer/modules/evolution.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/modules/evolution.c	(original)
+++ branches/indexer-split/src/tracker-indexer/modules/evolution.c	Fri Jun 27 13:04:08 2008
@@ -24,7 +24,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <string.h>
+#include <stdlib.h>
 #include <tracker-indexer/tracker-module.h>
+#include <libtracker-common/tracker-utils.h>
 #include <libtracker-common/tracker-file-utils.h>
 #include <libtracker-common/tracker-type-utils.h>
 
@@ -75,6 +77,9 @@
         SUMMARY_TYPE_TIME_T
 };
 
+static gchar *local_dir = NULL;
+static gchar *imap_dir = NULL;
+
 static gboolean
 read_summary (FILE *summary,
               ...)
@@ -181,7 +186,7 @@
 tracker_module_get_name (void)
 {
         /* Return module name here */
-        return "Evolution";
+        return "EvolutionEmails";
 }
 
 gchar **
@@ -191,9 +196,12 @@
 
         g_mime_init (0);
 
+        local_dir = g_build_filename (g_get_home_dir (), ".evolution", "mail", "local", G_DIR_SEPARATOR_S, NULL);
+        imap_dir = g_build_filename (g_get_home_dir (), ".evolution", "mail", "imap", G_DIR_SEPARATOR_S, NULL);
+
         dirs = g_new0 (gchar *, 3);
-        dirs[0] = g_build_filename (g_get_home_dir (), ".evolution", "mail", "local", NULL);
-        dirs[1] = g_build_filename (g_get_home_dir (), ".evolution", "mail", "imap", NULL);
+        dirs[0] = g_strdup (local_dir);
+        dirs[1] = g_strdup (imap_dir);
 
         return dirs;
 }
@@ -202,11 +210,9 @@
 get_mail_storage_type_from_path (const gchar *path)
 {
         MailStorageType type = MAIL_STORAGE_NONE;
-        gchar *basename, *local_dir, *imap_dir;
+        gchar *basename;
 
         basename = g_path_get_basename (path);
-        local_dir = g_build_filename (g_get_home_dir (), ".evolution", "mail", "local", NULL);
-        imap_dir = g_build_filename (g_get_home_dir (), ".evolution", "mail", "imap", NULL);
 
         if (g_str_has_prefix (path, local_dir) &&
             strchr (basename, '.') == NULL) {
@@ -225,8 +231,6 @@
                 type = MAIL_STORAGE_NONE;
         }
 
-        g_free (local_dir);
-        g_free (imap_dir);
         g_free (basename);
 
         return type;
@@ -378,12 +382,31 @@
         g_slice_free (EvolutionFileData, data);
 }
 
+gint
+get_mbox_message_id (GMimeMessage *message)
+{
+        const gchar *header, *pos;
+        gchar *number;
+        gint id;
+
+        header = g_mime_message_get_header (message, "X-Evolution");
+        pos = strchr (header, '-');
+
+        number = g_strndup (header, pos - header);
+        id = strtoul (number, NULL, 16);
+
+        g_free (number);
+
+        return id;
+}
+
 GHashTable *
 get_metadata_for_mbox (TrackerFile *file)
 {
         EvolutionLocalData *data;
         GMimeMessage *message;
         GHashTable *metadata;
+        gchar *dir, *name;
         time_t date;
 
         data = file->data;
@@ -397,6 +420,12 @@
 					  NULL,
 					  (GDestroyNotify) g_free);
 
+        dir = tracker_string_replace (file->path, local_dir, NULL);
+        name = g_strdup_printf ("%s;uid=%d", dir, get_mbox_message_id (message));
+
+        g_hash_table_insert (metadata, METADATA_FILE_PATH, g_strdup ("email://local local"));
+        g_hash_table_insert (metadata, METADATA_FILE_NAME, name);
+
         g_mime_message_get_date (message, &date, NULL);
 	g_hash_table_insert (metadata, METADATA_EMAIL_DATE,
                              tracker_uint_to_string (date));
@@ -416,6 +445,8 @@
          * Attachments
          */
 
+        g_free (dir);
+
         return metadata;
 }
 

Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c	(original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c	Fri Jun 27 13:04:08 2008
@@ -142,8 +142,17 @@
 	id_str = tracker_guint32_to_string (id);
 	service_type_id_str = tracker_int_to_string (tracker_service_get_id (service));
 
-	dirname = g_path_get_dirname (path);
-	basename = g_path_get_basename (path);
+	dirname = g_hash_table_lookup (metadata, "File:Path");
+	basename = g_hash_table_lookup (metadata, "File:Name");
+
+	if (dirname && basename) {
+		/* Keep a copy */
+		dirname = g_strdup (dirname);
+		basename = g_strdup (basename);
+	} else {
+		dirname = g_path_get_dirname (path);
+		basename = g_path_get_basename (path);
+	}
 
 	is_dir = g_file_test (path, G_FILE_TEST_IS_DIR);
 	is_symlink = g_file_test (path, G_FILE_TEST_IS_SYMLINK);



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