--- lib/notmuch.h | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/query.cc | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/lib/notmuch.h b/lib/notmuch.h index 39759b7a..ae592e93 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -773,6 +773,10 @@ notmuch_query_create (notmuch_database_t *database, * Sort values for notmuch_query_set_sort. */ typedef enum { + /** + * Value was not set + */ + NOTMUCH_SORT_UNSET = -1, /** * Oldest first. */ @@ -791,6 +795,42 @@ typedef enum { NOTMUCH_SORT_UNSORTED } notmuch_sort_t; +/** + * Sort key values for notmuch_query_set_sort_key + */ +typedef enum { + /** + * Do not sort. + */ + NOTMUCH_SORT_KEY_NONE=0, + /** + * Sort by timestamp (from Date: header) + */ + NOTMUCH_SORT_KEY_TIMESTAMP, + /** + * Sort by message-id. + */ + NOTMUCH_SORT_KEY_MESSAGE_ID, +} notmuch_sort_key_t; + +/** + * Sort type values for notmuch_query_set_sort_type + */ +typedef enum { + /** + * Do not sort. + */ + NOTMUCH_SORT_TYPE_NONE=0, + /** + * Ascending order + */ + NOTMUCH_SORT_TYPE_ASCENDING, + /** + * Descending order + */ + NOTMUCH_SORT_TYPE_DESCENDING, +} notmuch_sort_type_t; + /** * Return the query_string of this query. See notmuch_query_create. */ @@ -860,6 +900,32 @@ notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort); notmuch_sort_t notmuch_query_get_sort (const notmuch_query_t *query); +/** + * Specify the sort key for this query. + */ +void +notmuch_query_set_sort_key (notmuch_query_t *query, notmuch_sort_key_t key); + +/** + * Return the sort_key specified for this query. See + * notmuch_query_set_sort_key. + */ +notmuch_sort_key_t +notmuch_query_get_sort_key (const notmuch_query_t *query); + +/** + * Specify the sort type for this query. + */ +void +notmuch_query_set_sort_type (notmuch_query_t *query, notmuch_sort_type_t type); + +/** + * Return the sort_type specified for this query. See + * notmuch_query_set_sort_type. + */ +notmuch_sort_type_t +notmuch_query_get_sort_type (const notmuch_query_t *query); + /** * Add a tag that will be excluded from the query results by default. * This exclusion will be ignored if this tag appears explicitly in diff --git a/lib/query.cc b/lib/query.cc index d633fa3d..c3b228fb 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -27,6 +27,8 @@ struct _notmuch_query { notmuch_database_t *notmuch; const char *query_string; notmuch_sort_t sort; + notmuch_sort_key_t sort_key; + notmuch_sort_type_t sort_type; notmuch_string_list_t *exclude_terms; notmuch_exclude_t omit_excluded; bool parsed; @@ -107,6 +109,9 @@ notmuch_query_create (notmuch_database_t *notmuch, query->sort = NOTMUCH_SORT_NEWEST_FIRST; + query->sort_key = NOTMUCH_SORT_KEY_TIMESTAMP; + query->sort_type = NOTMUCH_SORT_TYPE_DESCENDING; + query->exclude_terms = _notmuch_string_list_create (query); query->omit_excluded = NOTMUCH_EXCLUDE_TRUE; @@ -168,7 +173,33 @@ notmuch_query_set_omit_excluded (notmuch_query_t *query, void notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort) { + /* only for use by _get_sort */ query->sort = sort; + + /* translate to new API */ + switch (sort) { + case NOTMUCH_SORT_UNSET: + /* this probably indicates an error, but it seems relatively + * harmless, and this code path is deprecated */ + break; + case NOTMUCH_SORT_OLDEST_FIRST: + query->sort_key = NOTMUCH_SORT_KEY_TIMESTAMP; + query->sort_type = NOTMUCH_SORT_TYPE_ASCENDING; + break; + case NOTMUCH_SORT_NEWEST_FIRST: + query->sort_key = NOTMUCH_SORT_KEY_TIMESTAMP; + query->sort_type = NOTMUCH_SORT_TYPE_DESCENDING; + break; + case NOTMUCH_SORT_MESSAGE_ID: + query->sort_key = NOTMUCH_SORT_KEY_MESSAGE_ID; + query->sort_type = NOTMUCH_SORT_TYPE_ASCENDING; + break; + case NOTMUCH_SORT_UNSORTED: + query->sort_key = NOTMUCH_SORT_KEY_NONE; + query->sort_type = NOTMUCH_SORT_TYPE_NONE; + break; + } + } notmuch_sort_t @@ -177,6 +208,32 @@ notmuch_query_get_sort (const notmuch_query_t *query) return query->sort; } +void +notmuch_query_set_sort_key (notmuch_query_t *query, notmuch_sort_key_t sort_key) +{ + query->sort = NOTMUCH_SORT_UNSET; + query->sort_key = sort_key; +} + +notmuch_sort_key_t +notmuch_query_get_sort_key (const notmuch_query_t *query) +{ + return query->sort_key; +} + +void +notmuch_query_set_sort_type (notmuch_query_t *query, notmuch_sort_type_t sort_type) +{ + query->sort = NOTMUCH_SORT_UNSET; + query->sort_type = sort_type; +} + +notmuch_sort_type_t +notmuch_query_get_sort_type (const notmuch_query_t *query) +{ + return query->sort_type; +} + notmuch_status_t notmuch_query_add_tag_exclude (notmuch_query_t *query, const char *tag) { @@ -331,6 +388,7 @@ _notmuch_query_search_documents (notmuch_query_t *query, enquire.set_sort_by_value (NOTMUCH_VALUE_MESSAGE_ID, false); break; case NOTMUCH_SORT_UNSORTED: + case NOTMUCH_SORT_UNSET: break; } -- 2.15.0 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch