aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2009-11-12 22:35:16 -0800
committerGravatar Carl Worth <cworth@cworth.org>2009-11-12 22:35:16 -0800
commitf7b49d658ad507b72d01b06d56975dba0b7cafc8 (patch)
tree69df4deaed2a6362c449ff8df566cfeb6bea2abe
parent5f5e9b8662d562a3d8bd9ab7144fc1fead1c3d22 (diff)
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).
-rw-r--r--lib/notmuch.h4
-rw-r--r--lib/query.cc6
-rw-r--r--lib/thread.cc2
-rw-r--r--notmuch-search.c14
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",