aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-private.h
Commit message (Collapse)AuthorAge
* libify: Move library sources down into lib directory.Gravatar Carl Worth2009-11-09
| | | | | A "make" invocation still works from the top-level, but not from down inside the lib directory yet.
* Remove notmuch_message_get_header_size and notmuch_message_get_all_headersGravatar Carl Worth2009-11-02
| | | | | | The notmuch.c main program now uses GMime directly rather than using these functions, and I'd rather not export any functions unless we have good evidence that the functions are necessary.
* notmuch search: Add (relative) date to search outputGravatar Carl Worth2009-10-29
| | | | | The new function for formatting relative dates is nice enough that we need to start using it more places. Here's one of them.
* notmuch show: Add body of message as well.Gravatar Carl Worth2009-10-29
| | | | | This is just the raw message body for now, (so any MIME parsing will be up to the consumer). And this will likely change in the future.
* notmuch show: Initial implementation (headers only)Gravatar Carl Worth2009-10-29
| | | | | | | We're using a delimiter syntax that Keith is optimistic about being able to easily parse in emacs. Note: We're not escaping any occurrence of the delimiters in the message yet, so we'll need to fix that.
* Fix add_message and get_filename to strip/re-add the database path.Gravatar Carl Worth2009-10-28
| | | | | We now store only a relative path inside the database so the database is not nicely relocatable.
* Add full-text indexing using the GMime library for parsing.Gravatar Carl Worth2009-10-28
| | | | | | | | | | | This is based on the old notmuch-index-message.cc from early in the history of notmuch, but considerably cleaned up now that we have some experience with Xapian and know just what we want to index, (rather than just blindly trying to index exactly what sup does). This does slow down notmuch_database_add_message a *lot*, but I've got some ideas for getting some time back.
* Fix incorrect name of _notmuch_thread_get_subject.Gravatar Carl Worth2009-10-26
| | | | | | Somehow this naming with an underscore crept in, (but only in the private header, so notmuch.c was compiling with no prototype). Fix to be the notmuch_thread_get_subject originally intended.
* Add public notmuch_thread_get_subjectGravatar Carl Worth2009-10-26
| | | | | And use this in "notmuch search" to display subject line as well as thread ID.
* Remove all calls to g_strdup_printfGravatar Carl Worth2009-10-26
| | | | | | Replacing them with calls to talloc_asprintf if possible, otherwise to asprintf (with it's painful error-handling leaving the pointer undefined).
* Add notmuch_thread_get_tagsGravatar Carl Worth2009-10-26
| | | | | And augment "notmuch search" to print tag values as well as thread ID values. This tool is almost usable now.
* tags: Replace sort() and reset() with prepare_iterator().Gravatar Carl Worth2009-10-26
| | | | | | The previous functions were always called together, so we might as well just have one function for this. Also, the reset() name was poor, and prepare_iterator() is much more descriptive.
* tags: Re-implement tags iterator to avoid having C++ in the interfaceGravatar Carl Worth2009-10-26
| | | | | | | We want to be able to iterate over tags stored in various ways, so the previous TermIterator-based tags object just wasn't general enough. The new interface is nice and simple, and involves only C datatypes.
* Add an initial implementation of a notmuch_thread_t object.Gravatar Carl Worth2009-10-25
| | | | | | | | | | | | | | | | | | | We've now got a new notmuch_query_search_threads and a notmuch_threads_result_t iterator. The thread object itself doesn't do much yet, (just allows one to get the thread_id), but that's at least enough to see that "notmuch search" is actually doing something now, (since it has been converted to print thread IDs instead of message IDs). And maybe that's all we need. Getting the messages belonging to a thread is as simple as a notmuch_query_search_messages with a string of "thread:<thread-id>". Though it would be convenient to add notmuch_thread_get_messages which could use the existing notmuch_message_results_t iterator. Now we just need an implementation of "notmuch show" and we'll have something somewhat usable.
* Re-enable the warning for unused parameters.Gravatar Carl Worth2009-10-25
| | | | | It's easy enough to squelch the warning with an __attribute__ ((unused)) and it might just catch something for us in the future.
* Change database to store only a single thread ID per message.Gravatar Carl Worth2009-10-25
| | | | | | | | | | | | Instead of supporting multiple thread IDs, we now merge together thread IDs if one message is ever found to belong to more than one thread. This allows for constructing complete threads when, for example, a child message doesn't include a complete list of References headers back to the beginning of the thread. It also simplifies dealing with mapping a message ID to a thread ID which is now a simple get_thread_id just like get_message_id, (and no longer an iterator-based thing like get_tags).
* Add an INTERNAL_ERROR macro and use it for all internal errors.Gravatar Carl Worth2009-10-25
| | | | | | We were previously just doing fprintf;exit at each point, but I wanted to add file and line-number details to all messages, so it makes sense to use a single macro for that.
* add_message: Propagate error status from notmuch_message_create_for_message_idGravatar Carl Worth2009-10-25
| | | | What a great feeling to remove an XXX comment.
* Drop the storage of thread ID(s) in a value.Gravatar Carl Worth2009-10-25
| | | | | | Now that we are iterating over the thread terms instead, we can drop this redundant storage (which should shrink our database a tiny bit).
* Implement notmuch_tags_t on top of new notmuch_terms_tGravatar Carl Worth2009-10-25
| | | | | | | The generic notmuch_terms_t iterator should provide support for notmuch_thread_ids_t when we switch as well, (And it would be interesting to see if we could reasonably make this support a PostingIterator too. Time will tell.)
* Shuffle the value numbers around in the database.Gravatar Carl Worth2009-10-24
| | | | | | | | | | | | | | | | | | | | First, it's nice that for now we don't have any users yet, so we can make incompatible changes to the database layout like this without causing trouble. ;-) There are a few reasons for this change. First, we now use value 0 uniformly as a timestamp for both mail and timestamp documents, (which lets us cleanup an ugly and fragile bare 0 in the add_value and get_value calls in the timestamp code). Second, I want to drop the thread value entirely, so putting it at the end of the list means we can drop it as compatible change in the future. (I almost want to drop the message-ID value too, but it's nice to be able to sort on it to get diff-able output from "notmuch dump".) But the thread value we never use as a value, (we would never sort on it, for example). And it's totally redundant with the thread terms we store already. So expect it to disappear soon.
* Add notmuch_database_set_timestamp and notmuch_database_get_timestampGravatar Carl Worth2009-10-23
| | | | | These will be very helpful to implement an efficient "notmuch new" command which imports new mail messages that have appeared.
* database: Add private find_unique_doc_id and find_unique_document functionsGravatar Carl Worth2009-10-23
| | | | | | These are a generalization of the unique-ness testing of notmuch_database_find_message. More preparation for firectory timestamps.
* sha1: Add new notmuch_sha1_of_string functionGravatar Carl Worth2009-10-23
| | | | | | | | | | | | | | | We'll be using this for storing really long terms in the database and when we just need to look them up, (and never read back the original data directly from the database). For example, storing arbitrarily long directory paths in the database along with mtime timestamps. Note that if we did want to store arbitrarily long terms and also be able to read them back, the Xapian folks recommending splitting the term off with multiple prefixes. See the note near the end of this page: http://trac.xapian.org/wiki/FAQ/UniqueIds
* add_message: Fix to not add multiple documents with the same message IDGravatar Carl Worth2009-10-23
| | | | | | | | Here's the second big fix to message-ID handling, (the first was to generate message IDs when an email contained none). Now, with no document missing a message ID, and no two documents having the same message ID, we have a nice consistent database where the message ID can be used as a unique key.
* Add _notmuch_message_create_for_message_idGravatar Carl Worth2009-10-23
| | | | | | | 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.
* Add internal functions for manipulating a new notmuch_message_tGravatar Carl Worth2009-10-23
| | | | | | | | | | | This will support the add_message function in incrementally creating state in a new notmuch_message_t. The new functions are _notmuch_message_set_filename _notmuch_message_add_thread_id _notmuch_message_ensure_thread_id _notmuch_message_set_date _notmuch_message_sync
* Move thread_id generation code from database.cc to message.ccGravatar Carl Worth2009-10-23
| | | | It's really up to the message to decide how to generate these.
* Generate message ID (using SHA1) when a mail message contains none.Gravatar Carl Worth2009-10-22
| | | | | | This is important as we're using the message ID as the unique key in our database. So previously, all messages with no message ID would be treated as the same message---not good at all.
* Add notmuch_message_add_tag and notmuch_message_remove_tagGravatar Carl Worth2009-10-21
| | | | | With these two added, we now have enough functionality in the library to implement "notmuch restore".
* notmuch-private.h: Move NOTMUCH_BEGIN_DECLS earlierGravatar Carl Worth2009-10-21
| | | | | | | We actually need this before the include of xutil.h, but it was previously stuck randomly among various system includes. Instead, put it at the top, right after include the notmuch.h header that defines it.
* database: Add new notmuch_database_find_messageGravatar Carl Worth2009-10-21
| | | | | | | With this function, and the recently added support for notmuch_message_get_thread_ids, we now recode the find_thread_ids function to work just the way we expect a user of the public notmuch API to work. Not too bad really.
* Rename NOTMUCH_MAX_TERM to NOTMUCH_TERM_MAXGravatar Carl Worth2009-10-21
| | | | Just better consistency with our naming schemes.
* Move find_prefix function from database.cc to message.ccGravatar Carl Worth2009-10-21
| | | | | | It's definitely a better fit there for now, (and can likely eventually be made static as add_term moves from database to message as well).
* Move declarations for xutil.c from notmuch-private to new xutil.h.Gravatar Carl Worth2009-10-21
| | | | | | | The motivation here is that our top-level notmuch.c main program wants to start using these, but we don't want it to see into notmuch-private.h, (since our main program is a test vehicle for the "public" notmuch interface in notmuch.h).
* notmuch dump: Fix the sorting of results.Gravatar Carl Worth2009-10-21
| | | | | | | | | | | | | To properly support sorting in notmuch_query we know use an Enquire object. We also throw in a QueryParser too, so we're really close to being able to support arbitrary full-text searches. I took a look at the supported QueryParser syntax and chose a set of flags for everything I like, (such as supporting Boolean operators in either case ("AND" or "and"), supporting phrase searching, supporting + and - to include/preclude terms, and supporting a trailing * on any term as a wildcard).
* Implement 'notmuch dump'.Gravatar Carl Worth2009-10-20
| | | | | | | | | | | | | | | | This is a fairly big milestone for notmuch. It's our first command to do anything besides building the index, so it proves we can actually read valid results out from the index. It also puts in place almost all of the API and infrastructure we will need to allow searching of the database. Finally, with this change we are now using talloc inside of notmuch which is truly a delight to use. And now that I figured out how to use C++ objects with talloc allocation, (it requires grotty parts of C++ such as "placement new" and "explicit destructors"), we are valgrind-clean for "notmuch dump", (as in "no leaks are possible").
* Rename private notmuch_message_t to notmuch_message_file_tGravatar Carl Worth2009-10-20
| | | | | | | | | This is in preparation for a new, public notmuch_message_t. Eventually, the public notmuch_message_t is going to grow enough features to need to be file-backed and will likely need everything that's now in message-file.c. So we may fold these back into one object/implementation in the future.
* Protect definition of _GNU_SOURCE.Gravatar Carl Worth2009-10-19
| | | | | I was getting a duplicate definition of this from somewhere, so getting compiler warnings without this protection.
* Rework message parsing to use getline rather than mmap.Gravatar Carl Worth2009-10-19
| | | | | | | The line-based parsing can be a bit awkward when wanting to peek ahead, (say, for folded header values), but it's so convenient to be able to trust that a string terminator exists on every line so it cleans up the code considerably.
* notmuch: Switch from gmime to custom, ad-hoc parsing of headers.Gravatar Carl Worth2009-10-19
| | | | | | | | | | | Since we're currently just trying to stitch together In-Reply-To and References headers we don't need that much sophistication. It's when we later add full-text searching that GMime will be useful. So for now, even though my own code here is surely very buggy compared to GMime it's also a lot faster. And speed is what we're after for the initial index creation.
* notmuch: Start actually adding messages to the index.Gravatar Carl Worth2009-10-18
This is the beginning of the notmuch library as well, with its interface in notmuch.h. So far we've got create, open, close, and add_message (all with a notmuch_database prefix). The current add_message function has already been whittled down from what we have in notmuch-index-message to add only references, message-id, and thread-id to the index, (that is---just enough to do thread-linkage but nothing for full-text searching). The concept here is to do something quickly so that the user can get some data into notmuch and start using it. (The most interesting stuff is then thread-linkage and labels like inbox and unread.) We can defer the full-text indexing of the body of the messages for later, (such as in the background while the user is reading mail). The initial thread-stitching step is still slower than I would like. We may have to stop using libgmime for this step as its overhead is not worth it for the simple case of just parsing the message-id, references, and in-reply-to headers.