Code

conf: simplify read_configuration()
[ncmpc.git] / src / conf.c
index 1aaa1666d2b1eae73d30e1c8eed4b1a6efd143cd..87fa51e7a05e2b356dc9118d81f09975438bb6af 100644 (file)
@@ -25,6 +25,7 @@
 #include "colors.h"
 #include "screen_list.h"
 
+#include <assert.h>
 #include <ctype.h>
 #include <stdio.h>
 #include <errno.h>
@@ -80,6 +81,7 @@
 #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
@@ -377,7 +379,6 @@ parse_line(char *line)
        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]))
@@ -395,8 +396,6 @@ parse_line(char *line)
                value[j++] = line[i++];
        value[j] = '\0';
 
-       match_found = true;
-
        /* key definition */
        if (!strcasecmp(CONF_KEY_DEFINITION, name))
                parse_key_definition(value);
@@ -543,6 +542,12 @@ parse_line(char *line)
                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
@@ -550,24 +555,22 @@ parse_line(char *line)
 #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);
@@ -648,66 +651,93 @@ build_user_key_binding_filename(void)
 #endif
 }
 
-void
-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 = build_user_conf_filename();
-               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 = build_system_conf_filename();
-               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 = build_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;
        }
 }