+
+static const char *get_sensor_config_path()
+{
+ const char *dir;
+
+ if (!sensor_config_path) {
+ dir = get_psensor_user_dir();
+
+ if (dir)
+ sensor_config_path = path_append(dir, "psensor.cfg");
+ }
+
+ return sensor_config_path;
+}
+
+static GKeyFile *get_sensor_key_file()
+{
+ int ret;
+ GError *err;
+ const char *path;
+
+ if (!key_file) {
+ path = get_sensor_config_path();
+
+ key_file = g_key_file_new();
+
+ err = NULL;
+ ret = g_key_file_load_from_file(key_file,
+ path,
+ G_KEY_FILE_KEEP_COMMENTS
+ | G_KEY_FILE_KEEP_TRANSLATIONS,
+ &err);
+
+ if (!ret) {
+ if (err->code == G_KEY_FILE_ERROR_NOT_FOUND) {
+ log_fct(_("The configuration file "
+ "does not exist."));
+ } else {
+ log_err(_("Failed to parse configuration "
+ "file: %s"),
+ path);
+ }
+ }
+ }
+
+ return key_file;
+}
+
+static void save_sensor_key_file()
+{
+ GKeyFile *kfile;
+ const char *path;
+ char *data;
+
+ log_fct_enter();
+
+ kfile = get_sensor_key_file();
+
+ data = g_key_file_to_data(kfile, NULL, NULL);
+
+ path = get_sensor_config_path();
+
+ if (!g_file_set_contents(path, data, -1, NULL))
+ log_err(_("Failed to save configuration file %s."), path);
+
+ free(data);
+
+ log_fct_exit();
+}
+
+void config_sync()
+{
+ log_fct_enter();
+ save_sensor_key_file();
+ log_fct_exit();
+}
+
+static void
+config_sensor_set_string(const char *sid, const char *att, const char *str)
+{
+ GKeyFile *kfile;
+
+ kfile = get_sensor_key_file();
+ g_key_file_set_string(kfile, sid, att, str);
+}
+
+static char *config_sensor_get_string(const char *sid, const char *att)
+{
+ GKeyFile *kfile;
+
+ kfile = get_sensor_key_file();
+ return g_key_file_get_string(kfile, sid, att, NULL);
+}
+
+static bool config_sensor_get_bool(const char *sid, const char *att)
+{
+
+ GKeyFile *kfile;
+
+ kfile = get_sensor_key_file();
+ return g_key_file_get_boolean(kfile, sid, att, NULL);
+}
+
+static void
+config_sensor_set_bool(const char *sid, const char *att, bool enabled)
+{
+ GKeyFile *kfile;
+
+ kfile = get_sensor_key_file();
+
+ g_key_file_set_boolean(kfile, sid, att, enabled);
+}
+
+static int config_sensor_get_int(const char *sid, const char *att)
+{
+
+ GKeyFile *kfile;
+
+ kfile = get_sensor_key_file();
+ return g_key_file_get_integer(kfile, sid, att, NULL);
+}
+
+static void
+config_sensor_set_int(const char *sid, const char *att, int i)
+{
+ GKeyFile *kfile;
+
+ kfile = get_sensor_key_file();
+
+ g_key_file_set_integer(kfile, sid, att, i);
+}
+
+char *config_get_sensor_name(const char *sid)
+{
+ return config_sensor_get_string(sid, ATT_SENSOR_NAME);
+}
+
+void config_set_sensor_name(const char *sid, const char *name)
+{
+ config_sensor_set_string(sid, ATT_SENSOR_NAME, name);
+}
+
+void config_set_sensor_color(const char *sid, const struct color *color)
+{
+ char *scolor;
+
+ scolor = color_to_str(color);
+
+ config_sensor_set_string(sid, ATT_SENSOR_COLOR, scolor);
+
+ free(scolor);
+}
+
+struct color *
+config_get_sensor_color(const char *sid, const struct color *dft)
+{
+ char *scolor;
+ struct color *color;
+
+ scolor = config_sensor_get_string(sid, ATT_SENSOR_COLOR);
+
+ if (scolor)
+ color = str_to_color(scolor);
+ else
+ color = NULL;
+
+ if (!color) {
+ color = color_new(dft->red, dft->green, dft->blue);
+ config_set_sensor_color(sid, color);
+ }
+
+ free(scolor);
+
+ return color;
+}
+
+bool config_is_sensor_enabled(const char *sid)
+{
+ return config_sensor_get_bool(sid, ATT_SENSOR_GRAPH_ENABLED);
+}
+
+void config_set_sensor_enabled(const char *sid, bool enabled)
+{
+ config_sensor_set_bool(sid, ATT_SENSOR_GRAPH_ENABLED, enabled);
+}
+
+int config_get_sensor_alarm_high_threshold(const char *sid)
+{
+ return config_sensor_get_int(sid, ATT_SENSOR_ALARM_HIGH_THRESHOLD);
+}
+
+void config_set_sensor_alarm_high_threshold(const char *sid, int threshold)
+{
+ config_sensor_set_int(sid, ATT_SENSOR_ALARM_HIGH_THRESHOLD, threshold);
+}
+
+int config_get_sensor_alarm_low_threshold(const char *sid)
+{
+ return config_sensor_get_int(sid, ATT_SENSOR_ALARM_LOW_THRESHOLD);
+}
+
+void config_set_sensor_alarm_low_threshold(const char *sid, int threshold)
+{
+ config_sensor_set_int(sid, ATT_SENSOR_ALARM_LOW_THRESHOLD, threshold);
+}
+
+bool config_is_appindicator_enabled(const char *sid)
+{
+ return !config_sensor_get_bool(sid,
+ ATT_SENSOR_APPINDICATOR_MENU_DISABLED);
+}
+
+void config_set_appindicator_enabled(const char *sid, bool enabled)
+{
+ return config_sensor_set_bool(sid,
+ ATT_SENSOR_APPINDICATOR_MENU_DISABLED,
+ !enabled);
+}
+
+int config_get_sensor_position(const char *sid)
+{
+ return config_sensor_get_int(sid, ATT_SENSOR_POSITION);
+}
+
+void config_set_sensor_position(const char *sid, int pos)
+{
+ return config_sensor_set_int(sid, ATT_SENSOR_POSITION, pos);
+}
+
+bool config_get_sensor_alarm_enabled(const char *sid)
+{
+ return config_sensor_get_bool(sid, ATT_SENSOR_ALARM_ENABLED);
+}
+
+void config_set_sensor_alarm_enabled(const char *sid, bool enabled)
+{
+ config_sensor_set_bool(sid, ATT_SENSOR_ALARM_ENABLED, enabled);
+}
+
+bool config_is_appindicator_label_enabled(const char *sid)
+{
+ return config_sensor_get_bool(sid,
+ ATT_SENSOR_APPINDICATOR_LABEL_ENABLED);
+}
+
+void config_set_appindicator_label_enabled(const char *sid, bool enabled)
+{
+ config_sensor_set_bool(sid,
+ ATT_SENSOR_APPINDICATOR_LABEL_ENABLED,
+ enabled);
+}
+