X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fmessage.cc;h=a410394d3d5ac8c2d7772a6b3d1d65762c24ed85;hp=7ba06c99ae38fd7680b7fe34475d2bdbc2680541;hb=00b138ba2ac0c9a01f19d9e0b75657f1082a766d;hpb=f379aa52845f5594aa6cc2e7cf131d5f57202bbf diff --git a/lib/message.cc b/lib/message.cc index 7ba06c99..a410394d 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -172,7 +172,7 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch, unsigned int doc_id; char *term; - if (notmuch->mode == NOTMUCH_DATABASE_MODE_READONLY) { + if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY) { *status_ret = NOTMUCH_PRIVATE_STATUS_READONLY_DATABASE; return NULL; } @@ -199,6 +199,9 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch, doc_id = db->add_document (doc); } catch (const Xapian::Error &error) { + fprintf (stderr, "A Xapian exception occurred creating message: %s\n", + error.get_msg().c_str()); + notmuch->exception_reported = TRUE; *status_ret = NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION; return NULL; } @@ -408,10 +411,14 @@ _notmuch_message_set_filename (notmuch_message_t *message, db_path = notmuch_database_get_path (message->notmuch); db_path_len = strlen (db_path); - if (*s == '/' && strncmp (s, db_path, db_path_len) == 0 - && strlen (s) > db_path_len) + if (*s == '/' && strlen (s) > db_path_len + && strncmp (s, db_path, db_path_len) == 0) { - s += db_path_len + 1; + s += db_path_len; + while (*s == '/') s++; + + if (!*s) + INTERNAL_ERROR ("Message filename was same as db prefix."); } message->doc.set_data (s); @@ -456,38 +463,10 @@ notmuch_message_get_date (notmuch_message_t *message) notmuch_tags_t * notmuch_message_get_tags (notmuch_message_t *message) { - const char *prefix = _find_prefix ("tag"); Xapian::TermIterator i, end; - notmuch_tags_t *tags; - std::string tag; - - /* Currently this iteration is written with the assumption that - * "tag" has a single-character prefix. */ - assert (strlen (prefix) == 1); - - tags = _notmuch_tags_create (message); - if (unlikely (tags == NULL)) - return NULL; - - i = message->doc.termlist_begin (); - end = message->doc.termlist_end (); - - i.skip_to (prefix); - - while (i != end) { - tag = *i; - - if (tag.empty () || tag[0] != *prefix) - break; - - _notmuch_tags_add_tag (tags, tag.c_str () + 1); - - i++; - } - - _notmuch_tags_prepare_iterator (tags); - - return tags; + i = message->doc.termlist_begin(); + end = message->doc.termlist_end(); + return _notmuch_convert_tags(message, i, end); } void @@ -552,7 +531,7 @@ _notmuch_message_sync (notmuch_message_t *message) { Xapian::WritableDatabase *db; - if (message->notmuch->mode == NOTMUCH_DATABASE_MODE_READONLY) + if (message->notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY) return; db = static_cast (message->notmuch->xapian_db);