void *children; /* talloc_context */
};
+struct _notmuch_config_pairs {
+ notmuch_string_map_iterator_t *iter;
+};
+
static const char *_notmuch_config_key_to_string (notmuch_config_key_t key);
static int
notmuch_config_values_t *
notmuch_config_get_values (notmuch_database_t *notmuch, notmuch_config_key_t key)
{
- notmuch_config_values_t *values = NULL;
- bool ok = false;
-
const char *key_str = _notmuch_config_key_to_string (key);
if (! key_str)
- goto DONE;
+ return NULL;
+
+ return notmuch_config_get_values_string (notmuch, key_str);
+}
+
+notmuch_config_values_t *
+notmuch_config_get_values_string (notmuch_database_t *notmuch, const char *key_str)
+{
+ notmuch_config_values_t *values = NULL;
+ bool ok = false;
values = talloc (notmuch, notmuch_config_values_t);
if (unlikely (! values))
talloc_free (values);
}
+notmuch_config_pairs_t *
+notmuch_config_get_pairs (notmuch_database_t *notmuch,
+ const char *prefix)
+{
+ notmuch_config_pairs_t *pairs = talloc (notmuch, notmuch_config_pairs_t);
+
+ pairs->iter = _notmuch_string_map_iterator_create (notmuch->config, prefix, false);
+ return pairs;
+}
+
+notmuch_bool_t
+notmuch_config_pairs_valid (notmuch_config_pairs_t *pairs)
+{
+ return _notmuch_string_map_iterator_valid (pairs->iter);
+}
+
+void
+notmuch_config_pairs_move_to_next (notmuch_config_pairs_t *pairs)
+{
+ _notmuch_string_map_iterator_move_to_next (pairs->iter);
+}
+
+const char *
+notmuch_config_pairs_key (notmuch_config_pairs_t *pairs)
+{
+ return _notmuch_string_map_iterator_key (pairs->iter);
+}
+
+const char *
+notmuch_config_pairs_value (notmuch_config_pairs_t *pairs)
+{
+ return _notmuch_string_map_iterator_value (pairs->iter);
+}
+
+void
+notmuch_config_pairs_destroy (notmuch_config_pairs_t *pairs)
+{
+ _notmuch_string_map_iterator_destroy (pairs->iter);
+ talloc_free (pairs);
+}
+
notmuch_status_t
_notmuch_config_load_from_file (notmuch_database_t *notmuch,
GKeyFile *file)
switch (key) {
case NOTMUCH_CONFIG_DATABASE_PATH:
return "database.path";
+ case NOTMUCH_CONFIG_MAIL_ROOT:
+ return "database.mail_root";
case NOTMUCH_CONFIG_HOOK_DIR:
return "database.hook_dir";
+ case NOTMUCH_CONFIG_BACKUP_DIR:
+ return "database.backup_dir";
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
return "search.exclude_tags";
case NOTMUCH_CONFIG_NEW_TAGS:
}
static const char *
-_notmuch_config_default (void *ctx, notmuch_config_key_t key)
+_notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key)
{
char *path;
case NOTMUCH_CONFIG_DATABASE_PATH:
path = getenv ("MAILDIR");
if (path)
- path = talloc_strdup (ctx, path);
+ path = talloc_strdup (notmuch, path);
else
- path = talloc_asprintf (ctx, "%s/mail",
+ path = talloc_asprintf (notmuch, "%s/mail",
getenv ("HOME"));
return path;
+ case NOTMUCH_CONFIG_MAIL_ROOT:
+ /* by default, mail root is the same as database path */
+ return notmuch_database_get_path (notmuch);
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
return "";
case NOTMUCH_CONFIG_NEW_TAGS:
case NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS:
return "true";
case NOTMUCH_CONFIG_HOOK_DIR:
+ case NOTMUCH_CONFIG_BACKUP_DIR:
case NOTMUCH_CONFIG_NEW_IGNORE:
case NOTMUCH_CONFIG_USER_NAME:
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
void
_notmuch_config_cache (notmuch_database_t *notmuch, notmuch_config_key_t key, const char *val)
{
+ if (notmuch->config == NULL)
+ notmuch->config = _notmuch_string_map_create (notmuch);
+
_notmuch_string_map_set (notmuch->config, _notmuch_config_key_to_string (key), val);
}