Code

screen_chat: add nick name emulation
[ncmpc.git] / src / conf.c
index 5f35d205d5d70369a0918d2f5cd4e349d2af5b1c..50feefee6e2807f3b5c5e9331e8291b6ad0eba3b 100644 (file)
@@ -601,13 +601,81 @@ check_user_conf_dir(void)
        return retval;
 }
 
+char *
+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
+static char *
+g_build_system_key_binding_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, "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
+}
+
+void
 read_configuration(void)
 {
        char *filename = NULL;
@@ -618,8 +686,7 @@ read_configuration(void)
 
        /* check for user configuration ~/.ncmpc/config */
        if (filename == NULL) {
-               filename = g_build_filename(g_get_home_dir(),
-                                           "." PACKAGE, "config", NULL);
+               filename = build_user_conf_filename();
                if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
                        g_free(filename);
                        filename = NULL;
@@ -628,7 +695,7 @@ read_configuration(void)
 
        /* check for  global configuration SYSCONFDIR/ncmpc/config */
        if (filename == NULL) {
-               filename = g_build_filename(SYSCONFDIR, PACKAGE, "config", NULL);
+               filename = build_system_conf_filename();
                if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
                        g_free(filename);
                        filename = NULL;
@@ -657,7 +724,7 @@ read_configuration(void)
 
        /* check for  global key bindings SYSCONFDIR/ncmpc/keys */
        if (filename == NULL) {
-               filename = g_build_filename(SYSCONFDIR, PACKAGE, "keys", NULL);
+               filename = g_build_system_key_binding_filename();
                if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
                        g_free(filename);
                        filename = NULL;
@@ -670,6 +737,4 @@ read_configuration(void)
                g_free(filename);
                filename = NULL;
        }
-
-       return 0;
 }