diff --git a/lib/mu-store-priv.hh b/lib/mu-store-priv.hh index afe11e84..fc03eb71 100644 --- a/lib/mu-store-priv.hh +++ b/lib/mu-store-priv.hh @@ -51,7 +51,7 @@ public: /* create a read-write MuStore */ _MuStore (const char *path, const char *contacts_path, const char **my_addresses, - bool rebuild) { + bool rebuild) :_my_addresses(NULL) { init (path, contacts_path, my_addresses, rebuild, false); @@ -88,7 +88,8 @@ public: MU_WRITE_LOG ("%s: opened %s read-only", __FUNCTION__, this->path()); } - void init (const char *path, const char *contacts_path, const char **my_addresses, + void init (const char *path, const char *contacts_path, + const char **my_addresses, bool rebuild, bool read_only) { _batch_size = DEFAULT_BATCH_SIZE; @@ -100,16 +101,24 @@ public: _ref_count = 1; _version = NULL; - /* copy 'my adresses' */ - _my_addresses = NULL; + set_my_addresses (my_addresses); + } + + void set_my_addresses (const char **my_addresses) { + + if (_my_addresses) { + mu_str_free_list (_my_addresses); + _my_addresses = NULL; + } + while (my_addresses && *my_addresses) { _my_addresses = g_slist_prepend (_my_addresses, g_strdup (*my_addresses)); ++my_addresses; } - } + void check_set_version () { /* check version...*/ gchar *version; diff --git a/lib/mu-store.cc b/lib/mu-store.cc index 587958f4..a27b3440 100644 --- a/lib/mu-store.cc +++ b/lib/mu-store.cc @@ -58,7 +58,6 @@ mu_store_unref (MuStore *store) { g_return_val_if_fail (store, NULL); - if (store->unref() == 0) { try { delete store; } MU_XAPIAN_CATCH_BLOCK; } @@ -117,3 +116,12 @@ mu_store_database_is_locked (const gchar *xpath) return FALSE; } + + +void +mu_store_set_my_addresses (MuStore *store, const char **my_addresses) +{ + g_return_if_fail (store); + + store->set_my_addresses (my_addresses); +} diff --git a/lib/mu-store.h b/lib/mu-store.h index 431c0fe4..c975363a 100644 --- a/lib/mu-store.h +++ b/lib/mu-store.h @@ -133,6 +133,18 @@ XapianDatabase* mu_store_get_read_only_database (MuStore *store); void mu_store_set_batch_size (MuStore *store, guint batchsize); +/** + * register a char** of email addresses as 'my' addresses, ie. mark + * message that have these addresses in one of the address fields as + * 'personal' (e.g., in mu-contacts). calling this function overrides + * any 'my addresses' that were set before, using this function or + * through mu_store_new_writable + * + * @param store a valid store object + * @param my_addresses a char** of email addresses + */ +void mu_store_set_my_addresses (MuStore *store, const char **my_addresses); + /** * get the numbers of documents in the database