X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=lib%2Fconfig.cc;h=0fe9a26823c3dfa4e1cc9c4369b54c3ccf3ff2c0;hb=fd6f8e6c30e0443d1ead248047ab572120df85e9;hp=c07b607b840ddae8cdcfbb4a302d545c5cc89ab6;hpb=d6bd87a712c6df3126589ec223f4c599fa8450b5;p=notmuch diff --git a/lib/config.cc b/lib/config.cc index c07b607b..0fe9a268 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -31,6 +31,13 @@ struct _notmuch_config_list { char *current_val; }; +struct _notmuch_config_values { + const char *iterator; + size_t tok_len; +}; + +static const char * _notmuch_config_key_to_string (notmuch_config_key_t key); + static int _notmuch_config_list_destroy (notmuch_config_list_t *list) { @@ -246,6 +253,53 @@ _notmuch_config_load_from_database (notmuch_database_t *notmuch) return status; } +notmuch_config_values_t * +notmuch_config_get_values (notmuch_database_t *notmuch, notmuch_config_key_t key) +{ + notmuch_config_values_t *values; + + const char *str; + const char *key_str = _notmuch_config_key_to_string (key); + + if (! key_str) + return NULL; + + str = _notmuch_string_map_get (notmuch->config, key_str); + if (! str) + return NULL; + + values = talloc (notmuch, notmuch_config_values_t); + if (unlikely(! values)) + return NULL; + + values->iterator = strsplit_len (str, ';', &(values->tok_len)); + return values; +} + +notmuch_bool_t +notmuch_config_values_valid (notmuch_config_values_t *values) { + if (! values) + return false; + + return (values->iterator != NULL); +} + +const char * +notmuch_config_values_get (notmuch_config_values_t *values) { + return talloc_strndup (values, values->iterator, values->tok_len); +} + +void +notmuch_config_values_move_to_next (notmuch_config_values_t *values) { + values->iterator += values->tok_len; + values->iterator = strsplit_len (values->iterator, ';', &(values->tok_len)); +} + +void +notmuch_config_values_destroy (notmuch_config_values_t *values) { + talloc_free (values); +} + notmuch_status_t _notmuch_config_load_from_file (notmuch_database_t *notmuch, GKeyFile *file) @@ -280,7 +334,7 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch, return status; } -const char * +static const char * _notmuch_config_key_to_string (notmuch_config_key_t key) { switch (key) { case NOTMUCH_CONFIG_DATABASE_PATH: @@ -302,6 +356,52 @@ _notmuch_config_key_to_string (notmuch_config_key_t key) { } } +static const char * +_notmuch_config_default (void *ctx, notmuch_config_key_t key) { + char *path; + + switch (key) { + case NOTMUCH_CONFIG_DATABASE_PATH: + path = getenv ("MAILDIR"); + if (path) + path = talloc_strdup (ctx, path); + else + path = talloc_asprintf (ctx, "%s/mail", + getenv ("HOME")); + return path; + case NOTMUCH_CONFIG_EXCLUDE_TAGS: + return ""; + case NOTMUCH_CONFIG_NEW_TAGS: + return "inbox;unread"; + case NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS: + return "true"; + case NOTMUCH_CONFIG_USER_NAME: + case NOTMUCH_CONFIG_PRIMARY_EMAIL: + case NOTMUCH_CONFIG_OTHER_EMAIL: + return NULL; + default: + case NOTMUCH_CONFIG_LAST: + INTERNAL_ERROR ("illegal key enum %d", key); + } +} + +notmuch_status_t +_notmuch_config_load_defaults (notmuch_database_t *notmuch) { + notmuch_config_key_t key; + for (key = NOTMUCH_CONFIG_FIRST; + key < NOTMUCH_CONFIG_LAST; + key = notmuch_config_key_t(key + 1)) { + const char *val = notmuch_config_get (notmuch, key); + const char *key_string = _notmuch_config_key_to_string (key); + + val = _notmuch_string_map_get (notmuch->config, key_string); + if (! val) { + _notmuch_string_map_set (notmuch->config, key_string, _notmuch_config_default (notmuch, key)); + } + } + return NOTMUCH_STATUS_SUCCESS; +} + const char * notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key) {