diff --git a/src/conf.c b/src/conf.c
index cf87c005d508dd4700fdc9da0f665118b03c3ce3..87fa51e7a05e2b356dc9118d81f09975438bb6af 100644 (file)
--- a/src/conf.c
+++ b/src/conf.c
#include "colors.h"
#include "screen_list.h"
+#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <errno.h>
#define CONF_LYRICS_SHOW_PLUGIN "lyrics-show-plugin"
#define CONF_TEXT_EDITOR "text-editor"
#define CONF_TEXT_EDITOR_ASK "text-editor-ask"
+#define CONF_CHAT_PREFIX "chat-prefix"
#define CONF_SECOND_COLUMN "second-column"
static bool
size_t len = strlen(line), i = 0, j = 0;
char name[MAX_LINE_LENGTH];
char value[MAX_LINE_LENGTH];
- bool match_found;
/* get the name part */
while (i < len && line[i] != '=' && !g_ascii_isspace(line[i]))
value[j++] = line[i++];
value[j] = '\0';
- match_found = true;
-
/* key definition */
if (!strcasecmp(CONF_KEY_DEFINITION, name))
parse_key_definition(value);
options.text_editor_ask = str2bool(value);
#else
{}
+#endif
+ else if (!strcasecmp(name, CONF_CHAT_PREFIX))
+#ifdef ENABLE_CHAT_SCREEN
+ options.chat_prefix = get_format(value);
+#else
+ {}
#endif
else if (!strcasecmp(CONF_SECOND_COLUMN, name))
#ifdef NCMPC_MINI
#else
options.second_column = str2bool(value);
#endif
- else
- match_found = false;
-
- if (!match_found)
+ else {
print_error(_("Unknown configuration parameter"), name);
+ return false;
+ }
- return match_found;
+ return true;
}
static int
read_rc_file(char *filename)
{
+ assert(filename != NULL);
+
FILE *file;
char line[MAX_LINE_LENGTH];
- if (filename == NULL)
- return -1;
-
file = fopen(filename, "r");
if (file == NULL) {
perror(filename);
}
char *
-get_user_key_binding_filename(void)
+build_user_conf_filename(void)
+{
+#ifdef WIN32
+ return g_build_filename(g_get_user_config_dir(), PACKAGE, "ncmpc.conf", NULL);
+#else
+ return g_build_filename(g_get_home_dir(), "." PACKAGE, "config", NULL);
+#endif
+}
+
+char *
+build_system_conf_filename(void)
+{
+#ifdef WIN32
+ const gchar* const *system_data_dirs;
+ gchar *pathname = NULL;
+
+ for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != NULL; system_data_dirs++)
+ {
+ g_message (*system_data_dirs);
+ pathname = g_build_filename(*system_data_dirs, PACKAGE, "ncmpc.conf", NULL);
+ if (g_file_test(pathname, G_FILE_TEST_EXISTS))
+ {
+ break;
+ }
+ else
+ {
+ g_free (pathname);
+ pathname = NULL;
+ }
+ }
+ return pathname;
+#else
+ return g_build_filename(SYSCONFDIR, PACKAGE, "config", NULL);
+#endif
+}
+
+char *
+build_user_key_binding_filename(void)
{
+#ifdef WIN32
+ return g_build_filename(g_get_user_config_dir(), PACKAGE, "keys.conf", NULL);
+#else
return g_build_filename(g_get_home_dir(), "." PACKAGE, "keys", NULL);
+#endif
}
-int
-read_configuration(void)
+static char *
+g_build_system_key_binding_filename(void)
{
- char *filename = NULL;
+#ifdef WIN32
+ const gchar* const *system_data_dirs;
+ gchar *pathname = NULL;
+
+ for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != NULL; system_data_dirs++)
+ {
+ g_message (*system_data_dirs);
+ pathname = g_build_filename(*system_data_dirs, PACKAGE, "keys.conf", NULL);
+ if (g_file_test(pathname, G_FILE_TEST_EXISTS))
+ {
+ break;
+ }
+ else
+ {
+ g_free (pathname);
+ pathname = NULL;
+ }
+ }
+ return pathname;
+#else
+ return g_build_filename(SYSCONFDIR, PACKAGE, "keys", NULL);
+#endif
+}
+static char *
+find_config_file(void)
+{
/* check for command line configuration file */
- if (options.config_file)
- filename = g_strdup(options.config_file);
+ if (options.config_file != NULL)
+ return g_strdup(options.config_file);
/* check for user configuration ~/.ncmpc/config */
- if (filename == NULL) {
- filename = g_build_filename(g_get_home_dir(),
- "." PACKAGE, "config", NULL);
- if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
- g_free(filename);
- filename = NULL;
- }
- }
+ char *filename = build_user_conf_filename();
+ if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ return filename;
+
+ g_free(filename);
/* check for global configuration SYSCONFDIR/ncmpc/config */
- if (filename == NULL) {
- filename = g_build_filename(SYSCONFDIR, PACKAGE, "config", NULL);
- if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
- g_free(filename);
- filename = NULL;
- }
- }
+ filename = build_system_conf_filename();
+ if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ return filename;
- /* load configuration */
- if (filename) {
- read_rc_file(filename);
- g_free(filename);
- filename = NULL;
- }
+ g_free(filename);
+ return NULL;
+}
+static char *
+find_keys_file(void)
+{
/* check for command line key binding file */
- if (options.key_file)
- filename = g_strdup(options.key_file);
+ if (options.key_file != NULL)
+ return g_strdup(options.key_file);
/* check for user key bindings ~/.ncmpc/keys */
- if (filename == NULL) {
- filename = get_user_key_binding_filename();
- if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
- g_free(filename);
- filename = NULL;
- }
- }
+ char *filename = build_user_key_binding_filename();
+ if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ return filename;
+
+ g_free(filename);
/* check for global key bindings SYSCONFDIR/ncmpc/keys */
- if (filename == NULL) {
- filename = g_build_filename(SYSCONFDIR, PACKAGE, "keys", NULL);
- if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
- g_free(filename);
- filename = NULL;
- }
+ filename = g_build_system_key_binding_filename();
+ if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ return filename;
+
+ g_free(filename);
+ return NULL;
+}
+
+void
+read_configuration(void)
+{
+ /* load configuration */
+ char *filename = find_config_file();
+ if (filename != NULL) {
+ read_rc_file(filename);
+ g_free(filename);
}
/* load key bindings */
- if (filename) {
+ filename = find_keys_file();
+ if (filename != NULL) {
read_rc_file(filename);
g_free(filename);
- filename = NULL;
}
-
- return 0;
}