mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
database: Abstract _filename_to_direntry from _add_message
The code to map a filename to a direntry is something that we're going to want in a future _remove_message function, so put it in a new function _notmuch_database_filename_to_direntry .
This commit is contained in:
parent
1376a90db6
commit
498edff503
3 changed files with 43 additions and 16 deletions
|
@ -734,6 +734,38 @@ _notmuch_database_get_directory_path (void *ctx,
|
|||
return talloc_strdup (ctx, document.get_data ().c_str ());
|
||||
}
|
||||
|
||||
/* Given a legal 'filename' for the database, (either relative to
|
||||
* database path or absolute with initial components identical to
|
||||
* database path), return a new string (with 'ctx' as the talloc
|
||||
* owner) suitable for use as a direntry term value.
|
||||
*/
|
||||
notmuch_status_t
|
||||
_notmuch_database_filename_to_direntry (void *ctx,
|
||||
notmuch_database_t *notmuch,
|
||||
const char *filename,
|
||||
char **direntry)
|
||||
{
|
||||
const char *relative, *directory, *basename;
|
||||
Xapian::docid directory_id;
|
||||
notmuch_status_t status;
|
||||
|
||||
relative = _notmuch_database_relative_path (notmuch, filename);
|
||||
|
||||
status = _notmuch_database_split_path (ctx, relative,
|
||||
&directory, &basename);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = _notmuch_database_find_directory_id (notmuch, directory,
|
||||
&directory_id);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
*direntry = talloc_asprintf (ctx, "%u:%s", directory_id, basename);
|
||||
|
||||
return NOTMUCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* Given a legal 'path' for the database, return the relative path.
|
||||
*
|
||||
* The return value will be a pointer to the originl path contents,
|
||||
|
|
|
@ -393,11 +393,9 @@ notmuch_status_t
|
|||
_notmuch_message_add_filename (notmuch_message_t *message,
|
||||
const char *filename)
|
||||
{
|
||||
const char *relative, *directory, *basename;
|
||||
char *term;
|
||||
Xapian::docid directory_id;
|
||||
notmuch_status_t status;
|
||||
void *local = talloc_new (message);
|
||||
char *direntry;
|
||||
|
||||
if (message->filename) {
|
||||
talloc_free (message->filename);
|
||||
|
@ -407,22 +405,13 @@ _notmuch_message_add_filename (notmuch_message_t *message,
|
|||
if (filename == NULL)
|
||||
INTERNAL_ERROR ("Message filename cannot be NULL.");
|
||||
|
||||
relative = _notmuch_database_relative_path (message->notmuch, filename);
|
||||
|
||||
status = _notmuch_database_split_path (local, relative,
|
||||
&directory, &basename);
|
||||
status = _notmuch_database_filename_to_direntry (local,
|
||||
message->notmuch,
|
||||
filename, &direntry);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
status = _notmuch_database_find_directory_id (message->notmuch, directory,
|
||||
&directory_id);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
term = talloc_asprintf (local, "%s%u:%s",
|
||||
_find_prefix ("direntry"), directory_id, basename);
|
||||
|
||||
message->doc.add_term (term);
|
||||
_notmuch_message_add_term (message, "direntry", direntry);
|
||||
|
||||
talloc_free (local);
|
||||
|
||||
|
|
|
@ -171,6 +171,12 @@ _notmuch_database_get_directory_path (void *ctx,
|
|||
notmuch_database_t *notmuch,
|
||||
unsigned int doc_id);
|
||||
|
||||
notmuch_status_t
|
||||
_notmuch_database_filename_to_direntry (void *ctx,
|
||||
notmuch_database_t *notmuch,
|
||||
const char *filename,
|
||||
char **direntry);
|
||||
|
||||
/* thread.cc */
|
||||
|
||||
notmuch_thread_t *
|
||||
|
|
Loading…
Reference in a new issue