On 2010-03-27, micah anderson wrote:
> On Thu, 25 Mar 2010 22:50:52 -0400, micah anderson <mi...@riseup.net> wrote:
> > On Mon, 01 Mar 2010 15:57:00 +0100, "Sebastian Spaeth" 
> > <sebast...@sspaeth.de> wrote:
> > 
> > > From git repository git://github.com/spaetz/notmuch-all-feature.git I
> > > would like to advocate the following branches for quick pulling. Each
> > > contains 1 or 2 patches. They have all been based on todays
> > > cworth/master, so it should be really painless.
> > 
> > Thanks for pulling these all together! All the ones that you propose I
> > also use and would really like these to be merged as well.
> > 
> > The only other patch that I find absolutely crucial, that you do not
> > include, is the 'Preserve folder information when indexing' patch which,
> > although not perfect, does significantly change my life. 
> 
> Glad you find it useful. Yes, having the folder information would indeed
> be nice. Is that patch working well for you? (Can you point me to the
> mail ID of the patch you are using? There have been several versions
> around).

The patch works really well for me. I also had difficulty figuring out
which was the latest. The thread is
thread:4ca0710d708e648c214ba3a67469f5bd, and the Message-ID is:
1265122868-12133-1-git-send-email-sojk...@fel.cvut.cz

I had to rebase the patch to get it to apply with the other features
that you have in your branch. I'm attaching that rebased patch to this
message.




Attachment: pgpjTfePIOaPP.pgp
Description: PGP signature

commit 91e11a2a406683f1f80e19334da8124a25ec89fe
Author: Micah Anderson <mi...@riseup.net>
Date:   Thu Mar 25 23:07:10 2010 -0400

    add folder patch, rebased

diff --git a/lib/database.cc b/lib/database.cc
index c91e97c..6364623 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -84,9 +84,9 @@ typedef struct {
  *	MESSAGE_ID:	The unique ID of the mail mess (see "id" above)
  *
  * In addition, terms from the content of the message are added with
- * "from", "to", "attachment", and "subject" prefixes for use by the
- * user in searching. But the database doesn't really care itself
- * about any of these.
+ * "from", "to", "attachment", "subject" and "folder" prefixes for use
+ * by the user in searching. But the database doesn't really care
+ * itself about any of these.
  *
  * The data portion of a mail document is empty.
  *
@@ -155,7 +155,8 @@ prefix_t PROBABILISTIC_PREFIX[]= {
     { "from",			"XFROM" },
     { "to",			"XTO" },
     { "attachment",		"XATTACHMENT" },
-    { "subject",		"XSUBJECT"}
+    { "subject",		"XSUBJECT"},
+    { "folder", 		"XFOLDER"}
 };
 
 int
@@ -1362,6 +1363,7 @@ _notmuch_database_link_message (notmuch_database_t *notmuch,
 notmuch_status_t
 notmuch_database_add_message (notmuch_database_t *notmuch,
 			      const char *filename,
+			      const char *folder_name,
 			      notmuch_message_t **message_ret)
 {
     notmuch_message_file_t *message_file;
@@ -1477,6 +1479,9 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
 	    date = notmuch_message_file_get_header (message_file, "date");
 	    _notmuch_message_set_date (message, date);
 
+	    if (folder_name != NULL)
+		_notmuch_message_gen_terms (message, "folder", folder_name);
+
 	    _notmuch_message_index_file (message, filename);
 	} else {
 	    ret = NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;
diff --git a/lib/notmuch.h b/lib/notmuch.h
index 0d9cb0f..e475072 100644
--- a/lib/notmuch.h
+++ b/lib/notmuch.h
@@ -263,6 +263,7 @@ notmuch_database_get_directory (notmuch_database_t *database,
 notmuch_status_t
 notmuch_database_add_message (notmuch_database_t *database,
 			      const char *filename,
+			      const char *folder_name,
 			      notmuch_message_t **message);
 
 /* Remove a message from the given notmuch database.
diff --git a/notmuch-new.c b/notmuch-new.c
index 93da1d7..394d76c 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -21,6 +21,7 @@
 #include "notmuch-client.h"
 
 #include <unistd.h>
+#include <glib.h>
 
 typedef struct _filename_node {
     char *filename;
@@ -224,6 +225,35 @@ derive_tags_from_maildir_flags (notmuch_message_t *message,
     }
 }
 
+static char*
+_get_folder_base_name(const char *path)
+{
+    gchar *full_folder_name = NULL;
+    gchar *folder_base_name = NULL;
+
+    /* Find name of "folder" containing the email. */
+    full_folder_name = g_strdup(path);
+    while (1) {
+	folder_base_name = g_path_get_basename(full_folder_name);
+
+	if (strcmp(folder_base_name, "cur") == 0
+	    || strcmp(folder_base_name, "new") == 0) {
+	    gchar *parent_name = g_path_get_dirname(full_folder_name);
+	    g_free(full_folder_name);
+	    full_folder_name = parent_name;
+	} else
+	    break;
+    }
+
+    g_free(full_folder_name);
+
+    if (strcmp(folder_base_name, ".") == 0) {
+	g_free(folder_base_name);
+	folder_base_name = NULL;
+    }
+    return folder_base_name;
+}
+
 /* Examine 'path' recursively as follows:
  *
  *   o Ask the filesystem for the mtime of 'path' (fs_mtime)
@@ -277,6 +307,7 @@ add_files_recursive (notmuch_database_t *notmuch,
     notmuch_filenames_t *db_subdirs = NULL;
     struct stat st;
     notmuch_bool_t is_maildir, new_directory;
+    char *folder_base_name = NULL;
 
     if (stat (path, &st)) {
 	fprintf (stderr, "Error reading directory %s: %s\n",
@@ -464,7 +495,10 @@ add_files_recursive (notmuch_database_t *notmuch,
 	    fflush (stdout);
 	}
 
-	status = notmuch_database_add_message (notmuch, next, &message);
+	folder_base_name = _get_folder_base_name(path);
+	status = notmuch_database_add_message (notmuch, next,
+					       folder_base_name,
+					       &message);
 	switch (status) {
 	/* success */
 	case NOTMUCH_STATUS_SUCCESS:
@@ -561,6 +595,8 @@ add_files_recursive (notmuch_database_t *notmuch,
 	notmuch_filenames_destroy (db_files);
     if (directory)
 	notmuch_directory_destroy (directory);
+    if (folder_base_name)
+	g_free(folder_base_name);
 
     return ret;
 }
_______________________________________________
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to