about summary refs log tree commit diff stats
path: root/src/config
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2019-10-04 14:06:25 +0200
committerMichael Vetter <jubalh@iodoru.org>2019-10-04 14:06:25 +0200
commit5c77b97c35ceafc5c60c4e9a7a6e06d4bd253f3a (patch)
tree5b3566aeeec4ba46c5893cc7c32d784e0040315b /src/config
parent523681a642576f3889958849b503fffeb9bef280 (diff)
downloadprofani-tty-5c77b97c35ceafc5c60c4e9a7a6e06d4bd253f3a.tar.gz
Introduce /reload command
This command reloads the configuration file.

Fix https://github.com/profanity-im/profanity/issues/627
Diffstat (limited to 'src/config')
-rw-r--r--src/config/preferences.c52
-rw-r--r--src/config/preferences.h1
2 files changed, 35 insertions, 18 deletions
diff --git a/src/config/preferences.c b/src/config/preferences.c
index e8f19996..fc755bff 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -78,25 +78,9 @@ static const char* _get_key(preference_t pref);
 static gboolean _get_default_boolean(preference_t pref);
 static char* _get_default_string(preference_t pref);
 
-void
-prefs_load(char *config_file)
+void _prefs_load(void)
 {
-    GError *err;
-
-    if (config_file == NULL) {
-        prefs_loc = files_get_config_path(FILE_PROFRC);
-    } else {
-        prefs_loc = config_file;
-    }
-
-    if (g_file_test(prefs_loc, G_FILE_TEST_EXISTS)) {
-        g_chmod(prefs_loc, S_IRUSR | S_IWUSR);
-    }
-
-    prefs = g_key_file_new();
-    g_key_file_load_from_file(prefs, prefs_loc, G_KEY_FILE_KEEP_COMMENTS, NULL);
-
-    err = NULL;
+    GError *err = NULL;
     log_maxsize = g_key_file_get_integer(prefs, PREF_GROUP_LOGGING, "maxsize", &err);
     if (err) {
         log_maxsize = 0;
@@ -181,6 +165,38 @@ prefs_load(char *config_file)
 }
 
 void
+prefs_reload(void)
+{
+    g_key_file_free(prefs);
+    prefs = NULL;
+
+    prefs = g_key_file_new();
+    g_key_file_load_from_file(prefs, prefs_loc, G_KEY_FILE_KEEP_COMMENTS, NULL);
+
+    _prefs_load();
+}
+
+void
+prefs_load(char *config_file)
+{
+
+    if (config_file == NULL) {
+        prefs_loc = files_get_config_path(FILE_PROFRC);
+    } else {
+        prefs_loc = config_file;
+    }
+
+    if (g_file_test(prefs_loc, G_FILE_TEST_EXISTS)) {
+        g_chmod(prefs_loc, S_IRUSR | S_IWUSR);
+    }
+
+    prefs = g_key_file_new();
+    g_key_file_load_from_file(prefs, prefs_loc, G_KEY_FILE_KEEP_COMMENTS, NULL);
+
+    _prefs_load();
+}
+
+void
 prefs_save(void)
 {
     _save_prefs();
diff --git a/src/config/preferences.h b/src/config/preferences.h
index 08f13cb0..1a6250a4 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -169,6 +169,7 @@ typedef struct prof_winplacement_t {
 void prefs_load(char *config_file);
 void prefs_save(void);
 void prefs_close(void);
+void prefs_reload(void);
 
 char* prefs_find_login(char *prefix);
 void prefs_reset_login_search(void);