commit 91e11a2a406683f1f80e19334da8124a25ec89fe Author: Micah Anderson 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 +#include 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; }