From f7b49d658ad507b72d01b06d56975dba0b7cafc8 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 12 Nov 2009 22:35:16 -0800 Subject: notmuch search: Add support for a --reverse option to reverse sort order. Note that the difference between thread results in date order and thread results in reverse-date order is not simply a matter of reversing the final results. When sorting in date order, the threads are sorted by the oldest message in the thread. When sorting in reverse-date order, the threads are sorted by the newest message in the thread. This difference means that we might want an explicit option in the interface to reverse the order, (even though the default will be to display the inbox in date order and global searches in reverse-date order). --- lib/notmuch.h | 4 ++-- lib/query.cc | 6 +++--- lib/thread.cc | 2 +- notmuch-search.c | 14 +++++++++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/notmuch.h b/lib/notmuch.h index 6469744..d0b0d9e 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -299,8 +299,8 @@ notmuch_query_create (notmuch_database_t *database, /* Sort values for notmuch_query_set_sort */ typedef enum { - NOTMUCH_SORT_DATE_OLDEST_FIRST, - NOTMUCH_SORT_DATE_NEWEST_FIRST, + NOTMUCH_SORT_DATE, + NOTMUCH_SORT_DATE_REVERSE, NOTMUCH_SORT_MESSAGE_ID } notmuch_sort_t; diff --git a/lib/query.cc b/lib/query.cc index e853d4e..7c1df90 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -61,7 +61,7 @@ notmuch_query_create (notmuch_database_t *notmuch, query->query_string = talloc_strdup (query, query_string); - query->sort = NOTMUCH_SORT_DATE_OLDEST_FIRST; + query->sort = NOTMUCH_SORT_DATE; return query; } @@ -123,10 +123,10 @@ notmuch_query_search_messages (notmuch_query_t *query, } switch (query->sort) { - case NOTMUCH_SORT_DATE_OLDEST_FIRST: + case NOTMUCH_SORT_DATE: enquire.set_sort_by_value (NOTMUCH_VALUE_TIMESTAMP, FALSE); break; - case NOTMUCH_SORT_DATE_NEWEST_FIRST: + case NOTMUCH_SORT_DATE_REVERSE: enquire.set_sort_by_value (NOTMUCH_VALUE_TIMESTAMP, TRUE); break; case NOTMUCH_SORT_MESSAGE_ID: diff --git a/lib/thread.cc b/lib/thread.cc index df1d0db..ffecc9d 100644 --- a/lib/thread.cc +++ b/lib/thread.cc @@ -186,7 +186,7 @@ _notmuch_thread_create (void *ctx, thread->oldest = 0; thread->newest = 0; - notmuch_query_set_sort (thread_id_query, NOTMUCH_SORT_DATE_OLDEST_FIRST); + notmuch_query_set_sort (thread_id_query, NOTMUCH_SORT_DATE); for (messages = notmuch_query_search_messages (thread_id_query, 0, -1); notmuch_messages_has_more (messages); diff --git a/notmuch-search.c b/notmuch-search.c index a0a71bb..8db09c7 100644 --- a/notmuch-search.c +++ b/notmuch-search.c @@ -34,6 +34,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[]) time_t date; int i, first = 0, max_threads = -1; char *opt, *end; + notmuch_sort_t sort = NOTMUCH_SORT_DATE; for (i = 0; i < argc && argv[i][0] == '-'; i++) { if (strcmp (argv[i], "--") == 0) { @@ -54,6 +55,11 @@ notmuch_search_command (void *ctx, int argc, char *argv[]) fprintf (stderr, "Invalid value for --max-threads: %s\n", opt); return 1; } + } else if (strcmp (argv[i], "--reverse") == 0) { + sort = NOTMUCH_SORT_DATE_REVERSE; + } else { + fprintf (stderr, "Unrecognized option: %s\n", argv[i]); + return 1; } } @@ -80,6 +86,8 @@ notmuch_search_command (void *ctx, int argc, char *argv[]) return 1; } + notmuch_query_set_sort (query, sort); + for (threads = notmuch_query_search_threads (query, first, max_threads); notmuch_threads_has_more (threads); notmuch_threads_advance (threads)) @@ -88,7 +96,11 @@ notmuch_search_command (void *ctx, int argc, char *argv[]) thread = notmuch_threads_get (threads); - date = notmuch_thread_get_oldest_date (thread); + if (sort == NOTMUCH_SORT_DATE) + date = notmuch_thread_get_oldest_date (thread); + else + date = notmuch_thread_get_newest_date (thread); + relative_date = notmuch_time_relative_date (ctx, date); printf ("thread:%s %12s [%d/%d] %s; %s", -- cgit v1.2.3