]> git.notmuchmail.org Git - notmuch/blobdiff - lib/message.cc
message: add flags to notmuch_message_t
[notmuch] / lib / message.cc
index 7ba06c99ae38fd7680b7fe34475d2bdbc2680541..e0834f1c7816c6c66a9f0f4286ce33ef0b117f3c 100644 (file)
@@ -37,6 +37,7 @@ struct _notmuch_message {
     char *filename;
     notmuch_message_file_t *message_file;
     notmuch_message_list_t *replies;
+    unsigned long flags;
 
     Xapian::Document doc;
 };
@@ -108,6 +109,7 @@ _notmuch_message_create (const void *talloc_owner,
     message->doc_id = doc_id;
 
     message->frozen = 0;
+    message->flags = 0;
 
     /* Each of these will be lazily created as needed. */
     message->message_id = NULL;
@@ -172,7 +174,7 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch,
     unsigned int doc_id;
     char *term;
 
-    if (notmuch->mode == NOTMUCH_DATABASE_MODE_READONLY) {
+    if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY) {
        *status_ret = NOTMUCH_PRIVATE_STATUS_READONLY_DATABASE;
        return NULL;
     }
@@ -199,6 +201,9 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch,
 
        doc_id = db->add_document (doc);
     } catch (const Xapian::Error &error) {
+       fprintf (stderr, "A Xapian exception occurred creating message: %s\n",
+                error.get_msg().c_str());
+       notmuch->exception_reported = TRUE;
        *status_ret = NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION;
        return NULL;
     }
@@ -408,10 +413,14 @@ _notmuch_message_set_filename (notmuch_message_t *message,
     db_path = notmuch_database_get_path (message->notmuch);
     db_path_len = strlen (db_path);
 
-    if (*s == '/' && strncmp (s, db_path, db_path_len) == 0
-       && strlen (s) > db_path_len)
+    if (*s == '/' && strlen (s) > db_path_len
+       && strncmp (s, db_path, db_path_len) == 0)
     {
-       s += db_path_len + 1;
+       s += db_path_len;
+       while (*s == '/') s++;
+
+       if (!*s)
+               INTERNAL_ERROR ("Message filename was same as db prefix.");
     }
 
     message->doc.set_data (s);
@@ -438,6 +447,23 @@ notmuch_message_get_filename (notmuch_message_t *message)
     return message->filename;
 }
 
+notmuch_bool_t
+notmuch_message_get_flag (notmuch_message_t *message,
+                         notmuch_message_flag_t flag)
+{
+    return message->flags & (1 << flag);
+}
+
+void
+notmuch_message_set_flag (notmuch_message_t *message,
+                         notmuch_message_flag_t flag, notmuch_bool_t enable)
+{
+    if (enable)
+       message->flags |= (1 << flag);
+    else
+       message->flags &= ~(1 << flag);
+}
+
 time_t
 notmuch_message_get_date (notmuch_message_t *message)
 {
@@ -552,7 +578,7 @@ _notmuch_message_sync (notmuch_message_t *message)
 {
     Xapian::WritableDatabase *db;
 
-    if (message->notmuch->mode == NOTMUCH_DATABASE_MODE_READONLY)
+    if (message->notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY)
        return;
 
     db = static_cast <Xapian::WritableDatabase *> (message->notmuch->xapian_db);