mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
Add _notmuch_message_create_for_message_id
This is the last piece needed for add_message to be able to properly support a message with a duplicate message ID. This function creates a new notmuch_message_t object but one that may reference an existing document in the database.
This commit is contained in:
parent
69b25a75ec
commit
1b5d8984c6
2 changed files with 49 additions and 0 deletions
44
message.cc
44
message.cc
|
@ -153,6 +153,50 @@ _notmuch_message_create (const void *talloc_owner,
|
|||
return message;
|
||||
}
|
||||
|
||||
/* Create a new notmuch_message_t object for a specific message ID,
|
||||
* (which may or may not already exist in the databas).
|
||||
*
|
||||
* Here, 'talloc owner' is an optional talloc context to which the new
|
||||
* message will belong. This allows for the caller to not bother
|
||||
* calling notmuch_message_destroy on the message, and no that all
|
||||
* memory will be reclaimed with 'talloc_owner' is free. The caller
|
||||
* still can call notmuch_message_destroy when finished with the
|
||||
* message if desired.
|
||||
*
|
||||
* The 'talloc_owner' argument can also be NULL, in which case the
|
||||
* caller *is* responsible for calling notmuch_message_destroy.
|
||||
*
|
||||
* If there is already a document with message ID 'message_id' in the
|
||||
* database, then the returned message can be used to query/modify the
|
||||
* document. Otherwise, a new document will be inserted into the
|
||||
* database before this function returns;
|
||||
*/
|
||||
notmuch_message_t *
|
||||
_notmuch_message_create_for_message_id (const void *talloc_owner,
|
||||
notmuch_database_t *notmuch,
|
||||
const char *message_id)
|
||||
{
|
||||
notmuch_message_t *message;
|
||||
Xapian::Document doc;
|
||||
unsigned int doc_id;
|
||||
char *term;
|
||||
|
||||
message = notmuch_database_find_message (notmuch, message_id);
|
||||
if (message)
|
||||
return talloc_steal (talloc_owner, message);
|
||||
|
||||
term = talloc_asprintf (NULL, "%s%s",
|
||||
_find_prefix ("msgid"), message_id);
|
||||
doc.add_term (term);
|
||||
talloc_free (term);
|
||||
|
||||
doc.add_value (NOTMUCH_VALUE_MESSAGE_ID, message_id);
|
||||
|
||||
doc_id = notmuch->xapian_db->add_document (doc);
|
||||
|
||||
return _notmuch_message_create (talloc_owner, notmuch, doc_id);
|
||||
}
|
||||
|
||||
const char *
|
||||
notmuch_message_get_message_id (notmuch_message_t *message)
|
||||
{
|
||||
|
|
|
@ -102,6 +102,11 @@ _notmuch_message_create (const void *talloc_owner,
|
|||
notmuch_database_t *notmuch,
|
||||
unsigned int doc_id);
|
||||
|
||||
notmuch_message_t *
|
||||
_notmuch_message_create_for_message_id (const void *talloc_owner,
|
||||
notmuch_database_t *notmuch,
|
||||
const char *message_id);
|
||||
|
||||
/* XXX: Here temporarily during code movement only. */
|
||||
/* "128 bits of thread-id ought to be enough for anybody" */
|
||||
#define NOTMUCH_THREAD_ID_BITS 128
|
||||
|
|
Loading…
Reference in a new issue