From f7b49d658ad507b72d01b06d56975dba0b7cafc8 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 12 Nov 2009 22:35:16 -0800 Subject: [PATCH] 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 6469744d..d0b0d9e4 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 e853d4ec..7c1df90c 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 df1d0db7..ffecc9d0 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 a0a71bbd..8db09c77 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",