From a7a897b883d10e431be40e97156b75fdc4d3827a Mon Sep 17 00:00:00 2001
From: Carl Worth <cworth@cworth.org>
Date: Fri, 23 Oct 2009 15:22:14 -0700
Subject: [PATCH] notmuch setup: Clean up the progress printing a bit.

Get rid of a useless leading 0 on the seconds value, and make a
distinction between "files" and "messages", (we process many
files, but not all of them are recongized as messages). Finally,
add a summary line at the end saying how many unique messages
were added to the database. Since this comes right after the
total number of files, it gives the user at least a hint as
to how many messages were encountered with duplicate message IDs.
---
 notmuch.c | 47 +++++++++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 16 deletions(-)

diff --git a/notmuch.c b/notmuch.c
index 24a44797..770db73a 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -54,8 +54,9 @@ typedef struct command {
 } command_t;
 
 typedef struct {
-    int total_messages;
-    int count;
+    int total_files;
+    int processed_files;
+    int added_messages;
     struct timeval tv_start;
 } add_files_state_t;
 
@@ -92,7 +93,7 @@ print_formatted_seconds (double seconds)
 	seconds -= minutes * 60;
     }
 
-    printf ("%02ds", (int) seconds);
+    printf ("%ds", (int) seconds);
 }
 
 void
@@ -104,13 +105,18 @@ add_files_print_progress (add_files_state_t *state)
     gettimeofday (&tv_now, NULL);
 
     elapsed_overall = tv_elapsed (state->tv_start, tv_now);
-    rate_overall = (state->count) / elapsed_overall;
+    rate_overall = (state->processed_files) / elapsed_overall;
+
+    printf ("Processed %d", state->processed_files);
 
-    printf ("Added %d of %d messages (",
-	    state->count, state->total_messages);
-    print_formatted_seconds ((state->total_messages - state->count) /
-			     rate_overall);
-    printf (" remaining).      \r");
+    if (state->total_files) {
+	printf (" of %d files (", state->total_files);
+	print_formatted_seconds ((state->total_files - state->processed_files) /
+				 rate_overall);
+	printf (" remaining).      \r");
+    } else {
+	printf (" files (%d files/sec.)    \r", (int) rate_overall);
+    }
 
     fflush (stdout);
 }
@@ -170,14 +176,15 @@ add_files (notmuch_database_t *notmuch, const char *path,
 	stat (next, &st);
 
 	if (S_ISREG (st.st_mode)) {
+	    state->processed_files++;
 	    status = notmuch_database_add_message (notmuch, next);
 	    if (status == NOTMUCH_STATUS_FILE_NOT_EMAIL) {
 		fprintf (stderr, "Note: Ignoring non-mail file: %s\n",
 			 next);
-	    } else {
-		state->count++;
+	    } else if (status != NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) {
+		state->added_messages++;
 	    }
-	    if (state->count % 1000 == 0)
+	    if (state->processed_files % 1000 == 0)
 		add_files_print_progress (state);
 	} else if (S_ISDIR (st.st_mode)) {
 	    add_files (notmuch, next, state);
@@ -342,8 +349,9 @@ setup_command (int argc, char *argv[])
 
     printf ("Next, we'll inspect the messages and create a database of threads:\n");
 
-    add_files_state.total_messages = count;
-    add_files_state.count = 0;
+    add_files_state.total_files = count;
+    add_files_state.processed_files = 0;
+    add_files_state.added_messages = 0;
     gettimeofday (&add_files_state.tv_start, NULL);
 
     add_files (notmuch, mail_directory, &add_files_state);
@@ -351,9 +359,16 @@ setup_command (int argc, char *argv[])
     gettimeofday (&tv_now, NULL);
     elapsed = tv_elapsed (add_files_state.tv_start,
 			  tv_now);
-    printf ("Added %d total messages in ", add_files_state.count);
+    printf ("Processed %d total files in ", add_files_state.processed_files);
     print_formatted_seconds (elapsed);
-    printf (" (%d messages/sec.).                 \n", (int) (add_files_state.count / elapsed));
+    printf (" (%d files/sec.).                 \n",
+	    (int) (add_files_state.processed_files / elapsed));
+    printf ("Added %d unique messages to the database.\n\n",
+	    add_files_state.added_messages);
+
+    printf ("When new mail is delivered to %s in the future,\n"
+	    "run \"notmuch new\" to add it to the database.\n",
+	    mail_directory);
 
   DONE:
     if (mail_directory)
-- 
2.45.2