mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
lib/config: add notmuch_config_key_{get,set}
By using an enum we can have better error detection than copy pasting key strings around. The question of what layer this belongs in is a bit tricky. Historically most of the keys are defined by the CLI. On the other hand features like excludes are supported in the library/bindings, and it makes sense to configure them from the library as well. The somewhat long prefix for notmuch_config_t is to avoid collisions with the existing usage in notmuch-client.h.
This commit is contained in:
parent
867d7352a7
commit
d6bd87a712
3 changed files with 128 additions and 0 deletions
|
@ -279,3 +279,37 @@ _notmuch_config_load_from_file (notmuch_database_t *notmuch,
|
|||
DONE:
|
||||
return status;
|
||||
}
|
||||
|
||||
const char *
|
||||
_notmuch_config_key_to_string (notmuch_config_key_t key) {
|
||||
switch (key) {
|
||||
case NOTMUCH_CONFIG_DATABASE_PATH:
|
||||
return "database.path";
|
||||
case NOTMUCH_CONFIG_EXCLUDE_TAGS:
|
||||
return "search.exclude_tags";
|
||||
case NOTMUCH_CONFIG_NEW_TAGS:
|
||||
return "new.tags";
|
||||
case NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS:
|
||||
return "maildir.synchronize_flags";
|
||||
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
|
||||
return "user.primary_email";
|
||||
case NOTMUCH_CONFIG_OTHER_EMAIL:
|
||||
return "user.other_email";
|
||||
case NOTMUCH_CONFIG_USER_NAME:
|
||||
return "user.name";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key) {
|
||||
|
||||
return _notmuch_string_map_get (notmuch->config, _notmuch_config_key_to_string (key));
|
||||
}
|
||||
|
||||
notmuch_status_t
|
||||
notmuch_config_set (notmuch_database_t *notmuch, notmuch_config_key_t key, const char *val) {
|
||||
|
||||
return notmuch_database_set_config (notmuch, _notmuch_config_key_to_string (key), val);
|
||||
}
|
||||
|
|
|
@ -2325,6 +2325,11 @@ notmuch_filenames_destroy (notmuch_filenames_t *filenames);
|
|||
* set config 'key' to 'value'
|
||||
*
|
||||
* @since libnotmuch 4.4 (notmuch 0.23)
|
||||
* @retval #NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in
|
||||
* read-only mode so message cannot be modified.
|
||||
* @retval #NOTMUCH_STATUS_XAPIAN_EXCEPTION: an exception was thrown
|
||||
* accessing the database.
|
||||
* @retval #NOTMUCH_STATUS_SUCCESS
|
||||
*/
|
||||
notmuch_status_t
|
||||
notmuch_database_set_config (notmuch_database_t *db, const char *key, const char *value);
|
||||
|
@ -2339,6 +2344,7 @@ notmuch_database_set_config (notmuch_database_t *db, const char *key, const char
|
|||
* caller.
|
||||
*
|
||||
* @since libnotmuch 4.4 (notmuch 0.23)
|
||||
*
|
||||
*/
|
||||
notmuch_status_t
|
||||
notmuch_database_get_config (notmuch_database_t *db, const char *key, char **value);
|
||||
|
@ -2400,6 +2406,56 @@ void
|
|||
notmuch_config_list_destroy (notmuch_config_list_t *config_list);
|
||||
|
||||
|
||||
/**
|
||||
* Configuration keys known to libnotmuch
|
||||
*/
|
||||
typedef enum _notmuch_config_key {
|
||||
NOTMUCH_CONFIG_FIRST,
|
||||
NOTMUCH_CONFIG_DATABASE_PATH = NOTMUCH_CONFIG_FIRST,
|
||||
NOTMUCH_CONFIG_EXCLUDE_TAGS,
|
||||
NOTMUCH_CONFIG_NEW_TAGS,
|
||||
NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS,
|
||||
NOTMUCH_CONFIG_PRIMARY_EMAIL,
|
||||
NOTMUCH_CONFIG_OTHER_EMAIL,
|
||||
NOTMUCH_CONFIG_USER_NAME,
|
||||
NOTMUCH_CONFIG_LAST
|
||||
} notmuch_config_key_t;
|
||||
|
||||
/**
|
||||
* get a configuration value from an open database.
|
||||
*
|
||||
* This value reflects all configuration information given at the time
|
||||
* the database was opened.
|
||||
*
|
||||
* @param[in] notmuch database
|
||||
* @param[in] key configuration key
|
||||
*
|
||||
* @since libnotmuch 5.4 (notmuch 0.32)
|
||||
*
|
||||
* @retval NULL if 'key' unknown or if no value is known for
|
||||
* 'key'. Otherwise returns a string owned by notmuch which should
|
||||
* not be modified nor freed by the caller.
|
||||
*/
|
||||
const char *
|
||||
notmuch_config_get (notmuch_database_t *notmuch, notmuch_config_key_t key);
|
||||
|
||||
/**
|
||||
* set a configuration value from in an open database.
|
||||
*
|
||||
* This value reflects all configuration information given at the time
|
||||
* the database was opened.
|
||||
*
|
||||
* @param[in,out] notmuch database open read/write
|
||||
* @param[in] key configuration key
|
||||
* @param[in] val configuration value
|
||||
*
|
||||
* @since libnotmuch 5.4 (notmuch 0.32)
|
||||
*
|
||||
* @retval returns any return value for notmuch_database_set_config.
|
||||
*/
|
||||
notmuch_status_t
|
||||
notmuch_config_set (notmuch_database_t *notmuch, notmuch_config_key_t key, const char *val);
|
||||
|
||||
/**
|
||||
* get the current default indexing options for a given database.
|
||||
*
|
||||
|
|
|
@ -201,6 +201,44 @@ EOF
|
|||
test_expect_equal_file EXPECTED OUTPUT
|
||||
restore_database
|
||||
|
||||
backup_database
|
||||
test_begin_subtest "get config by key"
|
||||
notmuch config set test.key1 overridden
|
||||
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
|
||||
{
|
||||
printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||
EXPECT0(notmuch_database_set_config (db, "maildir.synchronize_flags", "false"));
|
||||
printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||
}
|
||||
EOF
|
||||
cat <<'EOF' >EXPECTED
|
||||
== stdout ==
|
||||
before = true
|
||||
after = false
|
||||
== stderr ==
|
||||
EOF
|
||||
test_expect_equal_file EXPECTED OUTPUT
|
||||
restore_database
|
||||
|
||||
backup_database
|
||||
test_begin_subtest "set config by key"
|
||||
notmuch config set test.key1 overridden
|
||||
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
|
||||
{
|
||||
printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||
EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS, "false"));
|
||||
printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
|
||||
}
|
||||
EOF
|
||||
cat <<'EOF' >EXPECTED
|
||||
== stdout ==
|
||||
before = true
|
||||
after = false
|
||||
== stderr ==
|
||||
EOF
|
||||
test_expect_equal_file EXPECTED OUTPUT
|
||||
restore_database
|
||||
|
||||
backup_database
|
||||
test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
|
||||
notmuch config set test.key1 overridden
|
||||
|
|
Loading…
Reference in a new issue