]> git.notmuchmail.org Git - notmuch/blobdiff - lib/directory.cc
lib: replace use of static_cast for writable databases
[notmuch] / lib / directory.cc
index 78637b3ad6236333b9d992ee9d1c7fe87e46f1ad..b9c3d77f663fa3e2b4dbfb596e4e3915546375bc 100644 (file)
@@ -13,7 +13,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see http://www.gnu.org/licenses/ .
+ * along with this program.  If not, see https://www.gnu.org/licenses/ .
  *
  * Author: Carl Worth <cworth@cworth.org>
  */
@@ -32,8 +32,8 @@ _create_filenames_for_terms_with_prefix (void *ctx,
     notmuch_string_list_t *filename_list;
     Xapian::TermIterator i, end;
 
-    i = notmuch->xapian_db->allterms_begin();
-    end = notmuch->xapian_db->allterms_end();
+    i = notmuch->xapian_db->allterms_begin ();
+    end = notmuch->xapian_db->allterms_end ();
     filename_list = _notmuch_database_get_terms_with_prefix (ctx, i, end,
                                                             prefix);
     if (unlikely (filename_list == NULL))
@@ -94,16 +94,15 @@ find_directory_document (notmuch_database_t *notmuch,
  * NOTMUCH_STATUS_SUCCESS and this returns NULL.
  */
 notmuch_directory_t *
-_notmuch_directory_create (notmuch_database_t *notmuch,
-                          const char *path,
-                          notmuch_find_flags_t flags,
-                          notmuch_status_t *status_ret)
+_notmuch_directory_find_or_create (notmuch_database_t *notmuch,
+                                  const char *path,
+                                  notmuch_find_flags_t flags,
+                                  notmuch_status_t *status_ret)
 {
-    Xapian::WritableDatabase *db;
     notmuch_directory_t *directory;
     notmuch_private_status_t private_status;
     const char *db_path;
-    notmuch_bool_t create = (flags & NOTMUCH_FIND_CREATE);
+    bool create = (flags & NOTMUCH_FIND_CREATE);
 
     if (! (notmuch->features & NOTMUCH_FEATURE_DIRECTORY_DOCS)) {
        *status_ret = NOTMUCH_STATUS_UPGRADE_REQUIRED;
@@ -114,7 +113,7 @@ _notmuch_directory_create (notmuch_database_t *notmuch,
 
     path = _notmuch_database_relative_path (notmuch, path);
 
-    if (create && notmuch->mode == NOTMUCH_DATABASE_MODE_READ_ONLY)
+    if (create && _notmuch_database_mode (notmuch) == NOTMUCH_DATABASE_MODE_READ_ONLY)
        INTERNAL_ERROR ("Failure to ensure database is writable");
 
     directory = talloc (notmuch, notmuch_directory_t);
@@ -140,7 +139,7 @@ _notmuch_directory_create (notmuch_database_t *notmuch,
        directory->document_id = directory->doc.get_docid ();
 
        if (private_status == NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND) {
-           if (!create) {
+           if (! create) {
                notmuch_directory_destroy (directory);
                directory = NULL;
                *status_ret = NOTMUCH_STATUS_SUCCESS;
@@ -176,10 +175,10 @@ _notmuch_directory_create (notmuch_database_t *notmuch,
            directory->doc.add_value (NOTMUCH_VALUE_TIMESTAMP,
                                      Xapian::sortable_serialise (0));
 
-           db = static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db);
-
            directory->document_id = _notmuch_database_generate_doc_id (notmuch);
-           db->replace_document (directory->document_id, directory->doc);
+           directory->notmuch->
+               writable_xapian_db
+               -> replace_document (directory->document_id, directory->doc);
            talloc_free (local);
        }
 
@@ -187,9 +186,9 @@ _notmuch_directory_create (notmuch_database_t *notmuch,
            directory->doc.get_value (NOTMUCH_VALUE_TIMESTAMP));
     } catch (const Xapian::Error &error) {
        _notmuch_database_log (notmuch,
-                "A Xapian exception occurred creating a directory: %s.\n",
-                error.get_msg().c_str());
-       notmuch->exception_reported = TRUE;
+                              "A Xapian exception occurred finding/creating a directory: %s.\n",
+                              error.get_msg ().c_str ());
+       notmuch->exception_reported = true;
        notmuch_directory_destroy (directory);
        directory = NULL;
        *status_ret = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
@@ -213,25 +212,26 @@ notmuch_directory_set_mtime (notmuch_directory_t *directory,
                             time_t mtime)
 {
     notmuch_database_t *notmuch = directory->notmuch;
-    Xapian::WritableDatabase *db;
     notmuch_status_t status;
 
     status = _notmuch_database_ensure_writable (notmuch);
     if (status)
        return status;
 
-    db = static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db);
-
     try {
        directory->doc.add_value (NOTMUCH_VALUE_TIMESTAMP,
-                                  Xapian::sortable_serialise (mtime));
+                                 Xapian::sortable_serialise (mtime));
+
+       directory->notmuch
+           ->writable_xapian_db->replace_document (directory->document_id, directory->doc);
+
+       directory->mtime = mtime;
 
-       db->replace_document (directory->document_id, directory->doc);
     } catch (const Xapian::Error &error) {
        _notmuch_database_log (notmuch,
-                "A Xapian exception occurred setting directory mtime: %s.\n",
-                error.get_msg().c_str());
-       notmuch->exception_reported = TRUE;
+                              "A Xapian exception occurred setting directory mtime: %s.\n",
+                              error.get_msg ().c_str ());
+       notmuch->exception_reported = true;
        return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
     }
 
@@ -274,7 +274,7 @@ notmuch_directory_get_child_directories (notmuch_directory_t *directory)
                            directory->document_id);
 
     child_directories = _create_filenames_for_terms_with_prefix (directory,
-                                                directory->notmuch, term);
+                                                                directory->notmuch, term);
 
     talloc_free (term);
 
@@ -285,20 +285,19 @@ notmuch_status_t
 notmuch_directory_delete (notmuch_directory_t *directory)
 {
     notmuch_status_t status;
-    Xapian::WritableDatabase *db;
 
     status = _notmuch_database_ensure_writable (directory->notmuch);
     if (status)
        return status;
 
     try {
-       db = static_cast <Xapian::WritableDatabase *> (directory->notmuch->xapian_db);
-       db->delete_document (directory->document_id);
+       directory->notmuch->
+           writable_xapian_db->delete_document (directory->document_id);
     } catch (const Xapian::Error &error) {
        _notmuch_database_log (directory->notmuch,
                               "A Xapian exception occurred deleting directory entry: %s.\n",
-                              error.get_msg().c_str());
-       directory->notmuch->exception_reported = TRUE;
+                              error.get_msg ().c_str ());
+       directory->notmuch->exception_reported = true;
        status = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
     }
     notmuch_directory_destroy (directory);