aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/message.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/message.cc')
-rw-r--r--lib/message.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/message.cc b/lib/message.cc
index e0b8a8e1..7ba06c99 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -168,9 +168,15 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch,
{
notmuch_message_t *message;
Xapian::Document doc;
+ Xapian::WritableDatabase *db;
unsigned int doc_id;
char *term;
+ if (notmuch->mode == NOTMUCH_DATABASE_MODE_READONLY) {
+ *status_ret = NOTMUCH_PRIVATE_STATUS_READONLY_DATABASE;
+ return NULL;
+ }
+
*status_ret = NOTMUCH_PRIVATE_STATUS_SUCCESS;
message = notmuch_database_find_message (notmuch, message_id);
@@ -184,13 +190,14 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch,
return NULL;
}
+ db = static_cast<Xapian::WritableDatabase *> (notmuch->xapian_db);
try {
doc.add_term (term);
talloc_free (term);
doc.add_value (NOTMUCH_VALUE_MESSAGE_ID, message_id);
- doc_id = notmuch->xapian_db->add_document (doc);
+ doc_id = db->add_document (doc);
} catch (const Xapian::Error &error) {
*status_ret = NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION;
return NULL;
@@ -543,8 +550,12 @@ _notmuch_message_ensure_thread_id (notmuch_message_t *message)
void
_notmuch_message_sync (notmuch_message_t *message)
{
- Xapian::WritableDatabase *db = message->notmuch->xapian_db;
+ Xapian::WritableDatabase *db;
+
+ if (message->notmuch->mode == NOTMUCH_DATABASE_MODE_READONLY)
+ return;
+ db = static_cast <Xapian::WritableDatabase *> (message->notmuch->xapian_db);
db->replace_document (message->doc_id, message->doc);
}