cli: abstract common config get/set code

Pretty straightforward abstraction similar to get/set list.
This commit is contained in:
Jani Nikula 2014-01-17 18:38:58 +02:00 committed by David Bremner
parent 075d53dde5
commit 3b36898f0b

View file

@ -496,6 +496,32 @@ notmuch_config_is_new (notmuch_config_t *config)
return config->is_new; return config->is_new;
} }
static const char *
_config_get (notmuch_config_t *config, char **field,
const char *group, const char *key)
{
/* read from config file and cache value, if not cached already */
if (*field == NULL) {
char *value;
value = g_key_file_get_string (config->key_file, group, key, NULL);
if (value) {
*field = talloc_strdup (config, value);
free (value);
}
}
return *field;
}
static void
_config_set (notmuch_config_t *config, char **field,
const char *group, const char *key, const char *value)
{
g_key_file_set_string (config->key_file, group, key, value);
/* drop the cached value */
talloc_free (*field);
*field = NULL;
}
static const char ** static const char **
_config_get_list (notmuch_config_t *config, _config_get_list (notmuch_config_t *config,
@ -504,6 +530,7 @@ _config_get_list (notmuch_config_t *config,
{ {
assert(outlist); assert(outlist);
/* read from config file and cache value, if not cached already */
if (*outlist == NULL) { if (*outlist == NULL) {
char **inlist = g_key_file_get_string_list (config->key_file, char **inlist = g_key_file_get_string_list (config->key_file,
@ -535,6 +562,8 @@ _config_set_list (notmuch_config_t *config,
size_t length, const char ***config_var ) size_t length, const char ***config_var )
{ {
g_key_file_set_string_list (config->key_file, group, name, list, length); g_key_file_set_string_list (config->key_file, group, name, list, length);
/* drop the cached value */
talloc_free (*config_var); talloc_free (*config_var);
*config_var = NULL; *config_var = NULL;
} }
@ -542,85 +571,40 @@ _config_set_list (notmuch_config_t *config,
const char * const char *
notmuch_config_get_database_path (notmuch_config_t *config) notmuch_config_get_database_path (notmuch_config_t *config)
{ {
char *path; return _config_get (config, &config->database_path, "database", "path");
if (config->database_path == NULL) {
path = g_key_file_get_string (config->key_file,
"database", "path", NULL);
if (path) {
config->database_path = talloc_strdup (config, path);
free (path);
}
}
return config->database_path;
} }
void void
notmuch_config_set_database_path (notmuch_config_t *config, notmuch_config_set_database_path (notmuch_config_t *config,
const char *database_path) const char *database_path)
{ {
g_key_file_set_string (config->key_file, _config_set (config, &config->database_path, "database", "path", database_path);
"database", "path", database_path);
talloc_free (config->database_path);
config->database_path = NULL;
} }
const char * const char *
notmuch_config_get_user_name (notmuch_config_t *config) notmuch_config_get_user_name (notmuch_config_t *config)
{ {
char *name; return _config_get (config, &config->user_name, "user", "name");
if (config->user_name == NULL) {
name = g_key_file_get_string (config->key_file,
"user", "name", NULL);
if (name) {
config->user_name = talloc_strdup (config, name);
free (name);
}
}
return config->user_name;
} }
void void
notmuch_config_set_user_name (notmuch_config_t *config, notmuch_config_set_user_name (notmuch_config_t *config,
const char *user_name) const char *user_name)
{ {
g_key_file_set_string (config->key_file, _config_set (config, &config->user_name, "user", "name", user_name);
"user", "name", user_name);
talloc_free (config->user_name);
config->user_name = NULL;
} }
const char * const char *
notmuch_config_get_user_primary_email (notmuch_config_t *config) notmuch_config_get_user_primary_email (notmuch_config_t *config)
{ {
char *email; return _config_get (config, &config->user_primary_email, "user", "primary_email");
if (config->user_primary_email == NULL) {
email = g_key_file_get_string (config->key_file,
"user", "primary_email", NULL);
if (email) {
config->user_primary_email = talloc_strdup (config, email);
free (email);
}
}
return config->user_primary_email;
} }
void void
notmuch_config_set_user_primary_email (notmuch_config_t *config, notmuch_config_set_user_primary_email (notmuch_config_t *config,
const char *primary_email) const char *primary_email)
{ {
g_key_file_set_string (config->key_file, _config_set (config, &config->user_primary_email, "user", "primary_email", primary_email);
"user", "primary_email", primary_email);
talloc_free (config->user_primary_email);
config->user_primary_email = NULL;
} }
const char ** const char **