]> git.notmuchmail.org Git - notmuch/blobdiff - lib/database.cc
Make maildir synchronization configurable
[notmuch] / lib / database.cc
index 414460d276b31f7df23895d51749540fc4876c47..293d21aa01ff70c03ecdcbe3221c92dca21247f5 100644 (file)
@@ -24,7 +24,6 @@
 
 #include <sys/time.h>
 #include <signal.h>
-#include <xapian.h>
 
 #include <glib.h> /* g_free, GPtrArray, GHashTable */
 
@@ -689,6 +688,8 @@ notmuch_database_open (const char *path,
        notmuch = NULL;
     }
 
+    notmuch_database_set_maildir_sync (notmuch, FALSE);
+
   DONE:
     if (notmuch_path)
        free (notmuch_path);
@@ -718,6 +719,13 @@ notmuch_database_close (notmuch_database_t *notmuch)
     talloc_free (notmuch);
 }
 
+void
+notmuch_database_set_maildir_sync (notmuch_database_t *database,
+                                  notmuch_bool_t maildir_sync)
+{
+    database->maildir_sync = maildir_sync;
+}
+
 const char *
 notmuch_database_get_path (notmuch_database_t *notmuch)
 {
@@ -1643,6 +1651,13 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
 
        _notmuch_message_add_filename (message, filename);
 
+       /* This is a new message or it has a new filename and as such,
+        * its tags in database either do not exists or might be out
+        * of date. We assign the tags later in notmuch new, but until
+        * then we should not synchronize the tags back to the maildir
+        * flags (if notmuch is configured to do so). */
+       notmuch_message_set_flag(message, NOTMUCH_MESSAGE_FLAG_TAGS_INVALID, TRUE);
+
        /* Is this a newly created message object? */
        if (private_status == NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND) {
            _notmuch_message_add_term (message, "type", "mail");
@@ -1671,7 +1686,8 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
 
   DONE:
     if (message) {
-       if (ret == NOTMUCH_STATUS_SUCCESS && message_ret)
+       if ((ret == NOTMUCH_STATUS_SUCCESS ||
+            ret == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) && message_ret)
            *message_ret = message;
        else
            notmuch_message_destroy (message);