Add notmuch_status_to_string function.
authorCarl Worth <cworth@cworth.org>
Wed, 21 Oct 2009 23:12:53 +0000 (16:12 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 21 Oct 2009 23:12:53 +0000 (16:12 -0700)
Be kind and let the user print error messages, not just error
codes.

database.cc
notmuch.c
notmuch.h

index b5986627336f4c55442fddf71ef0353ee42c8aa8..5049b47e9ef593d44b586bc67d37064f79dc0a84 100644 (file)
 
 using namespace std;
 
+const char *
+notmuch_status_to_string (notmuch_status_t status)
+{
+    switch (status) {
+    case NOTMUCH_STATUS_SUCCESS:
+       return "No error occurred";
+    case NOTMUCH_STATUS_XAPIAN_EXCEPTION:
+       return "A Xapian exception occurred";
+    case NOTMUCH_STATUS_FILE_NOT_EMAIL:
+       return "File is not an email";
+    case NOTMUCH_STATUS_NULL_POINTER:
+       return "Erroneous NULL pointer";
+    case NOTMUCH_STATUS_TAG_TOO_LONG:
+       return "Tag value is too long";
+    default:
+    case NOTMUCH_STATUS_LAST_STATUS:
+       return "Unknown error status value";
+    }
+}
+
 /* "128 bits of thread-id ought to be enough for anybody" */
 #define NOTMUCH_THREAD_ID_BITS  128
 #define NOTMUCH_THREAD_ID_DIGITS (NOTMUCH_THREAD_ID_BITS / 4)
index bc04bc1b7ea5c788fb36d610702a930ee60a31d3..e1409209e43694aca6f5896deb1f7484d9d3d2ac 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -527,8 +527,11 @@ restore_command (int argc, char *argv[])
                    continue;
                status = notmuch_message_add_tag (message, tag);
                if (status) {
-                   fprintf (stderr, "Error applying tag %s to message %s.\n",
+                   fprintf (stderr,
+                            "Error applying tag %s to message %s:\n",
                             tag, message_id);
+                   fprintf (stderr, "%s\n",
+                            notmuch_status_to_string (status));
                }
            }
 
index 02c743aa60b192ffd398d94a0b027006957c3910..912cbd2660af90d6f636b07f2acfd3d4ed8f3757 100644 (file)
--- a/notmuch.h
+++ b/notmuch.h
@@ -49,6 +49,10 @@ typedef int notmuch_bool_t;
  *
  * NOTMUCH_STATUS_SUCCESS: No error occurred.
  *
+ * XXX: We don't really want to expose this lame XAPIAN_EXCEPTION
+ * value. Instead we should map to things like DATABASE_LOCKED or
+ * whatever.
+ *
  * NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred
  *
  * NOTMUCH_STATUS_FILE_NOT_EMAIL: A file was presented that doesn't
@@ -72,6 +76,13 @@ typedef enum _notmuch_status {
     NOTMUCH_STATUS_LAST_STATUS
 } notmuch_status_t;
 
+/* Get a string representation of a notmuch_status_t value.
+ *
+ * The result is readonly.
+ */
+const char *
+notmuch_status_to_string (notmuch_status_t status);
+
 /* Various opaque data types. For each notmuch_<foo>_t see the various
  * notmuch_<foo> functions below. */
 typedef struct _notmuch_database notmuch_database_t;