4
* Copyright 2012 Alex <alex@linuxonly.ru>
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 3 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
22
#include <glib/gprintf.h>
28
settings_t gmm_settings_open(gchar *appname, gchar *filename)
31
const gchar *homepath;
37
if ((appname == NULL) || (filename == NULL)) return NULL;
39
homepath = g_get_home_dir();
41
if (homepath == NULL) return NULL;
43
confpath = g_build_filename(homepath, ".config", appname, NULL);
45
if (g_mkdir_with_parents(confpath, 0755) != 0) {
46
g_warning("Cant create program settings directory");
53
settings = g_new(struct _settings, 1);
55
settings->filename = g_build_filename(homepath, ".config", appname, filename, NULL);
57
settings->keyfile = g_key_file_new();
61
if (g_file_get_contents(settings->filename, &filedata, &datasize, &error)) {
62
if (!g_key_file_load_from_data(settings->keyfile, filedata, datasize, G_KEY_FILE_NONE, &error)) {
63
g_warning("No data loaded from file");
68
g_warning("No data loaded from file");
76
gboolean gmm_settings_close(settings_t settings)
82
if (settings == NULL) return FALSE;
84
if ((settings->filename == NULL) || (settings->keyfile == NULL)) return FALSE;
88
filedata = g_key_file_to_data(settings->keyfile, &datasize, &error);
90
if (filedata != NULL) {
91
if (!g_file_set_contents(settings->filename, filedata, datasize, &error)) {
92
g_warning("No data saved to file");
97
g_warning("No data saved to file");
103
g_free(settings->filename);
104
g_key_file_free(settings->keyfile);
110
gboolean gmm_settings_set_string(settings_t settings, gchar *key, gchar *value)
112
if ((settings == NULL) || (key == NULL) || (value == NULL)) return FALSE;
114
g_key_file_set_string(settings->keyfile, "settings", key, value);
119
gchar *gmm_settings_get_string(settings_t settings, gchar *key, gchar *defvalue)
124
if ((settings == NULL) || (key == NULL)) return g_strdup(defvalue);
128
value = g_key_file_get_string(settings->keyfile, "settings", key, &error);
130
if ((value == NULL) && (error != NULL)) {
132
return g_strdup(defvalue);
134
return g_strdup(value);
138
gboolean gmm_settings_set_boolean(settings_t settings, gchar *key, gboolean value)
140
if ((settings == NULL) || (key == NULL)) return FALSE;
142
g_key_file_set_boolean(settings->keyfile, "settings", key, value);
147
gboolean gmm_settings_get_boolean(settings_t settings, gchar *key, gboolean defvalue)
152
if ((settings == NULL) || (key == NULL)) return defvalue;
156
value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error);
158
if ((error != NULL)) {
166
gboolean gmm_settings_set_int(settings_t settings, gchar *key, gint value)
168
if ((settings == NULL) || (key == NULL)) return FALSE;
170
g_key_file_set_integer(settings->keyfile, "settings", key, value);
175
gint gmm_settings_get_int(settings_t settings, gchar *key, gint defvalue)
180
if ((settings == NULL) || (key == NULL)) return defvalue;
184
value = g_key_file_get_integer(settings->keyfile, "settings", key, &error);
186
if ((error != NULL)) {
194
gboolean gmm_settings_set_double(settings_t settings, gchar *key, gdouble value)
196
if ((settings == NULL) || (key == NULL)) return FALSE;
198
g_key_file_set_double(settings->keyfile, "settings", key, value);
203
gdouble gmm_settings_get_double(settings_t settings, gchar *key, gdouble defvalue)
208
if ((settings == NULL) || (key == NULL)) return defvalue;
212
value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error);
214
if ((error != NULL)) {