]> granicus.if.org Git - neomutt/commitdiff
notmuch: single point for closing database
authorAustin Ray <austin@austinray.io>
Sun, 4 Nov 2018 01:11:50 +0000 (21:11 -0400)
committerRichard Russon <rich@flatcap.org>
Sat, 10 Nov 2018 11:30:31 +0000 (11:30 +0000)
There are three points where a database is closed. Each point duplicates
the code for different versions of notmuch. Implemented a new method for
the version-specific notmuch code is handled. This method takes in a
database and closes it.

notmuch/mutt_notmuch.c
notmuch/nm_db.c
notmuch/notmuch_private.h

index 505bfac5e222c8b1dce3663a8249f86df16c61a4..b130d3c8f6df45d5d7ae74d7b5fed57a55b2fe12 100644 (file)
@@ -116,11 +116,7 @@ void nm_adata_free(void **ptr)
   struct NmAccountData *adata = *ptr;
   if (adata->db)
   {
-#ifdef NOTMUCH_API_3
-    notmuch_database_destroy(adata->db);
-#else
-    notmuch_database_close(adata->db);
-#endif
+    nm_db_free(adata->db);
     adata->db = NULL;
   }
 
@@ -1962,11 +1958,7 @@ int nm_nonctx_get_count(struct Mailbox *m)
 done:
   if (db)
   {
-#ifdef NOTMUCH_API_3
-    notmuch_database_destroy(db);
-#else
-    notmuch_database_close(db);
-#endif
+    nm_db_free(db);
     mutt_debug(1, "nm: count close DB\n");
   }
   url_free(&url);
index ac8bf151f837666789b4c82d565fa6ac78b8350a..8f0081006f5582cd1f59552b2a46a1ece22a649f 100644 (file)
@@ -47,10 +47,11 @@ const char *nm_db_get_filename(struct Mailbox *m)
     return NULL;
 
   char *db_filename = mdata->db_url.path ? mdata->db_url.path : NmDefaultUri;
-  if (!db_filename)
-    db_filename = Folder;
-  if (!db_filename)
+  if (!db_filename && !Folder)
     return NULL;
+
+  db_filename = Folder;
+
   if (nm_path_probe(db_filename, NULL) == MUTT_NOTMUCH)
     db_filename += NmUriProtocolLen;
 
@@ -135,12 +136,8 @@ notmuch_database_t *nm_db_do_open(const char *filename, bool writable, bool verb
  */
 notmuch_database_t *nm_db_get(struct Mailbox *m, bool writable)
 {
-  if (!m || (m->magic != MUTT_NOTMUCH))
-    return NULL;
-  struct Account *a = m->account;
-  if (!a)
-    return NULL;
-  struct NmAccountData *adata = a->adata;
+  struct NmAccountData *adata = nm_adata_get(m);
+
   if (!adata)
     return NULL;
 
@@ -168,16 +165,25 @@ int nm_db_release(struct Mailbox *m)
     return -1;
 
   mutt_debug(1, "nm: db close\n");
-#ifdef NOTMUCH_API_3
-  notmuch_database_destroy(adata->db);
-#else
-  notmuch_database_close(adata->db);
-#endif
+  nm_db_free(adata->db);
   adata->db = NULL;
   adata->longrun = false;
   return 0;
 }
 
+/**
+ * nm_db_free - decoupled way to close a Notmuch database
+ * @param db Notmuch database
+ */
+void nm_db_free(notmuch_database_t *db)
+{
+#ifdef NOTMUCH_API_3
+  notmuch_database_destroy(db);
+#else
+  notmuch_database_close(db);
+#endif
+}
+
 /**
  * nm_db_trans_begin - Start a Notmuch database transaction
  * @param m Mailbox
index 3d537d632db8f3d5b40d60027ec104c95377d081..2cbc753f8f03ccc20c06c9611e6e4d00cfc57a60 100644 (file)
@@ -96,6 +96,7 @@ struct NmEmailData
 
 void                nm_db_debug_check (struct Mailbox *m);
 notmuch_database_t *nm_db_do_open     (const char *filename, bool writable, bool verbose);
+void                nm_db_free        (notmuch_database_t *db);
 const char *        nm_db_get_filename(struct Mailbox *m);
 int                 nm_db_get_mtime   (struct Mailbox *m, time_t *mtime);
 notmuch_database_t *nm_db_get         (struct Mailbox *m, bool writable);